Смекни!
smekni.com

Создание 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.