Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Глюк - не глюк, но что то не то в 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"инья паблишед полей у форм и датамодулей, которые асациированны с компонентами брошеннымми в дизин тайм на эти формы/модули, но как то это кривовато - не находите??


 
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]


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


Не находим


 
Игорь Шевченко ©   (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

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


 
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]


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


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


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


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

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


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

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


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


> Не находим


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


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


> Не находим


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


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

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


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

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



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

Форум: "Потрепаться";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.03 c
7-1079767987
Kerk
2004-03-20 10:33
2004.05.09
.reloc


1-1082382179
Ruslan
2004-04-19 17:42
2004.05.09
Как поместить картинку в заголовок ListView?


14-1082007907
BaDeVlad
2004-04-15 09:45
2004.05.09
Кто хочет протестировать блокнотик


9-1071007468
i4004
2003-12-10 01:04
2004.05.09
Кто знает?


6-1079210061
Russu
2004-03-13 23:34
2004.05.09
ClientSocket+Proxy





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский