Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.054 c
3-1153899026
SergP.
2006-07-26 11:30
2006.09.24
проблема с запросом (count(*)+group by)


15-1157041214
Sam Stone
2006-08-31 20:20
2006.09.24
TNSListner


1-1155198521
Всилий
2006-08-10 12:28
2006.09.24
Вовремя исполнения Form:=nil


1-1155302309
lorn
2006-08-11 17:18
2006.09.24
аналог TCrpe в 10 Сrystallreport


1-1155628054
трям
2006-08-15 11:47
2006.09.24
Как определить Rect выделенной ячейки в DBGrid ?





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