Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.014 c
2-1216819268
lavgirls
2008-07-23 17:21
2008.08.31
Подскажите как удалить папку


2-1216711598
OlBan
2008-07-22 11:26
2008.08.31
Отправка sms кириллица через модем


15-1215588601
pasha_golub
2008-07-09 11:30
2008.08.31
Куда ложить библиотеки


15-1215766185
ekto
2008-07-11 12:49
2008.08.31
Создать класс или обойтись процедурками.


6-1192630512
JanMihail
2007-10-17 18:15
2008.08.31
Как узнать, удачно ли завершился запрос?




   Наверх