![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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