Главная страница
    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.042 c
2-1157633453
fly_mer
2006-09-07 16:50
2006.09.24
чтоб кнопка на таскбаре не показывалась вообще


2-1157215052
disPATCHer
2006-09-02 20:37
2006.09.24
Проблема с .pas файлом


1-1155205130
Lexiy
2006-08-10 14:18
2006.09.24
DB grid


15-1156947353
Pazitron_Brain
2006-08-30 18:15
2006.09.24
Посоветуйте бесплатный хостинг


4-1148203435
bober
2006-05-21 13:23
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский