Мне хотелось бы получить несколько советов и / или советов о том, как настроить новый класс объектов для TreeView с помощью свойства Node.Data TreeView.
Я знаю, как создать базовый тип объекта, который можетзапись / чтение из свойства .Data, я делаю что-то вроде этого:
type
TMyData = class(TComponent)
private
FString1: String;
FString2: String;
FInteger1: Integer;
published
property String1: String read FString1 write FString1;
property String2: String read FString2 write FString2;
property Integer1: Integer read FInteger1 write FInteger1;
end;
Чтобы записать значение в одно из свойств, свойство Node.Data:
TMyData(TreeView1.Selected.Data).String1:= 'save this String';
Чтобы прочитать значение:
ShowMessage(TMyData(TreeView1.Selected.Data).String1);
Это довольно простой пример назначения данных для узла дерева. Теперь мне нужна помощь, совет, советы и т. Д...
Из приведенного выше примера вы можете легко читать / записывать стандартные свойства, такие как String, Integer, Boolean и т. Д.1019 * Вместо записи стандартных данных в узел дерева, как насчет добавления элементов в этот TListView и записи содержимого этого узла TListView в узел TreeView.
Что если при нажатии на один из узлов дерева вместовозвращаться дПолучив строку, он может заполнить этот TListView элементами и изображениями, которые были сохранены ранее.
(1) Это основная форма, где вы можете добавить узлы в TreeView.Я на самом деле использую более расширенную функцию для добавления в TreeView, например:
function AddMyDataNode(ATreeView: TTreeView; NodeName: String; NodeImage: Integer;
String1, String2: String; Integer1: Integer;
SelectNode: Boolean): TTreeNode;
var
Obj: TMyData;
Node: TTreeNode;
begin
Result:= nil;
Obj:= TMyData.Create(nil);
try
Obj.String1:= String1;
Obj.String2:= String2;
Obj.Integer1:= Integer1;
Node:= ATreeView.Items.AddObject(ATreeView.Selected, NodeName, Obj);
Node.ImageIndex:= NodeImage;
Node.SelectedIndex:= NodeImage;
Result:= Node;
if SelectNode then
Node.Selected:= True;
ATreeView.SetFocus;
except on E: Exception do
ShowMessage('Could not add MyData Node: ' + E.Message);
end;
end;
При редактировании узла отобразится другая форма, называемая формой данных ...:
(2) Эта форма данных предназначена для чтения / записи данных с узла в главной форме.С добавлением TListView.ListView также следует читать / сохранять со стандартными свойствами.
Добавление / редактирование элемента ListView может включать в себя другие стандартные свойства, такие как:
(3) Значения в этой форме сохраняются в данных ListView.
Итак, в двух словах:
- TreeView Node.Data хранит стандартные свойства, а также TListView.
- Эти данные отображаются в другой форме, называемой формой данных.
- ListView в форме данных также содержит данные.
- При редактировании ListView в форме данных отобразится дополнительная форма со стандартными свойствами.
Я хотел бы знать, как мне лучше всего подойти к этому, какие советы вы могли бы дать, как проще всего добиться чего-то подобного и т. Д.?
Запись / чтение и чтениеиз ListView легко реализуется. Я представляю, что это можно сделать, открыв свойство ListView Items.Item[x].Data
.Проблема получения данных ListView для хранения в TreeView - это проблема, я не знаю, как я мог бы реализовать этот тип поведения.
Я хотел бы узнать совет о таких вещах, как, как я могу определить типы и т. Д.
Я с нетерпением жду ваших идей по этому поводу.