- •1.1 Общие положения
- •1.2 Количественные оценки
- •1.3 Устройство ПК
- •1.4 Программное обеспечение
- •1.5 Автоматизированные и информационные системы
- •1.6 Разное
- •1.7 Алгоритм
- •2. PASCAL
- •2.1 Алфавит
- •2.2 Типы данных
- •2.3 Переменные
- •2.4 Константы
- •2.5 Стандартные функции
- •2.6 Выражения
- •2.7 Операторы
- •2.7.1 Оператор присваивания
- •2.7.2 Составной оператор
- •2.7.3 Условный оператор IF
- •2.7.4 Условный оператор CASE
- •2.7.5 Оператор цикла FOR
- •2.7.6 Оператор цикла REPEAT
- •2.7.7 Оператор цикла WHILE
- •2.8 Одномерные массивы
- •2.9 Многомерные массивы
- •2.10 Строки
- •2.11 Записи
- •2.12 Множества
- •2.13 Пользовательские типы
- •2.14 Файлы
- •2.15 Перечисляемый тип
- •2.16 Тип-диапазон
- •2.17 Функции и процедуры
- •2.18 Локализация имен
- •2.19 Модули
- •2.20 Операторы прерывания
- •2.21 Комментарии
- •2.22 Указатели
- •2.23 Динамические массивы Delphi
- •3. ОСНОВНЫЕ ПОЛОЖЕНИЯ ООП
- •4. БАЗОВЫЕ КЛАССЫ DELPHI
- •4.1 TObject
- •4.2 Exception
- •4.3 TList
- •4.4 TPersistent
- •4.5 TCollection
- •4.6 TCollectionItem
- •4.7 TStrings
- •4.8 TStringList
- •4.9 TGraphicsObject
- •4.10 TPen
- •4.11 TBrush
- •4.12 TCanvas
- •4.13 TGraphics
- •4.14 TPicture
- •4.15 TComponent
- •4.16 TControl
- •4.17 TWinControl
- •4.18 TGraphicControl
- •4.19 TTimer
- •4.20 TThread
- •4.21 TTreeView
- •4.22 TTreeNodes
- •4.23 TTreeNode
- •4.24 TForm
- •4.25 TMainMenu
- •4.26 TMenuItem
- •4.27 TStatusBar
- •4.28 TStatusPanels
- •4.29 TStatusPanel
- •4.30 TToolBar
- •4.31 TToolButton
- •4.32 TActionList
- •4.33 TAction
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;