Работа с UserData в TVirtualStringTree и получение данных в событиях GetText и FreeNode в Delphi
В данной статье мы рассмотрим, как работать с пользовательскими данными UserData в компоненте TVirtualStringTree, а также как извлекать эти данные в событиях GetText и FreeNode. Этот компонент является мощным инструментом для создания визуальных структур данных, таких как дерево, список или сетка, и позволяет хранить пользовательские данные вместе с узлами.
Подготовка данных для узлов
Для начала, определим запись TMyData, которая будет хранить данные для каждого узла:
В методе FormCreate укажем размер данных для узлов:
procedure TForm2.FormCreate(Sender: TObject);
begin
VirtualStringTree1.NodeDataSize := SizeOf(TMyData);
Randomize;
end;
Вставка нового узла с пользовательскими данными
Метод Button1Click демонстрирует, как вставить новый узел с пользовательскими данными:
procedure TForm2.Button1Click(Sender: TObject);
var
Data: PMyData;
Node: PVirtualNode;
begin
New(Data); // Выделение памяти для нового экземпляра TMyData
Data.Name := DateTimeToStr(now);
Data.size := Random(100);
Node := VirtualStringTree1.InsertNode(nil, amInsertAfter, Data);
end;
Получение данных узла
В событиях VirtualStringTree1FreeNode и VirtualStringTree1GetText необходимо корректно извлекать данные:
procedure TForm2.VirtualStringTree1FreeNode(Sender: TBaseVirtualTree; Node:
PVirtualNode);
var
Data: PMyData;
begin
Data := PMyData(Sender.GetNodeData(Node)^); // Де-референсование указателя
Data.Name := '';
end;
procedure TForm2.VirtualStringTree1GetText(Sender: TBaseVirtualTree; Node:
PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText:
WideString);
var
Data: PMyData;
begin
Data := PMyData(Sender.GetNodeData(Node)^); // Де-референсование указателя
case Column of
0: CellText := Data.Name;
1: CellText := IntToStr(Data.size);
end;
end;
Важное замечание
При получении данных узла важно понимать, что метод GetNodeData возвращает указатель на память, где хранится ваш указатель, а не сам указатель данных. Поэтому для корректного доступа к данным необходимо использовать де-референсование.
Заключение
В данной статье мы рассмотрели, как работать с пользовательскими данными UserData в TVirtualStringTree, а также как избежать типичной ошибки при получении этих данных. Следуя приведенным выше инструкциям, вы сможете успешно использовать UserData для хранения и отображения данных в ваших проектах на Delphi.
Статья посвящена работе с пользовательскими данными в компоненте `TVirtualStringTree` в Delphi, включая их хранение и извлечение в событиях `GetText` и `FreeNode`.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.