Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методички по информатике / Конспект лекций (Delphi).pdf
Скачиваний:
63
Добавлен:
27.05.2015
Размер:
1.2 Mб
Скачать

57

3.19 TTimer

Класс TTimer является наследником TComponent и служит для организации потоков команд. Имеет низкий приоритет выполнения.

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

property Enabled: boolean; – включение и выключение таймера;

property onTimer: TNotifiEvent; – процедура, описывающая действия при срабатывании таймера;

property Interval: cardinal; – определяет время (в ms), через которое срабатывает таймер.

3.20 TThread

Абстрактный класс TThread является наследником TObject и служит для организации потоков команд.

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

property FreeOnTerminate: boolean; – указание на саморазрушение при за-

вершении процедуры выполнения;

property Priority: TThreadPriority; – задание приоритета выполнения дей-

ствий;

property Suspended: boolean; – проверка на паузу в работе потока;

property Terminated: boolean; – указаний на необходимость завершения потока;

constructor Create(CreateSuspended : boolean); – при создании указывается,

требуется ли поток установить в режим “пауза”;

procedure Execute: virtual; abstract; – метод, описывающий действия, которые должен выполнять поток. Данный метод должен проверять завершение работы потока и прервать свою работу при получении команды “завершение”;

procedure Resume; – запустить после “паузы”;

procedure Suspend; – включить “паузу”;

procedure Synchronize(Method : TThreadMethod); – синхронизация выполне-

ния действий с VCL;

procedure Terminate; – дать команду на завершение работы потока;

Пример работы потока.

TMyThread = class(TThread) protected

x : integer;

constructor Create(CreateSuspended: Boolean); procedure Execute; override;

procedure ThreadSyn; end;

var

MyThread : TMyThread;

58

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;

3.21 TTreeView

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

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

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

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

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

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

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

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

59

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; – позволяет обрабатывать переход от одной структуры к другой;

3.22 TTreeNodes

Класс 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; – получение элемента по уникальному номеру;

3.23 TTreeNode

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

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

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

60

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; – получение предыдущего элемента независимо

от его уровня; Пример: описание каталога книг по разделам. Каждый раздел имеет

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

61

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;

62

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);

63

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;