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

Вниз

Перехватить уничтожение контрола при закрытии приложения   Найти похожие ветки 

 
mfender ©   (2006-12-25 12:25) [0]

Здравия желаю!

У меня опять вопрос: имеется TTreeView. При закрытии приложения он уничтожается, начиная с самого нижнего TTreeNode. Т.е. получается, что к деструктору всего TreeView очередь доходит уже когда нет ни одного узла. А мне нужно поймать этот момент (пока все node"ы целы) и записать в TStringList все, у которых Expanded = True.

Конечно, самое простое - использовать OnClose формы. Но мне хочется это сделать внутри объекта TTreeView (на самом деле, он не TTreeView, но его наследник).


 
Ega23 ©   (2006-12-25 12:28) [1]

Попробуй TTreeView.BeforeDestruction


 
Loginov Dmitry ©   (2006-12-25 15:24) [2]

Больное место TTreeView в Delphi. Была проблема, связанная с освобождением памяти, занятой под объекты, ссылки на которые хранятся в TTreeNode.Data. OnDeletion нельзя было использовать, пришлось все освобождать в FormClose.


 
Ega23 ©   (2006-12-25 15:28) [3]


> Больное место TTreeView в Delphi. Была проблема, связанная
> с освобождением памяти, занятой под объекты, ссылки на которые
> хранятся в TTreeNode.Data. OnDeletion нельзя было использовать,
>  пришлось все освобождать в FormClose.
>


Ничего больного.
Просто этот гад (TCustomTreeView) на DestroyWnd сохраняет данные о нодах во втутренний Stream, а на CreateWnd - восстанавливает.


 
umbra ©   (2006-12-25 15:34) [4]

а что мешает проделать нужные действия в деструкторе наследника?


 
Loginov Dmitry ©   (2006-12-25 15:34) [5]

> что мешает проделать нужные действия в деструкторе наследника?


До него ноды не доживают.


 
umbra ©   (2006-12-25 15:42) [6]

вот я смотрю в код деструктора TCustomTreeView. Первая строчка в нем - FTreeNodes.Free;, т.е. ноды, по видимости, до деструктора доживают.


 
Ega23 ©   (2006-12-25 15:43) [7]


> До него ноды не доживают.


Это если inherited сразу после begin ставить, а не перед end.


 
Ega23 ©   (2006-12-25 15:44) [8]


> вот я смотрю в код деструктора TCustomTreeView. Первая строчка
> в нем - FTreeNodes.Free;, т.е. ноды, по видимости, до деструктора
> доживают.


Если DestroyWnd по каким-то причинам раньше отработала (Parent убрали или программу "свернули"), то это ничего не даст; посмотри как она реализована


 
umbra ©   (2006-12-25 16:23) [9]

вопрос с DestroyWnd можно решить двумя способами:

1) у TCustomTreeView есть protected свойство CreateWndRestores, которое по умолчанию равно True. Именно от него зависит, будут ли ноды сохраняться в отдельный поток. У наследника  его можно менять по своему усмотрению. Правда, подозреваю, что если его сделать False, то в таком случае не будут сохраняться выделенные элементы и отрисовка будет медленнее.

2) перекрыть в наследнике саму DestroyWnd и сохранять данные в ней.


 
Ega23 ©   (2006-12-25 16:32) [10]


> перекрыть в наследнике саму DestroyWnd и сохранять данные
> в ней.
>


Я именно так и сделал: перекрыл CreateWnd и destroyWnd с собственным алгоритмом сохранения-считывания карты узлов



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

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

Наверх




Память: 0.47 MB
Время: 0.012 c
15-1166702224
KatE*
2006-12-21 14:57
2007.01.14
Помогите сделать лёгкую прогу!!!!!!!!!!!


2-1167097643
Loona
2006-12-26 04:47
2007.01.14
inhereted


15-1167038945
WondeRu
2006-12-25 12:29
2007.01.14
В среду сдал на сертификат Microsoft


2-1167132325
LPal7
2006-12-26 14:25
2007.01.14
прооблемы с blob полем


2-1167124313
inkvizitor
2006-12-26 12:11
2007.01.14
chart





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