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

Вниз

Глюк - не глюк, но что то не то в TComponent   Найти похожие ветки 

 
jack128 ©   (2004-04-21 22:50) [0]

Итак код:

type
 TTextComponent = class(TComponent)
 published
   Test: TComponent;
   Comp: TComponent;
 end;

procedure TForm1.Button1Click(Sender: TObject);
var
 t: TTextComponent;
begin
t := TTextComponent.Create(nil);
try
  t.Comp := TComponent.Create(t);
  t.Comp.Name := "Test";
  t.Test := TComponent.Create(t);
  t.Comp.Free;
  if Assigned(t.Test) then
    t.Test.Free
  else
    Caption := "уже nil !!!!"; // как ни странно Test - уже nil ;-)
finally
  t.Free;
end;
end;

Вобщем то источник этого поведения найти легко

procedure TComponent.SetReference(Enable: Boolean);
var
 Field: ^TComponent;
begin
 if FOwner <> nil then
 begin
   Field := FOwner.FieldAddress(FName);
   if Field <> nil then
     if Enable then Field^ := Self else Field^ := nil;
 end;
end;

Думаю это сделано для об"nil"инья паблишед полей у форм и датамодулей, которые асациированны с компонентами брошеннымми в дизин тайм на эти формы/модули, но как то это кривовато - не находите??


 
Игорь Шевченко ©   (2004-04-21 22:56) [1]


> но как то это кривовато - не находите??


Не находим


 
Anatoly Podgoretsky ©   (2004-04-21 23:18) [2]

t.Comp.Free;
 if Assigned(t.Test) then
   t.Test.Free

Грубо и опасно, обращение к разрушенному объекту


 
Jack128 ©   (2004-04-21 23:20) [3]


> Грубо и опасно, обращение к разрушенному объекту
Это где я обратился к уже разрушенному объекту???


 
Anatoly Podgoretsky ©   (2004-04-21 23:37) [4]

Ошибся прочитал как   t.Free;


 
Fantasist ©   (2004-04-22 02:16) [5]


> Не находим


 Исчерпывающе.


 
Юрий Зотов ©   (2004-04-22 06:50) [6]

Некая кривизна, пожалуй, и правда есть. Откуда и почему она взялась - понятно. Способ в нее не влететь тоже ясен - просто не надо давать никаких имен динамически созданным компонентам. Тем более, что они им совершенно не нужны.



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

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

Наверх




Память: 0.48 MB
Время: 0.03 c
4-1079685128
ai
2004-03-19 11:32
2004.04.11
По какому событию можно отследить измение порядка видимых окон?


1-1082220714
SL
2004-04-17 20:51
2004.04.11
Сохранение картинки и т.д. из QReport в файл *.bmp


6-1076265604
человек в сети
2004-02-08 21:40
2004.04.11
подскажите пожалуйста книгу или доку по написанию чата для локалы


1-1079691399
Ярыч
2004-03-19 13:16
2004.04.11
dream scripter


1-1080052814
B-boy Dimo-N
2004-03-23 17:40
2004.04.11
конвертация txt -> doc