Главная страница
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.48 MB
Время: 0.045 c
2-1157266373
PWD
2006-09-03 10:52
2006.09.24
Скопировать прямоугольную область с одного TBitmap в другой


1-1155143860
Handle
2006-08-09 21:17
2006.09.24
Вопрос про SysListView.


3-1153390097
zorik
2006-07-20 14:08
2006.09.24
Способы сортировки или как отсортировать украинские символы?


1-1155045210
Kiloper
2006-08-08 17:53
2006.09.24
Есть ли аналог компонентов MEMO или RichEdit в delphi?


15-1157452423
Konstantin555
2006-09-05 14:33
2006.09.24
HELP! Как разблокировать CD-ROM?!