Вы совершенно правы. Ломается со второго вызова в демке procedure TDrawTreeForm.VDT1FreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); var Data: PShellObjectData; begin Data := Sender.GetNodeData(Node); Data.Image.Free; Finalize(Data^); // Clear string data. end;
Катюш, мне кажется, ты погорячилась. Не знаю, чо там в демках (я так и не смог выпилить встроенный vtv из Лазаря, а сторонние на ем не запускаются), но мануала для начала хватило, а потом понятна стала логика. Да и исходники там хорошо конспектированы https://wiki.freepascal.org/VirtualTreeview_Example_for_Lazarus/ru
Да особо и не настаиваю, компонента мне понравилась, я сразу сказала. С dfm ситуация сильно напомнола unigui, там часто в динамике что-то не получается сделать и либо делается через JS. А вот сделанное в дизайнере работает. Но тут ситуация понятна. За ссылочку спасибо. Попутный вопрос. Увидела procedure TForm1.VSTFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode); var Data: PTreeData; begin Data := VST.GetNodeData(Node); if Assigned(Data) then begin Data^.Column0 := ''; Data^.Column1 := ''; Data^.Column2 := ''; end; end; А в демке используется Finalize(Data^); // Clear string data. В Лазарусе Finalize нет? Я вообще эту процедуру вижу в первый раз
Finalize должен работать, просто автор оригинальной статьи решил все ручками сделать. И я бы тоже предпочел этот способ для надёжности Потому что у меня в структуре и указатели, и пользовательские типы используются
финализе какраз будет понадежнее шаловливых ручек
Я всегда утюг отключаю руками. не надеясь на УЗО :)
ну, из розетки - так это и есть финализе. а ты еще кабель на вводе в дом клещами реж, для надежности))
Обсуждают сегодня