Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Работа с `UserData` в `TVirtualStringTree` и получение данных в событиях `GetText` и `FreeNode` в Delphi

Delphi , Компоненты и Классы , TTreeView

Работа с UserData в TVirtualStringTree и получение данных в событиях GetText и FreeNode в Delphi

В данной статье мы рассмотрим, как работать с пользовательскими данными UserData в компоненте TVirtualStringTree, а также как извлекать эти данные в событиях GetText и FreeNode. Этот компонент является мощным инструментом для создания визуальных структур данных, таких как дерево, список или сетка, и позволяет хранить пользовательские данные вместе с узлами.

Подготовка данных для узлов

Для начала, определим запись TMyData, которая будет хранить данные для каждого узла:

TMyData = record
  Name: string;
  size: Integer;
end;
PMyData = ^TMyData;

Настройка компонента TVirtualStringTree

В методе 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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TTreeView ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 01:21:18/0.0031139850616455/0