Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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, если мне склероз не изменяет


Наверх

Титульная страница Поиск, карта сайта Написать письмо