
- •1 Компоненты Delphi
- •1.1 Компонент класса TGroupBox
- •1.2 Компонент класса TRadioButton
- •1.3 Компонент класса TRadioGroup
- •1.4 Компонент класса TCheckBox
- •1.5 Компонент класса TListBox
- •1.6 Компонент класса TForm
- •1.7 Компонент класса TImage
- •1.8 Компонент класса TTimer
- •1.9 Компонент класса TImageList
- •1.10 Компоненты классов TActionList и TAction
- •1.11 Компонент класса TMainMenu
- •1.12 Компоненты классов TToolBar и TToolButton
- •1.13 Компоненты класса TStatusBar и TStatusPanel
- •1.14 Компоненты классов TOpenDialog и TSaveDialog
- •1.15 Компонент класса TTreeView
- •2 Примеры выполнения практических заданий
- •2.1 Стандартные алгоритмы
- •2.2 Элементы выбора
- •2.3 Простейшие классы
- •2.4 Графика
- •2.5 Диалоговые окна
- •2.6 Комплексное задание
- •2.7 Наследование
- •2.8 Древовидные структуры
Создание фигуры в момент загрузки программы и ее разрушение в момент завершения опишем следующим образом:
procedure TForm1.FormCreate(Sender: TObject); var
Temp : integer; begin
{Будем считать, что фигура имеет размер 1/4 от ширины поверхности рисования}
Temp := Image_I.ClientWidth div 4;
{Создание экземпляра класса с указанием начальных значений параметров фигуры}
Figure := TFigure.Create( |
|
|
Image_I.ClientWidth div |
2 - Temp div 2, // Координата Х |
|
Image_I.ClientHeight-Temp, |
// Координата Y |
|
Temp, |
|
// Размер фигуры |
Image_I.ClientWidth, |
// Размер поверхности рисования |
|
Image_I.Canvas); |
// Ссылка на поверхность рисования |
|
Move_T.Enabled := True; |
// Включение таймера |
|
end; |
|
|
procedure TForm1.FormDestroy(Sender: TObject); |
||
begin |
|
|
Move_T.Enabled := False; |
// Выключение таймера |
|
Figure.Free; |
// Вызов деструктора родителя |
|
end; |
|
|
При срабатывании таймера, производится единичное перемещение фи-
гуры:
procedure TForm1.Move_TTimer(Sender: TObject); begin
Figure.Move;
end;
Внешний вид и пример работы программы показаны на рисунке 5.
2.5 Диалоговые окна
Задание: Элементом списка является информация о человеке, включающая ФИО, серию паспорта, номер паспорта (1-999999). Реализовать добавление и редактирование данных человека с использованием диалогового окна, а также удаление данных человека.
27

Рисунок 5 – Внешний вид и пример работы программы, реализующей работу с графикой
Для решения поставленной задачи на основной форме (Main_F) потребуются компоненты:
Spisok_LB класса TListBox для хранения и отображения списка лю-
дей;
Spisok_L класса TLabel для подписи компонента Spisok_LB;
Add_B класса TButton для активизации добавления данных о человеке;
Change_B класса TButton для активизации редактирования данных
выбранного человека;
Del_B класса TButton для активизации удаления данных выбранного человека.
Установим следующие значения свойств компонентов (таблица 5):
Таблица 5 – Значения свойств компонентов основной формы для примера программы, использующей диалоговые окна
Компонент.Свойство |
Значение |
Spisok_L.Caption |
Спи&сок людей |
Spisok_L.FocusControl |
Spisok_LB |
Add_B.Caption |
Доб&авить |
Change_B.Caption |
И&зменить |
Del_B.Caption |
Уда&лить |
Series_E класса TEdit для ввода серии паспорта человека;
Number_E класс TEdit для ввода номера паспорта человека;
FIO_L класса TLabel для подписи компонента FIO_E;
Series_L класса TLabel для подписи компонента Series_E;
Number_L класса TLabel для подписи компонента Number_E;
Ok_B класса TButton для подтверждения добавления или редактирова-
ния;
Cancel_B класса TButton для отмены добавления или редактирования. Установим следующие значения свойств компонентов (таблица 6):
Таблица 6 – Значения свойств компонентов диалогового окна для примера программы, использующей диалоговые окна
Компонент.Свойство |
Значение |
People_F.BorderStyle |
bsDialog |
|
|
FIO_L.Caption |
ФИО &человека |
FIO_L.FocusControl |
FIO_E |
Series_L.Caption |
Се&рия паспорта |
Series_L.FocusControl |
Series_E |
Number_L.Caption |
Но&мер паспорта |
Number_L.FocusControl |
Number_E |
Ok_B.Caption |
Ok |
Ok_B.Default |
True |
Ok_B.ModalResult |
mrOk |
Cancel_B.Caption |
Отм&ена |
Cancel_B.Cancel |
True |
Cancel_B.ModalResult |
mrCancel |
|
|
Очистим свойство «Text» у компонентов FIO_E, Series_E, Number_E.
Опишем событие OnCloseQuery формы People_F:
procedure TPeople_F.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
var
n : integer; begin
{Проверку следует проводить только при нажатии кнопки "Ok"} if ModalResult=mrOk then
{Будем использовать обработку исключительных ситуаций
для проверки на правильность ввода и вывода информации об
ошибках} try
{Проверка ФИО}
if Trim(FIO_E.Text)='' then // Если ничего не введено begin
{Перевод фокуса ввода на компонент FIO_E} FIO_E.SetFocus;
29
{Создание исключительной ситуации с текстом ошибки} raise Exception.Create('Вы не ввели ФИО человека');
end;
{Проверка серии паспорта}
if Trim(Series_E.Text)='' then begin
Series_E.SetFocus;
raise Exception.Create('Вы не ввели серию паспорта'); end;
{Получение значения номера паспорта} n := StrToInt(Number_E.Text);
{Проверка значения номера паспорта на вхождение в заданный диапазон}
if (n<1) or (n>999999) then begin
Number_E.SetFocus;
raise Exception.Create('Номер паспорта должен быть в диапазоне 1..999999');
end; except
{Если введенное значение номера паспорта не целое число, то обработка данной ошибки}
on EConvertError do begin
CanClose := False;
Number_E.SetFocus; ShowMessage(
'Номер паспорта должен быть целым числом');
end;
{Обработка всех других ошибок} on E:Exception do
begin
CanClose := False;
ShowMessage(E.Message); // E.Message – текст ошибки end;
end;
end;
Опишем событие OnShow формы People_F:
procedure TPeople_F.FormShow(Sender: TObject); begin
{При открытии формы переход на компонент FIO_E} FIO_E.SetFocus;
end;
Опишем пользовательский класс TPeople в разделе type секции implementation модуля основной формы:
TPeople = class public
FIO,Series : string;
30
Number : integer; end;
Опишем событие OnClick кнопки Add_B:
procedure TMain_F.Add_BClick(Sender: TObject); var
People : TPeople; begin
with People_F do begin
{Изменение заголовка диалогового окна} Caption := 'Добавление человека';
{Установка значений полей ввода диалогового окна в значение “по умолчанию”}
FIO_E.Text := ''; Series_E.Text := ''; Number_E.Text := '';
{Вызов диалогового окна и проверка результата завершения
его работы. Если окно закрыто с подтверждением ввода
данных, то выполнение действий по созданию нового
элемента}
if ShowModal=mrOk then begin
People := TPeople.Create; // Создание экземпляра класса
{Заполнение свойств экземпляра класса} People.FIO := Trim(FIO_E.Text); People.Series := Trim(Series_E.Text); People.Number := StrToInt(Number_E.Text); {Добавление нового элемента в список людей}
Spisok_LB.Items.AddObject(People.FIO,People); end;
end;
end;
Опишем событие OnClick кнопки Change_B:
procedure TMain_F.Change_BClick(Sender: TObject); var
People : TPeople; begin
{Проверка, выбран ли элемент для редактирования} if Spisok_LB.ItemIndex>=0 then
with People_F do begin
{Получение редактируемого элемента} People := Spisok_LB.Items.Objects
[Spisok_LB.ItemIndex] as TPeople; {Установка заголовка диалогового окна} Caption := 'Изменение данных человека';
{Установка значений полей ввода диалогового окна в
текущие значения редактируемого элемента}
31
FIO_E.Text := People.FIO; Series_E.Text := People.Series;
Number_E.Text := IntToStr(People.Number);
{Вызов диалогового окна и проверка результата завершения
его работы. Если окно закрыто с подтверждением ввода данных, то выполнение действий по редактированию элемента}
if ShowModal=mrOk then begin
{Изменение свойств редактируемого элемента} People.FIO := Trim(FIO_E.Text); People.Series := Trim(Series_E.Text); People.Number := StrToInt(Number_E.Text); {Изменение строки в списке}
Spisok_LB.Items[Spisok_LB.ItemIndex] := People.FIO; end;
end else
{Если элемент не выбран, то вывод сообщения} ShowMessage('Не выбран человек');
end;
Опишем событие OnClick кнопки Del_B:
procedure TMain_F.Del_BClick(Sender: TObject); begin
{Проверка, выбран ли элемент для удаления} if Spisok_LB.ItemIndex>=0 then
begin
{Получение элемента из списка и его разрушение} Spisok_LB.Items.Objects[Spisok_LB.ItemIndex].Free; {Удаление строки из списка} Spisok_LB.Items.Delete(Spisok_LB.ItemIndex);
end else
{Если элемент не выбран, то вывод сообщения} ShowMessage('Не выбран человек');
end;
Опишем событие OnDestroy основной формы для разрушения всех введенных элементов в момент окончания работы программы:
procedure TMain_F.FormDestroy(Sender: TObject); var
i : integer; begin
for i := 0 to Spisok_LB.Count-1 do Spisok_LB.Items.Objects[i].Free;
end;
Внешний вид и пример работы программы показаны на рисунке 6.
32