![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| uwannadie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 5.6.2009 Где: Крым, Керчь Репутация: нет Всего: 1 |
эх, а я то думал, что у меня индусский код...
пойду шаманить дальше... --------------------
|
|||
|
||||
| Dom |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 7.8.2005 Репутация: 1 Всего: 4 |
Попробуй FullExpand вызвать для дерева, и потом сделай Clear. При этом дерево должно память освободить. И связанных с этим утечек памяти не будет.
Это конечно не очень красиво, но пока не пойму как иначе сделать. |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
Dom, точно!
Утечек =0, проверено на папке C:\ |
|||
|
||||
| Dom |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 7.8.2005 Репутация: 1 Всего: 4 |
kami, да, работать будет. Но мне кажется что в таком красивом компоненте инициализация должна делаться как-то изящнее. Смотрел исходники, так пока и не увидел где и в какой момент добавляется состояние vsInitialized добавленному узлу, который отображается, видимо где-то при попытке вывести содержимое узла на экран он и инициализируется. Но суть не в этом, вопрос в том как правильно инициализировать узел?
И кстати если уже решать проблему в лоб, то достаточно добавить vsInitialized, состояние vsInitialUserData используется немного для других целей. |
|||
|
||||
| uwannadie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 5.6.2009 Где: Крым, Керчь Репутация: нет Всего: 1 |
ну если не ошибаюсь, то в мануалах по VT написано, что дочерние элементы в дерево рекомендуется добавлять через события
OnInitChildren, а метод AddChild не рекомендуется использовать. Это сообщение отредактировал(а) uwannadie - 5.4.2010, 02:52 --------------------
|
|||
|
||||
| Dom |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 7.8.2005 Репутация: 1 Всего: 4 |
Точно! Тоже нашел про инициализацию и добавление узлов в дерево через RootNodeCount, OnInitNode, OnInitChildren. Красиво конечно.
Только тут могут возникнуть заморочки с динамическим добавлением данных в узел, т.е. в рассматриваемом случае надо генерировать записи на лету при первом обращении к узлу. Либо надо где-то хранить предварительно созданный и заполненный список/массив исходных записей, что уже само по себе не есть правильно, т.к. при инициализации придется копировать эти данные в дерево. Следовательно расход памяти возрастет. |
|||
|
||||
| Dom |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 7.8.2005 Репутация: 1 Всего: 4 |
Вот процедура для ручной инициализации узла и если надо его наследников - ReinitNode.
Так что если нет желания переходить на OnInitNode и OnInitChildren, то после заполнения узлов по AddChild, надо пробежаться по ним всем и инициализировать этой процедурой. И тогда утечек не будет. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |