Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.31;
Скачать: CL | DM;

Вниз

Self будет на кого указывать   Найти похожие ветки 

 
Dennis I. Komarov ©   (2008-07-22 13:52) [0]

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 не объявлять)


 
Palladin ©   (2008-07-22 13:52) [1]

на TFormAny


 
Dennis I. Komarov ©   (2008-07-22 13:53) [2]

:(


 
Dennis I. Komarov ©   (2008-07-22 13:53) [3]

Тогда (3) :)


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

Intercept:=TIdLogFile.Create(Self);


 
Palladin ©   (2008-07-22 13:58) [5]


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

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

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


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

упс

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


 
Palladin ©   (2008-07-22 14:06) [7]

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

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


 
Dennis I. Komarov ©   (2008-07-22 14:07) [8]

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


 
Palladin ©   (2008-07-22 14:15) [9]

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


 
Palladin ©   (2008-07-22 14:17) [10]

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

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

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


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


 
Anatoly Podgoretsky ©   (2008-07-22 14:25) [11]


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

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


 
Dennis I. Komarov ©   (2008-07-22 14:28) [12]

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


 
Palladin ©   (2008-07-22 14:28) [13]

конечно


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

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

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


 
Dennis I. Komarov ©   (2008-07-22 14:30) [15]

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

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


 
Dennis I. Komarov ©   (2008-07-22 14:51) [16]

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

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


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


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


> Dennis I. Komarov


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2008.08.31;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.059 c
15-1215708563
Nodt
2008-07-10 20:49
2008.08.31
Собираю машину.


2-1216835667
valer4
2008-07-23 21:54
2008.08.31
try..finally


2-1216831690
ivanoff
2008-07-23 20:48
2008.08.31
DBGridEh - научить любить и "," и "."


15-1215778070
Vlad Oshin
2008-07-11 16:07
2008.08.31
Oracle. В таблице all_all_tables находятся названия всех таблиц?


4-1195858527
periskops
2007-11-24 01:55
2008.08.31
пульт