Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Self будет на кого указывать


Dennis I. Komarov ©   (2008-07-22 13:52:00) 

procedure TFormAny.Bla-bla...
var
Log: TIdLogFile;
...

...
with TIdFTP.Create(nil) do try
...
Log:=TIdLogFile.Create(Self);
...
Intercept:=Log;
...

1. Self будет на экpемпляh TIdFTP или TFormAny
2. Если на TIdFTP то память от Log чистить не надо ибо при (FTP) Free он сам должен. Прав ли я тут?
3. Как лучше написать код (хотелось Log не объявлять)


Медвежонок Пятачок   (2008-07-23 12:06:00) [1]

TIdLogFileWithSelf = class(TIdLogFile)
public
 property HimSelf : TIdLogFile read : GetHimSelf;
end;


Сергей М.   (2008-07-22 20:37:00) [2]


> Dennis I. Komarov


Видишь ли, код, использующий with, - он, конечно, строг и изящен, но .. для пошаговой трассировки при отладке крайне неудобен ..


Dennis I. Komarov   (2008-07-22 14:51:00) [3]

Результат (если вдруг...)

FTP:=TIdFTP.Create(Self);
with FTP do try
 .....
 Intercept:=TIdLogFile.Create(FTP);
 with TIdLogFile(Intercept) do begin
   FileName:='...';
   Activate:=true;
 end;
.....
.....
.....
finally
 Free;
end;


З.Ы. Люблю красивый код. Всем Спасибо!


Dennis I. Komarov   (2008-07-22 14:30:00) [4]

> [13] Palladin ©   (22.07.08 14:28)

это я на всякий пожарный :)


Dennis I. Komarov   (2008-07-22 14:30:00) [5]

> [11] Anatoly Podgoretsky ©   (22.07.08 14:25)

одна, но там уже проехали :) хотелось просто отловить указатель который внутри WITH


Palladin   (2008-07-22 14:28:00) [6]

конечно


Dennis I. Komarov   (2008-07-22 14:28:00) [7]

with TIdFTP.Create(Self) do try
 name:='blabla'+_UID;
 Intercept:=TIdLogFile.Create(Self.FindComponent(Name));
finally
 Free; // Тут экземпляр TIdLogFile "умрет"?
end;


Anatoly Podgoretsky   (2008-07-22 14:25:00) [8]


> Self будет на экpемпляh TIdFTP или TFormAny

А это одна процедура или несколько.


Palladin   (2008-07-22 14:17:00) [9]

хотя можно конечно и так выкрутиться

Type
TFreeProc=Procedure of Object;
Var
p:TFreeProc;

with TIdFTP.Create(Self) do try
p:=Free;
Intercept:=TIdLogFile.Create(TComponent(TMethod(p).Data));


но переменную завести все равно придется


Palladin   (2008-07-22 14:15:00) [10]

значит придется заводить переменную


Dennis I. Komarov   (2008-07-22 14:07:00) [11]

Ложка дегтя :)
 Self-a нет.


Palladin   (2008-07-22 14:06:00) [12]

и даже еще проще

with TIdFTP.Create(Self) do try
 name:='blabla'+_UID;
 Intercept:=TIdLogFile.Create(Self.FindComponent( Name));


Palladin   (2008-07-22 13:59:00) [13]

упс

with TIdFTP.Create(Self) do try
 name:='blabla'+_UID;
 Intercept:=TIdLogFile.Create(Self.FindComponent('blabla'+_UID));


Palladin   (2008-07-22 13:58:00) [14]


> 3. Как лучше написать код (хотелось Log не объявлять)

:) ну можно с финтом

with TIdFTP.Create(Self) do try
name:='blabla'+_UID;
Log:=TIdLogFile.Create(Self.FindComponent('blabla'+_UID));
...
Intercept:=Log;


Правильный$Вася   (2008-07-22 13:56:00) [15]

Intercept:=TIdLogFile.Create(Self);


Dennis I. Komarov   (2008-07-22 13:53:00) [16]

Тогда (3) :)


Dennis I. Komarov   (2008-07-22 13:53:00) [17]

:(


Palladin   (2008-07-22 13:52:00) [18]

на TFormAny


Наверх

Титульная страница Поиск, карта сайта Написать письмо