![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Treeview, как хранить? [D7, XP]
Buzzik © (2011-06-04 17:59:00)Простите за тупой вопрос.
Не могу разобраться с Treeview.
Нет ли у TreeView1.Items.Item[0]. какого либо невидимого изменяемого поля, чтобы записать туда что это за нод, и потом работать с ним?
VirEx (2011-06-07 07:31:00) [1]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
TreeView1.Items.Clear;
TreeView1.LoadFromFile('c:\111.txt');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TreeView1.SaveToFile('c:\111.txt');
end;
procedure SaveContainer(Component: TComponent; FileName: string);
var
FileStream: TFileStream;
MemStream: TMemoryStream;
begin
FileStream := TFileStream.Create(FileName, fmCreate);
MemStream := TMemoryStream.Create;
try
MemStream.WriteComponent(Component);
MemStream.Position := 0;
ObjectBinaryToText(MemStream, FileStream)
finally
MemStream.Free;
FileStream.Free;
end;
end;
procedure LoadContainer(Component: TComponent; FileName: string);
var
FileStream: TFileStream;
MemStream: TMemoryStream;
begin
FileStream := TFileStream.Create(FileName, 0);
MemStream := TMemoryStream.Create;
try
ObjectTextToBinary(FileStream, MemStream);
MemStream.Position := 0;
MemStream.ReadComponent(Component);
finally
MemStream.Free;
FileStream.Free;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
SaveContainer(TreeView1,'c:\222.txt')
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
LoadContainer(TreeView1,'c:\222.txt');
end;
end.
при сохранении "встроенным" методом TreeView1.SaveToFile('c:\111.txt');
будет чтото вроде:
asdasdasd
ddddd
aaaa
dddd
asdasdasd
при сохранении методом SaveContainer(TreeView1,'c:\222.txt') будет примерно такое:
object TreeView1: TTreeView
Left = 48
Top = 24
Width = 321
Height = 329
Indent = 19
TabOrder = 0
Items.Data = {
02000000220000000000000000000000FFFFFFFFFFFFFFFF0000000001000000
096173646173646173641E0000000000000000000000FFFFFFFFFFFFFFFF0000
0000020000000564646464641D0000000000000000000000FFFFFFFFFFFFFFFF
000000000000000004616161611D0000000000000000000000FFFFFFFFFFFFFF
FF00000000000000000464646464220000000000000000000000FFFFFFFFFFFF
FFFF000000000000000009617364617364617364}
end
если нужно сохранять объекты помещенные в Data, они должны быть предками TComponent и в них нужно перекрывать методы
procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
procedure SetParentComponent(Value: TComponent); override;
интересно - погуглите
Andy BitOff (2011-06-04 18:47:00) [2]> Buzzik © (04.06.11 18:38) [3]
> Спасибо.
> Простите за наглость, а не завалялся ли у кого маленький
> примерчик кода?
http://tinyurl.com/6ezbpt7
Buzzik (2011-06-04 18:38:00) [3]Спасибо.
Простите за наглость, а не завалялся ли у кого маленький примерчик кода?
Юрий Зотов (2011-06-04 18:13:00) [4]Есть свойство Data. Это указатель. Можно создать любой блок любых данных и его адрес занести в это свойство. Тогда данные будут относиться именно к этому узлу дерева.
Только имейте в виду, что созданный блок данных сам по себе не уничтожится - поэтому, когда он станет уже не нужен, его надо убить ручками.
Virgo_Style (2011-06-04 18:13:00) [5].Data, если мне склероз не изменяет