<<
>>

Создание приложений \Vindows с использованием среды программирования Ое1рЫ

Интегрированная среда программирования Бе1рЫ (рис.

П5.1) предназначена для создания 32-разрядных приложений Windows. В отличие от программ, исполняемых в МБ БОБ, приложения Windows используют принцип событийного программирования, согласно которому программа представляет собой совокупность подпрограмм - обработчиков событий, таких, как получение сигналов от клавиатуры, мыши, таймера и т.п. Она не имеет алгоритма в традиционном смысле, так как связь между отдельными частями не задана жестко, а зависит от последовательности наступления событий.

Delphi также поддерживает технологию визуального проектирования пользовательского интерфейса, согласно которой разработчику предоставляется возможность прямо на экране формировать интерфейс приложения из стандартных элементов, расположенных на панели компонентов.

Создание приложения начинают с заготовки, предоставляемой Delphi.

(Она представляет собой минимальное приложение и может быть запущена на выполнение, правда при отсутствии полезного эффекта.) Мышью выбирают на панели необходимый интерфейсный компонент и переносят его на заготовку формы. При этом на первой закладке Properties Инспектора Объектов высвечиваются параметры компонента, заданные по умолчанию, которые можно переопределить, а на второй Events - перечень событий, которые он может обрабатывать. То же происходит при выделении мышью уже установленного компонента.

Визуально разработав интерфейс, программист определяет множество событий, необходимых для выполнения требуемых функций, распределяет эти события между компонентами и программирует соответствующие обработчики.

Среда Delphi предназначена для создания больших программ, элементы которых размещаются в разных файлах, но образуют единый проект.

Основная программа, содержащая описание проекта* размещается в файле с расширением .dpr. Как правило, она формируется самой средой Delphi, но при необходимости программист может ее изменить.

Кроме этого приложение включает одну или несколько интерфейсных объектов-форм, каждой из которых соответствует файл описания с расширением .dfm и модуль исходного текста на Delphi Pascal с расширением .pas. Файл описания формы и описание класса в модуле формируются автоматически в процессе визуального создания интерфейса, а тела методов проектируются и реализуются программистом. Возможно включение в проект и модулей, не связанных с формами, например, для хранения описаний классов, реализующих объекты предметной области.

В результате успешной компиляции и компоновки программы создаются: исполняемый файл типа «ехе», имя которого совпадает с именем проекта, объектные модули с расширением .dcu и файлы ресурсов с расширением .res.

Рассмотрим последовательность создания простейших приложений в Delphi на конкретных примерах.

Пример П5.1. Разработать калькулятор - приложение Windows, выполняющее основные арифметические операции.

Разработку будем выполнять по шагам.

1. Определение имени проекта и первого модуля. Для определения имени проекта используют пункт меню File\Save Project As... В появившемся окне создайте новую папку и сохраните в ней файл с именем MyProject. Для определения имени модуля необходимо щелкнуть либо по заготовке формы

(Forml), либо по окну заготовки программа (Unitl). Затем, используя пункт меню File\Save As..., сохраняем в той же папке, что и проект, модуль формы и саму форму под именем Calc.

2. Определение заголовка окна программы. Заголовок окна программы задается в свойствах окна формы. Для определения необходимо, предварительно выделив щелчком форму, на странице Propeties Инспектора объектов щелчком выделить свойство Caption (Заголовок) и ввести имя «Калькулятор».

3. Размещение на форме окна ввода/отображения чисел - однострочного текстового редактора.

Для выполнения этой операции на странице Standart палитры компонентов необходимо найти кнопку Edit, мышью перетащить этот компонент в нужное место формы (рис. П5.2 , а) и мышью же скорректировать его размер. Чтобы удалить текст из окна компонента на странице Properties Инспектора объектов необходимо найти свойство Text и очистить его поле.

Одновременно с размещением компонент Delphi добавляет объектные поля в класс с именем TForml, наследуемый от стандартного класса TForm (рис. П5.2, б).

4.

Размещение кнопок операций на форме. Для выполнения этой операции на странице Standart палитры компонентов необходимо найти кнопку Button. Для того чтобы не перетаскивать каждый компонент отдельно, перед выбором мышью компонента следует нажать клавишу Shift. Теперь, щелкая мышью в нужных местах, можно установить сразу все семь кнопок. Для отмены работы с кнопкой необходимо щелкнуть мышью по стрелке под словом Standart палитры компонентов. Затем, последовательно щелкая мышью

а б

Рис. П5.2. Вид формы (а) и окна программы (б) во время проектирования

по установленным кнопкам, измените их размеры. После этого, используя Инспектор объектов, установите требуемые названия кнопок (свойство Caption на странице Properties инспектора объектов) соответственно на «С», «=», «+», «-», «*», «/» и «Quit». Теперь программу необходимо «научить» выполнять требуемые функции.

2. Добавление обработчиков событий. Для добавления обработчиков событий обычно используют страницу Events Инспектора объектов. На этой странице указаны все события, на которые может реагировать выделенный компонент. Выделите компонент Button 1 и, щелкнув по соответствующей строке, выберете событие OnClick («щелчок мыши по компоненту»).

Двойным щелчком по полю рядом с ним вызовите заготовку обработчика данного события и введите его текст:

Procedure TForml.ButtonlClickfSender: TObject); begin

Edith Clear; {очистить окно компонента Editl} operation:='@'; {установить состояние «первая операция»}

Editl.setfocus; {установить активным окно компонента Editl} end;

Если обработчик некоторого события уже определен, то по двойному щелчку мыши по его имени осуществляется переход на его текст. Аналогично добавляем тексты обработчиков других событий:

• Button2Click - щелчок по кнопке «=»:

Procedure TForml.Button2Click(Sender: TObject); Var s:string; begin operate; operation Str(sum:6:3,s);

Editl.text:=s;

Buttonl.setfocus; end;

• Button3Click - щелчок по кнопке «+»:

procedure TForml.Button3Click(Sender: TObject); begin

operate; {выполнить предыдущую операцию}

operation:=,+r; {установить состояние «операция +»}

Editl.setfocus; {установить активным окно компонента Editl}

end;

• Button4Click - щелчок по кнопке «-»:

procedure TForml.Button4Click(Sender: TObject); begin

operate; {выполнить предыдущую операцию}

operation{установить состояние «операция -»}

Editl.setfocus; {установить активным окно компонента Editl}

end;

• Button5Click - щелчок по кнопке «*»:

procedure TForml.Button5Click(Sender: TObject); begin

operate; {выполнить предыдущую операцию}

operation{установить состояние «операция *»}

Editl.setfocus; {установить активным окно компонента Editl} end;

• ButtonoClick - щелчок по кнопке «/»:

procedure TForml.Button6Click(Sender: TObject); begin

operate; {выполнить предыдущую операцию}

operation{установить состояние «операция /»}

Editl.setfocus; {установить активным окно компонента Editl}

end;

• Button7Click - щелчок по кнопке «Quit»:

procedure TForml.Button?Click(Sender: TObject); begin

Close; {завершить работу приложения}

end;

3.

Добавление процедуры. Для выполнения вычислений необходимо добавить процедуру Operate. Поскольку она вызывается из обработчиков событий, ее необходимо вставить перед ними в секции реализации модуля:

Procedure Operate;

Var s:string; code:integer; ntdouble;

Begin

s:-Forml.Editl.text; {читаем сроку из Editl.text} Forml.Editl.clear; {очищаем Editl}

Val(s,n,code); {преобразуем строку в число}

case operation of {выполняем операцию}

sum:=n; sum:=sum+n; sum:=sum-n; sum:=sum*n;

V: sum:=sum/n; end;

end;

7. Объявление переменных. Поскольку переменные, необходимые для вычислений, являются внутренними, объявляем их в секции реализации модуля (после служебного слова implementation):

Var Sunvdouble;

operation:char='@';

8. Сохранение проекта. Для сохранения проекта используют пункт меню File\SaveAU.

9. Компиляция проекта. Для выполнения компиляции используют комбинацию клавиш Ctrl-F9 или пункт меню Project\Compile. Если при компиляции обнаружены ошибки, то внимательно проверьте текст программы.

10. Запуск программы на выполнение. Для запуска программы используют клавишу F9 или пункт меню Run/Run или кнопку Run на панели быстрого доступа.

Второй пример возьмем немного сложнее и выполним некоторые проектные операции в процессе его разработки. Причем, несмотря на очевидную простоту приложения, будем использовать объектную технологию как для представления пользовательского интерфейса, так и для предметной области задачи.

Пример П5.2. Разработать приложение Windows для возведения вводимых чисел в квадрат.

Анализ. Начинаем с объектной декомпозиции интерфейсной и предметной частей приложения. Интерфейсная часть включает только Окно приложения. Предметная - объект Число, который отвечает за инициализацию числа и возведение его в квадрат (рис. П5.3).

При анализе реализуемых функций учтем, что при вводе чисел возможны ошибки. Следовательно, необходим интерфейс с тремя основными состояниями: Ввод числа, Демонстрация результата и Демонстрация сообще-

Рис.

П5.4. Диаграмма переходов состояний интерфейса

ния об ошибке (рис. П5.4). Из двух первых состояний необходимо обеспечить возможность выхода, поэтому объединим их в дополнительное состояние - Нормальное выполнение.

Проектирование интерф ейса. Основное окно приложения проектируем, используя средства визуальной среды Бе1рЫ (рис. П5.5), аналогично тому, как это было сделано в предыдущем примере. Затем уточняем внешний вид приложения в каждом из состояний интерфейса (рис. П5.6): определение жестких ограничений на действия пользователя позволяет избежать некорректной работы программы в условиях событийного программирования.

Используя Инспектор объектов, определяем имена объектов (по умолчанию Ое1рЫ, как было показано в предыдущем примере, называет объекты, используя имя компонента и номер объекта, что неудобно, если разных компонентов включается в форму много) и значения некоторых свойств:

Рис. П5.5. Проектирование формы основного окна приложения

Forml - главная форма приложения:

Name: MainForm - имя объекта-формы;

Caption: 'Возведение числа в квадрат’ - заголовок окна;

Labell — первая метка:

Name: InputLabel - имя объекта-метки;

Caption: 'Введите значение' - текст метки;

Label2 - вторая метка:

Name: OutPutLabel - имя объекта-метки;

Caption: 'Квадрат значения равен: ’ - текст метки;

Editl - первый однострочный редактор:

Name: InputEdit - имя объекта-редактора;

Edit2 - второй однострочный редактор:

Name: OutPutEdit - имя объекта-редактора;

Enable: false - запрет активизации редактора пользователем;

Readonly: true - запрет ввода текста в редактор;

Button 1 - первая кнопка:

Name: NextButton - имя объекта-кнопки;

Caption: 'Следующее' - название кнопки;

Button2 - вторая кнопка:

Name: ExitButton - имя объекта-кнопки;

Caption: 'Выход' - название кнопки.

Проектирование объекта предметной области. Анализ взаимодействия объектов, полученных в процессе объектной декомпозиции показывает, что класс TNumber для реализации объекта Число должен включать Поле Num для хранения введенного значения, конструктор и метод определения квадрата числа. Деструктор он может наследовать от класса TObject. Полная диаграмма классов приложения показана на рис. П5.7 (серым выделены стандартные классы Delphi). Классы TMainForm и TNumber связаны отношением ассоциации, так как класс формы посылает классу объекта сообщения.

Реализация. Описание класса TNumber и его методов целесообразно поместить в специальном модуле:

Unit UnitNumber;

Interface

Type

TNumber=class(TObject) private Numtsingle;

public Constructor Create(aNum: single);

Function SqrNumbensingle;

end;

Var N .TNumber;

Implementation

Constructor TNumber Create(aNum:single); begin

inherited Create;

Num:=aNum;

end;

Function TNumber SqrNumber:single; begin Result: =Sqr(Num);

end;

end.

В секции реализации модуля MainForm указываем использование модуля UnitNumber.

Обработчики событий. Привязываем проектируемые события, указанные на диаграмме переходов состояний интерфейса, к событиям, обрабатываемым визуальными компонентами, и описываем необходимые действия приложения (табл. П5.1).

Последовательно выделяем компоненты, выбираем в списке событий Events Инспектора объектов нужные события и дважды щелкаем мышью на чистом поле рядом с ними. В результате создаются заготовки обработчиков событий, в которые необходимо вписать соответствующие фрагменты программы. В конечном итоге получаем полный текст модуля MainForm, приведенный ниже (операторы, вводимые программистом, выделены полужирным шрифтом).

Unit MainForm;

Interface

Uses Windows, Messages, Sys Utils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; {модули Delphi}

Type

TMainForm= class(TForm) {описание формы - создано автоматически} InputLabel: TLabel; OutputLabel: TLabel; {метки}

InputEdit: TEdit; OutputEdit: TEdit; {редакторы}

NextButton: TButton; Exit Button: TButton; {кнопки}

Bevel 1: TBevel; {рамка}

procedure FormActivate(Sender: TObject); procedure InputEditKeyPress(Sender: TObject; var Key: Char); procedure NextButtonClick(Sender: TObject); procedure ExitButtonClick(Sender: TObject); end;

Var MainForm: TMainForm; {объект - создано автоматически } Implementation

uses UnitNumber; {описание класса TNumber}

{$R *.DFM}

Procedure TMainForm. FormActivate(Sender: TObject); begin

OutputEdit, Visible:=false; {сделать редактор вывода невидимым} OutputLabeLVisible:=false; {сделать метку вывода невидимой} NextButton.Enabled:=false; {сделать кнопку Следующий

недоступной}

InputEditClear; {очистить редактор ввода}

InputEdit.ReadOnly:=false; {разрешить ввод}

InputEditSetFocus; {установить фокус ввода на редактор ввода}

end;

Procedure TMainForm.InputEditKeyPress(Sender: TObject; var Key: Char);

Var k:single; Code: integer; begin

if Key=#13 then begin

Кеу:=#0; {чтобы не выдавался звуковой сигнал}

ValflnputEdit. Text,к, Code); if Code=0 then begin

N:=TNumber.Create(strtofloat(InputEdit.Text)); {создать объект} OutPutEdit.Text:=floattostr(N.SqrNumber); {вывести результат}

N.Destroy; {уничтожить объект - деструктор TObject} OutPutEdit.Visible:-true; {сделать редактор вывода видимым} OutputLabel.Visible:=true; {сделать метку вывода видимой} InputEdit.ReadOnly:=true; {запретить ввод} NextButton.Enabled:=true; {сделать кнопку Следующий

доступной}

Next Button. Set Foe us; {установить фокус ввода на кнопку

Следующий}

end

else {вывести сообщение об ошибке}

MessageDlgCСтрока содержит недопустимые символы',

mtError,[mbOk], 0)

Основную программу приложения - проект Delphi формирует автоматически:

Program ProectXQ;

Uses

Forms,

MainFormUnit in 'MainFormUnit.pas', {Mainformj UnitNumber in 'UnitNumber.pas';

{SR *.RES}

Begin

Application.Initialize; {инициализация объекта Приложение} Application.CreateForm(TMainForm, MainForm);{создание формы} Application.Run; {запуск цикла обработки сообщений}

End.

Чтобы лучше показать возможности среды, в качестве третьего примера рассмотрим, как можно реализовать в Ое1рЫ уже знакомый нам пример с записной книжкой (см. пример 12.1).

Рис. П5.8. Формы приложения «Записная книжка»: а - основная форма; б - форма создания/открытия файла; в - форма добавления записей; г - форма поиска записей

Пример П5.3. Разработать приложение «Записная книжка». На рис. П5.8 представлены формы разрабатываемого приложения. Их проектируют с использованием визуальной технологии.

На рис. П5.9 представлена диаграмма классов приложения. Основное ее отличие от диаграммы, приведенной на рис. 12.13, заключается в том, что в ней использованы интерфейсные компоненты Delphi, и класс TBase наследуется от класса TObject. Кроме того, не предусмотрен специальный класс для выдачи сообщения пользователю, так как в Delphi с этой целью обычно используют специальную процедуру MessageDlg, которая выводит нужное сообщение.

Описание класса TBase практически полностью совпадает с выполненным на Borland Pascal 7.0. Внесены всего три изменения: заменены имена процедур Assign и Close соответственно на AssignFile и CloseFile и объявление объекта Base класса TBase перенесено в модуль, содержащий описание класса.

Рис. П5.9. Диаграмма классов приложения Записная книжка

Unit Base Unit; interface

Type str30=string[30J; rec=record

rfamily, rname, rtelefon:str30; end;

Type TBase=Object public ffde of rec;

family, name, telefon:str30; {результаты поиска} pJamily,p_name:str30; {данные поиска} kl, kl.boQlean; {ключи поиска}

procedure Open(fname:str30); {открытие/создание файла} procedure Add(afamily,aname,atelefon:str30); {добавление записей} function Find(afamily,aname:str30). boolean; {поиск первого} function FindNexUboolecm; {поиск следующего}

procedure Closef; {закрытие файла}

End;

Var

BasetTBase;

implementation Procedure TBase.Open;

Begin

Assign File (fjhame); {инициализация файловой переменной}

{$i-}

Reset(f); {открытие с проверкой существования}

{$1+} ■

if IOResult0 then ReWrite(f); {создание файла}

End;

Procedure TBase.Add;

Var r.rec;

Begin

Seek(f,FileSize(f)); r. rfamily: =afamity; r.rname: =aname; r. rtelefon: =atelefon;

Write(f,r);

End;

Function TBase.Find;

Begin

■ CloseFile(f);

ReSet (j);

pJdmily:=afamily; pname: -aname; kl:=pJamilyo"; k2: =p_name ";

Find: =FindNext;

End;

Function TBase.FindNext;

Var r:rec; k3, k4, Jf:boolean; {ключи поиска и его результат} Begin

ff: = false; {ключ поиска "запись не найдена"} while not Eof(f) and not ff do begin

Read(f,r);

k3:=pJdmily=r.rfamily; {строим еще два ключа поиска} к4: =р_пате =г тате;

if (kl and к2 and кЗ and к4) {выбираем записи} or (not kl and k2 and k4) or (kl and not k2 and k3) then begin

ff:=true; {ключ поиска "запись найдена"} family:=r.rfamily; {копируем результаты поиска} пате :=г.тате; telefon: =r. rtelefon; end

end;

FindNext:=ff; {возвращаем ключ поиска} end;

Procedure TBase.Closef; begin

CloseFilef); (закрываем файл} end; end.

Объект MainForm класса TMainForm для всех кнопок, кроме кнопки Выход, должен вызывать соответствующий объект для выполнения основных операций с файлом. Имя.файла должен вводить объект InputForm, он же должен создать/открыть файл. До открытия файла нельзя разрешать добавление и поиск записей, поэтому для компонентов MainForm AddButton и FindButton в Инспекторе объектов устанавливают свойство Enable в состояние false. Тогда при запуске программы эти кнопки будут не активны. После нормального выполнения InputForm использование этих кнопок будет разрешено: указанное свойство будет установлено в состояние true программно.

Unit MainUnit;

interface

uses

Windows, Messages, Sys Utils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TMainForm classfTForm)

OpenButton: TButton;

AddButton: TButton;

FindButton: TButton;

ExitButton: TButton;

procedure OpenButtonClick(Sender: TObject); procedure AddButtonClick(Sender: TObject); procedure FindButtonClick(Sender: TObject); procedure ExitButtonClick(Sender: TObject); end;

var MainForm: TMainForm; implementation

uses AddUnit, FindUnit, InputUnit;

{$R *.DFM}

procedure TMainForm. OpenButtonClick(Sender: TObject); begin

if InputForm.ShowModal=mrOk then {если выполнение InputForm} begin {завершилось благополучно, то}

AddButton.Enabled: =true; {разрешить добавление}

FindButton.Enabled:=true; {разрешить поиск} end;

end;

procedure TMainForm.AddButtonClick(Sender: TObject); begin

AddForm.ShowModal; (активизировать AddForm} end;

procedure TMainForm.FindButtonClick(Sender: TObject); begin

FindForm.ShowModal; {активизировать FindForm} end;

procedure TMainForm.ExitButtonClick(Sender: TObject); begin

Close; {завершить приложение} end; end.

При активации формы InputForm фокус должен быть установлен на редактор ввода. Ввод обрабатывается автоматически. Завершение ввода осуществляется нажатием клавиши Enter.

Unit InputUnit;

interface

uses

Windows, Messages, Sys Utils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type

TInputForm = class(TForm)

InputEdit: TEdit;

procedure InputEditKeyPress(Sender: TObject; var Key: Char); procedure FormActivate(Sender: TObject); end;

var InputForm: TInputForm; implementation uses Base Unit;

($R *.DFM}

procedure TInputForm.FormActivate(Sender: TObject); begin

InputEdit. SetFocus; end;

procedure TInputForm.InputEditKeyPress(Sender: TObject; var Key: Char); begin

if Key=#13 then

begin

Кеу:-#0;

Base. Open(InputEdit. Text);

ModalResult: = mrOK; {завершить благополучно}

end;

end;

end.

Объект AddForm отвечает за добавление записей. На рис. П5.10 представлена диаграмма переходов состояний интерфейса для объекта AddForm, которая уточняет его поведение при вводе записи по полям. Из диаграммы следует, что ввод данных начинается с нажатия кнопки Добавить, переход от поля к полю осуществляется нажитием клавиши Enter, запись в файл происходит после ввода телефона, а выход возможен из любого состояния. Внутренние переходы по вводу отдельных символов не показаны: они обрабатываются компонентами автоматически.

Unit AddUnit;

interface

uses

Windows, Messages, Sys Utils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

Рис. П5.10. Диаграмма переходов состояний интерфейса для объекта AddForm

type

TAddForm = class(TForm)

FamLabel: TLabel;

NameLabel: TLabel;

FonLabel: TLabel;

AddButton: TButton;

ExitButton: TButton;

FamEdit: TEdit;

NameEdit: TEdit;

FonEdit: TEdit;

procedure FamEditKeyPress(Sender: TObject; var Key: Char); procedure NameEditKeyPress (Sender: TObject; var Key: Char); procedure FonEditKeyPress (Sender: TObject; var Key: Char); procedure FormActivate(Sender: TObject); procedure AddButtonClick(Sender: TObject); procedure ExitButtonClick(Sender: TObject); end; var

AddForm: TAddForm; implementation uses Base Unit;

{$R *.DFM}

procedure TAddForm.FormActivate(Sender: TObject); begin

ExitButton. SetFocus; end;

procedure TAddForm.AddButtonClick(Sender: TObject); begin

FamEdit. SetFocus; end;

procedure TAddForm.FamEditKeyPress(Sender: TObject; var Key: Char); begin

if Key=#13 then begin Key:=#0;

NameEdit. SetFocus; end; f

end;

procedure TAddForm.NameEditKeyPress(Sender: TObject; var Key: Char); begin

if Key=#13 then begin Key:=#0;

FonEdit.SetFocus;

end;

end;

procedure TAddForm.FonEditKeyPress(Sender: TObject; var Key: Char); begin

if Key=#13 then begin Key:=#0;

Base.Add(FamEdit. Text, Name Edit. Text.FonEdit. Text);

Exit But ton. Set Focus; end;

end;

procedure TAddForm.ExitButtonClick(Sender: TObject); begin

ModalResult:= mrOK; {завершить благополучно} end; end.

Объект FindForm отвечает за поиск записей. Переход от поля к полю при вводе осуществляется нажитием клавиши Enter.

unit FindUnit;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type

TFindForm = class(TForm)

FamLabel: TLabel;

NameLabel: TLabel;

FonLabel: TLabel;

FindButton: TButton;

ExitButton: TButton;

NextButton: TButton;

FamEdit: TEdit;

NameEdit: TEdit;

FonEdit: TEdit;

procedure FamEditKeyPress(Sender: TObject; var Key: Char); procedure NameEditKeyPress(Sender: TObject; var Key: Char); procedure FormActivate(Sender: TObject); procedure FindButtonClick(Sender: TObject); procedure NextButtonClick(Sender: TObject); procedure ExitButtonClick(Sender: TObject);

private

Procedure Show; end; var

FindForm: TFindForm; implementation uses Base Unit;

{$R *.DFM}

Procedure TFindForm.Show; begin

FamEdit. Text: =Base.family;

NameEdit.Text:=Base.name;

FonEdit. Text: =Base. telefon; end;

procedure TFindForm.FormActivate(Sender: TObject); begin

Exit Button. SetFocus; end;

procedure TFindForm.FindButtonClick(Sender: TObject); begin

FamEdit. SetFocus; end;

procedure TFindForm.FamEditKeyPress(Sender: TObject; var Key: Char); begin

if Key=#13 then begin Key:=#0;

Name Edit. SetFocus; end;

end;

procedure TFindForm.NameEditKeyPress(Sender: TObject; var Key: Char); begin

if Key=#13 then begin Key:=#0;

if Base.Find(FamEdit. Text,NameEdit. Text) then begin Show;

NextButton.SetFocus;

end

else

begin

MessageDlgj 'Нет данных',mtInformation,[mbOk],0);

ExitButton.SetFocus; end

end;

end;

procedure TFindForm.NextButtonClick(Sender: TObject); begin

if Base. FindNext then begin Show;

NextButton.SetFocus;

end

else

begin

MessageDlg( 'Нет данных',mtInformation,[mbOk],0); ExitButton.SetFocus; end end;

procedure TFindForm.ExitButtonClick(Sender: TObject); begin

Modal Result: = mrOK; {завершить благополучно};

end; end.

В процессе проектирования приложения Delphi автоматически строит файл проекта.

program BookProject; uses Forms,

MainUnit in 'MainUnit.pas' {MainForm},

InputUnit in 'InputUnit.pas' {InputForm},

AddUnit in 'AddUnit.pas' {AddForm},

FindUnit in 'FindUnit.pas' {FindForm},

Base Unit in 'BaseUnit.pas';

{$R *.RES} begin

Application.Initialize;

Application.CreateForm(TMainForm, MainForm); Application.CreateForm(TInputForm, InputForm);

Application. CreateForm(TAddForm, AddForm);

Application.CreateForm(TFindForm, FindForm);

Application. Run; end.

<< | >>
Источник: Иванова Г.С. Основы программирования. 2002

Еще по теме Создание приложений Vindows с использованием среды программирования Ое1рЫ:

  1. Статья 1112. Договор о создании по заказу и использование объекта права интеллектуальной собственности
  2. Статья 9. Применение Гражданского кодекса Украины к урегулированию отношений в сферах хозяйствования, использование естественных ресурсов, охраны окружающей среды, а также к трудовым и семейным отношениям
  3. 9.5. Правовое регулирование отношений в области создания, эксплуатации и использования Государственной автоматизированной системы Российской Федерации «Выборы»
  4. Статья 361-1. Создание, использование и распространение или сбыта вредных программных или технических средств, а также их распространение или сбыт
  5. Иванова Г.С. Основы программирования, 2002
  6. Г.С.Иванова, Т.Н.Ничушкина, Е.К.Пугачев. Объектно- ориентированное программирование, 2001
  7. Эстетика программирования
  8. Раздел III Использование достижений криминалистической психологии при собирании, оценке, использовании личностной информации
  9. Основной курс (Программирование)
  10. О. Л. Голицына, Т. Л. Партыка, И. И. Попов. ЯЗЫКИ ПРОГРАММИРОВАНИЯ, 2008
  11. Часть вторая Родительское программирование
  12. Программирование телевизионного вещания
  13. Нейро-лингвистическое программирование
  14. Часть вторая Родительское программирование СУДЬБА ЧЕЛОВЕКА
  15. Сергей Александрович Орлов. Теория и практика языков программирования: Учебник для вузов. Стандарт 3-го поколения, 2013
  16. 3.4. Психология криминальной среды
  17. 2.2.1. Понятие городской среды
  18. Взаимодействие организма и среды