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

Вниз

Ссылка не обнуляется.   Найти похожие ветки 

 
VEZ   (2006-09-05 17:45) [0]

Усть объект:
unit uObjects;

interface

uses
 ComCtrls;

Type
 Ta=class
 private
   FNode:TTreeNode;
 public
   constructor Create(Node:TTreeNode);
   destructor Destroy; override;
 end;

implementation

constructor Ta.Create(Node:TTreeNode);
begin
FNode:=Node;
FNode.Data:=Self;
end;

destructor Ta.Destroy;
begin
FNode.Free;
FNode:=nil;
 inherited;
end;

В главной форме удаляем Node из TTreeView:
procedure TForm2.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
var
aa:Ta;
begin
aa:=Ta(Node.Data);
Node.Data:=nil;
aa.Free;
end;

но ссылка Node.Data при заходе в деструктор объекта каким-то чудесным образом восстонавливается, и начинается удаление нода, где в онделешен опять же ссылка как нивчём небывало, в результате процесс зацикливается и происходит переполнение стека, пробовал отключать оптимизацию(возможно оптимизатор делфи напарил) всё попрежнему(BDS 2006, WinXP, Win2003).


 
Amoeba ©   (2006-09-05 18:06) [1]


> aa:=Ta(Node.Data);

Ересь!


 
han_malign ©   (2006-09-05 18:09) [2]

Node.Data:=nil;
procedure TTreeNode.SetData(Value: Pointer);
begin
 if not Deleting and (Value <> Data) then
 begin
   FData := Value;
   if (TreeView.SortType in [stData, stBoth]) and Assigned(TreeView.OnCompare)
     and (not Deleting) and FInTree then
   begin
     if Parent <> nil then
       Parent.AlphaSort
     else
       TreeView.AlphaSort(False);
   end;
 end;
end;

- это раз...

- советую подумать при каком событии вызывается OnDeletion - это два.


 
Desdechado ©   (2006-09-05 18:15) [3]

а где у тебя в деструкторе  Node.Data


 
han_malign ©   (2006-09-05 18:18) [4]

destructor Ta.Destroy;
begin
    FNode.Data:= nil;
    FNode.Delete;
    inherited;
end;

- подумай над каждой строчкой, посмотри реализацию TTreeNode.Delete


 
VEZ   (2006-09-05 22:23) [5]


> Amoeba ©   (05.09.06 18:06) [1]
> > aa:=Ta(Node.Data);Ересь!


Что за ересь.


 
VEZ   (2006-09-05 22:30) [6]


> - советую подумать при каком событии вызывается OnDeletion
> - это два.


Occurs when a node in the tree view is deleted.


 
VEZ   (2006-09-05 22:37) [7]


> han_malign ©   (05.09.06 18:18) [4]
> destructor Ta.Destroy;begin     FNode.Data:= nil;     FNode.
> Delete;     inherited;end; - подумай над каждой строчкой,
>  посмотри реализацию TTreeNode.Delete


Спасибо, помогло.



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

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

Наверх




Память: 0.46 MB
Время: 0.044 c
2-1157284876
Konstantin555
2006-09-03 16:01
2006.09.24
Проблема с StringReplace...


3-1153404571
KyRo
2006-07-20 18:09
2006.09.24
Вопрос по набору данных в ADOTable


1-1155123140
Stanislav
2006-08-09 15:32
2006.09.24
Нажата ли клавиша Shift


15-1157088870
Ega23
2006-09-01 09:34
2006.09.24
С Днём рождения! 1 сентября


15-1157102775
ToTo
2006-09-01 13:26
2006.09.24
Читаем книги?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский