Форум: "Начинающим";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];
ВнизСсылка не обнуляется. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c