Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lekcii_po_informatike_delphi+++++++.pdf
Скачиваний:
31
Добавлен:
29.02.2016
Размер:
872.19 Кб
Скачать

66

constructor TMyThread.Create(CreateSuspended: Boolean); begin

inherited Create(CreateSuspended); x := 0;

end;

procedure TMyThread.Execute; begin

while not Terminated do x := x+5; Synchronize(ThreadSyn)

end;

procedure TMyThread.ThreadSyn; begin

Form1.StaticText1.Caption := IntToStr(x); end;

procedure TForm1.Button1Click(Sender : TObject); begin

MyThread := TMyThread.Create(True); MyThread.FreeOnTerminate := True; MyThread.Resume;

Button1.Enabled := False;

Button2.Enabled := True; end;

procedure TForm1.Button2Click(Sender : TObject); begin

MyThread.Terminate; Button1.Enabled := True; Button2.Enabled := False;

end;

4.21 TTreeView

Класс TTreeView является непрямым наследником TWinControl и служит для создания иерархического списка элементов.

Свойства, методы и события класса TTreeView:

property AutoExpand: boolean; – если установлено, то автоматически раскрывается список для выбранного компонента и закрываются невыбранные;

property Images: TCustomImageList; – задает список изображений, отобра-

жаемых в компоненте;

property Items: TTreeNodes; – задает набор элементов компонента, позволяя обращаться к ним по номеру;

property ReadOnly: Boolean; – определяет, разрешено ли изменение меток элементов;

property Selected: TTreeNode; – получение или задание выбранного элемента;

67

property ShowButtons: Boolean; – определяет, требуется ли выводить значки

“+” и “-”;

property ShowLines: Boolean; – определяет, требуется ли выводить соединительные линии;

property TopItem: TTreeNode; – получение или установка верхнего видимого на данный момент элемента;

procedure FullCollapse; – сворачивает всю структуру;

procedure FullExpand; – разворачивает всю структуру;

procedure LoadFromFile(const FileName: string); – считывает структуру из файла;

procedure SaveToFile(const FileName: string); – сохраняет структуру в файл;

property OnChange: TTVChangedEvent; – позволяет обрабатывать переход от одной структуры к другой;

4.22TTreeNodes

Класс TTreeNodes является наследником TPersistent и служит для хранения и управления элементами TTreeView.

Свойства и методы класса TTreeNodes:

property Count: Integer; – описывает количество элементов;

property Item[Index: Integer]: TTreeNode; default; – позволяет получать доступ

кзаданному элементу;

function Add(Node: TTreeNode; const S: string): TTreeNode; – добавление ново-

го элемента уровня Node;

function AddChild(Node: TTreeNode; const S: string): TTreeNode; – добавление нового элемента в подуровень Node;

function AddObject(Node: TTreeNode; const S: string; Ptr: Pointer): TTreeNode;

добавление нового элемента уровня Node со связанным с ним объектом;

function AddChildObject(Node: TTreeNode; const S: string; Ptr: Pointer

): TTreeNode; – добавление нового элемента в подуровень Node со связанным

сним объектом;

procedure Clear; – удаление всех элементов;

function GetFirstNode: TTreeNode; – получение первого элемента TTreeView;

function GetNode(ItemId: HTreeItem): TTreeNode; – получение элемента по уникальному номеру;

4.23TTreeNode

Класс TTreeNode является наследником TPersistent и служит для описания одного элемента TTreeView.

Свойства и методы класса TTreeNode:

property AbsoluteIndex: Integer; – абсолютный индекс элемента. Если элемент имеет потомков, то он на один меньше, чем у первого потомка;

68

property Count: Integer; – число прямых наследников элемента;

property Data: Pointer; – связанные с элементом данные;

property Expanded: Boolean; – управляет развертыванием данного элемента;

property HasChildren: Boolean; – указывает, имеет ли элемент потомков;

property ImageIndex: TImageIndex; – номер рисунка в списке рисунков, когда элемент не выбран;

property SelectedIndex: TImageIndex; – номер рисунка в списке рисунков, ко-

гда элемент выбран;

property Index: Longint; – указывает на номер среди потомков;

property Item[Index: Integer]: TTreeNode; – доступ к потомкам;

property ItemId: HTreeItem; – уникальный номер элемента;

property Level: Integer; – указывает на общий уровень элемента;

property Owner: TTreeNodes; – указывает на список элементов, которому принадлежит данный элемент;

property Parent: TTreeNode; – указывает на родителя;

property Selected: Boolean; – указывает, выбран ли данный элемент;

property TreeView: TCustomTreeView; – указывает, какому TTreeView принад-

лежит элемент;

procedure Collapse(Recurse: Boolean); – позволяет свернуть выбранный эле-

мент. Если Recurse имеет значение True, то свернуться и все потомки;

procedure Delete; – удаляет элемент и всех его потомков;

procedure DeleteChildren; – удаляет всех потомков элемента;

procedure Expand(Recurse: Boolean); – разворачивает элемент. Если Recurse

имеет значение True, то разворачиваются и потомки;

function GetFirstChild: TTreeNode; – получение первого потомка;

function GetPrevChild(Value: TTreeNode): TTreeNode; – получение предыду-

щего потомка;

function GetNextChild(Value: TTreeNode): TTreeNode; - получение следующего потомка;

function GetLastChild: TTreeNode; – получение последнего потомка;

function GetNext: TTreeNode; – получение следующего элемента независимо от его уровня;

function GetPrev: TTreeNode; – получение предыдущего элемента независимо от его уровня;

Пример: описание каталога книг по разделам. Каждый раздел имеет наименование, шифр, список книг. Каждая книга имеет наименование, автора, количество страниц.

69

type

TBook = class(TCollectionItem) public

Name,Autor : ShortString; Count : integer;

end;

TRazdel = class(TCollectionItem) public

Name,Shifr : ShortString; Books : TCollection;

constructor Create(Collection: TCollection); override; destructor Destroy; override;

end;

{ TRazdel }

constructor TRazdel.Create(Collection: TCollection); begin

inherited Create(Collection);

Books := TCollection.Create(TBook); end;

destructor TRazdel.Destroy; begin

Books.Free; inherited Destroy;

end;

procedure TForm1.AddButtonClick(Sender: TObject); var

MyTN : TTreeNode;

Razdel : TRazdel; Book : TBook;

70

TempCol : TCollection; begin

case TreeView1.Selected.Level of 0 : with RazdelForm do

begin

NameEdit.Text := '';

ShifrEdit.Text := ''; if ShowModal=mrOk then begin

Razdel := TRazdel.Create(Razdels);

Razdel.Name := Trim(NameEdit.Text);

Razdel.Shifr := Trim(ShifrEdit.Text); MyTN :=

TreeView1.Items.AddChildObject(TreeView1.Selected,

Razdel.Shifr,Razdel); TreeView1.Items.AddChild(MyTN,'Раздел: '+Razdel.Name); TreeView1.Items.AddChildObject(MyTN,'Книги',

Razdel.Books);

end;

end;

2 : with BookForm do begin

NameEdit.Text := '';

AutorEdit.Text := '';

CountEdit.Text := ''; if ShowModal=mrOk then begin

TempCol := TCollection(TreeView1.Selected.Data); Book := TBook.Create(TempCol);

Book.Name := Trim(NameEdit.Text);

Book.Autor := Trim(AutorEdit.Text); Book.Count := StrToInt(CountEdit.Text); MyTN :=

TreeView1.Items.AddChildObject(TreeView1.Selected,

Book.Name,Book); TreeView1.Items.AddChild(MyTN,'Автор: '+Book.Autor); TreeView1.Items.AddChild(MyTN,'Кол-во страниц: '+

IntToStr(Book.Count));

end;

end;

end;

end;

procedure TForm1.DelButtonClick(Sender: TObject); begin

TObject(TreeView1.Selected.Data).Free; TreeView1.Selected.Delete;

end;

procedure TForm1.FormCreate(Sender: TObject); begin

Razdels := TCollection.Create(TRazdel);

71

TreeView1.Items.AddObject (TreeView1.Items.GetFirstNode,'Разделы',Razdels);

end;

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);

begin

if TreeView1.Selected=nil then begin

Edit1.Text := ''; AddButton.Enabled := False;

end else

case TreeView1.Selected.Level of 0 : begin

Edit1.Text := 'Это корень нашей структуры'; AddButton.Enabled := True;

end; 1 : begin

Edit1.Text := 'Вы выбрали раздел '+ TreeView1.Selected.Text; AddButton.Enabled := False;

end;

2 : if TObject(TreeView1.Selected.Data) is TCollection then begin

Edit1.Text := 'Это список книг раздела '+ TreeView1.Selected.Parent.Text; AddButton.Enabled := True;

end else begin

Edit1.Text := 'Это название раздела '+ TreeView1.Selected.Parent.Text; AddButton.Enabled := False;

end; 3 : begin

Edit1.Text := 'Это книга '+ TreeView1.Selected.Text+

' из раздела '+TreeView1.Selected.Parent.Parent.Text; AddButton.Enabled := False;

end; 4 : begin

Edit1.Text := 'Это характеристики книги '+ TreeView1.Selected.Parent.Text; AddButton.Enabled := False;

end;

end;

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]