Создание treeview в Delphi

Форма:







Листинг программы:

unit Unit1;



interface



uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ComCtrls, StdCtrls, XPMan, SRColBtn, SRGrad, IniList, ImgList;



type

  TForm1 = class(TForm)

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Button4: TButton;

    Button5: TButton;

    Memo1: TMemo;

    TreeView1: TTreeView;

    XPManifest1: TXPManifest;

    Button7: TButton;

    Button8: TButton;

    Button9: TButton;

    Button6: TButton;

    Button10: TButton;

    SRGradient1: TSRGradient;

    ImageList1: TImageList;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

    procedure Button5Click(Sender: TObject);

    procedure Button6Click(Sender: TObject);

    procedure Button7Click(Sender: TObject);

    procedure Button8Click(Sender: TObject);

    procedure FormClose(Sender: TObject; var Action: TCloseAction);

    procedure FormShow(Sender: TObject);

    procedure TreeView1Click(Sender: TObject);

    procedure Button9Click(Sender: TObject);

    procedure Button10Click(Sender: TObject);

   

  private

    { Private declarations }

  public

    { Public declarations }

  end;



var

  Form1: TForm1;

  f:TextFile; s,c:String; i:integer;

implementation



uses Unit2;



{$R *.dfm}



//кнопка «Добавить элемент»

procedure TForm1.Button1Click(Sender: TObject);

var captionStr:string;

NewNode:TTreeNode;

Begin

//обнуляем строку, которая будет использоваться для хранения имени будущего элемента //дерева

CaptionStr:='';

//выводим на экран окно ввода. Если окно было закрыто не кнопкой OK, то происходит //выход из процедуры

if not InputQuery('Добавить элемент', 'Введите заголовок элемента', CaptionStr) then exit;


//добавляем новый элемент в наше дерево

NewNode:=Treeview1.Items.Add(Treeview1.Selected, CaptionStr);

//если компонент не является верхним в дереве, то изменяем значение ImageIndex //созданного нами элемента на 1 (по умолчанию это значение 0)

if newnode.Parent<>nil then newnode.ImageIndex:=1;

end;



//кнопка «Удалить»

 procedure TForm1.Button2Click(Sender: TObject);

begin

//проверяю есть ли выделенный элемент в дереве

if treeview1.Selected<>nil then

begin

//если да, то выводим на экран сообщение

if MessageDlg('Вы действительно хотите удалить запись?', mtWarning,[mbYes,mbNo],0)=mrYes then

//удаляем элемент дерева

treeview1.items.delete(treeview1.selected);

end;

//очищаем memo1.

memo1.Text:='';

end;

 

//кнопка «Выход»

procedure TForm1.Button3Click(Sender: TObject);

begin

//выход из программы

close;

end;



//кнопка «Сохранить в файл»

procedure TForm1.Button4Click(Sender: TObject);

begin

//сохраняем изменения в файл tree.dat

TreeView1.SaveToFile(ExtractFilePath(Application.ExeName)+'tree.dat');

end;



//кнопка «Загрузить из файла»

procedure TForm1.Button5Click(Sender: TObject);

begin

//если файл с указанным именем существует, то загружаем его

if FileExists(ExtractFilePath(Application.ExeName)+'tree.dat') then

TreeView1.LoadFromFile(ExtractFilePath(Application.ExeName)+'tree.dat');

end;



//кнопка «Изменить заголовок»

procedure TForm1.Button6Click(Sender: TObject);

var captionStr:string;

begin

CaptionStr:='';

if not InputQuery('Изменение заголовка', 'Введите заголовок элемента', CaptionStr) then exit;

//чтобы изменить имя надо изменить свойство Text для выделенного элемента

treeview1.Selected.Text:=CaptionStr;

end;





//кнопка «О программе»

procedure TForm1.Button7Click(Sender: TObject);

begin

//выводим новое окно с сообщением о создателе программы

ShowMessage('Программу выполнила студентка гр. ВТиПО-42р.'+#13+'Ахметова Индира'+#13+'2010 год');

end;



//кнопка «Добавить подэлемент»

//здесь код практически такой же, что и для кнопки «Добавить элемент»

procedure TForm1.Button8Click(Sender: TObject);

var captionStr:string;

NewNode:TTreeNode;

begin

CaptionStr:='';

if not InputQuery('Добавить подэлемент', 'Введите заголовок подэлемента', CaptionStr) then exit;

//разница лишь в том, что при добавлении нового элемента мы используем метод //AddChild, т.е. добавляем дочерний элемент

NewNode:=Treeview1.Items.AddChild(Treeview1.Selected, CaptionStr);

if newnode.Parent<>nil then newnode.ImageIndex:=1;

end;



//при закрытии программы сделаем возможность сохранения данных дерева

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

treeview1.SaveToFile(ExtractFilePath(Application.ExeName)+'tree.dat');

end;



//при открытии программы сделаем возможность загрузки данных из дерева

procedure TForm1.FormShow(Sender: TObject);

begin

if FileExists(ExtractFilePath(Application.ExeName)+'tree.dat') then

TreeView1.LoadFromFile(ExtractFilePath(Application.ExeName)+'tree.dat');

end;



//при нажатии на элемент дерева 

procedure TForm1.TreeView1Click(Sender: TObject);

begin

 memo1.Clear;

//если файл существует, то данные добавляются в файл

 if FileExists(IntToStr(TreeView1.Selected.AbsoluteIndex)) then

 begin

 AssignFile(f,inttostr(treeview1.Selected.AbsoluteIndex));

 //открыть файл для чтения

 reset(f);

 while not EOF(f) do

 Begin

//прочитать строку из файла

 readln (f,s);

 memo1.Lines.Add(s)end;

 closefile(f) end else

//иначе, если файл не существует, то создаем новый

 begin

 memo1.Clear;

 AssignFile(f,IntToStr(TreeView1.Selected.AbsoluteIndex));

 Rewrite(f);

 reset(f);

 while not EOF(f) do

 begin

 readln (f,s);

 memo1.Lines.Add(s)end ;

 closefile(f) end;end;



//кнопка «Добавить описание»

procedure TForm1.Button9Click(Sender: TObject);

begin

memo1.SetFocus;

//в memo можно редактировать данные (информацию)

Memo1.ReadOnly:=false;

end;



//кнопка «Сохранить описание»

//сохраняем введенные в memoданные (информацию) в файл tree.dat

procedure TForm1.Button10Click(Sender: TObject);

begin

AssignFile(f,inttostr(treeview1.Selected.AbsoluteIndex));

rewrite(f);

for i:=0 to memo1.Lines.Count do

  writeln(f, memo1.lines[i]); //записываем текст в него из МЕМО

  closefile(f); //и закрываем

TreeView1.SaveToFile('tree.dat');

//memo доступен только для чтения

Memo1.ReadOnly:=true;

end;



end.