litceymos.ru 1

Занятие 6: Приложения с несколькими формами

До сих пор мы с вами делали приложения, которые имели одну форму. На самом деле вы с помощью Delphi можете делать приложения, которые будут состоять из множества (сколько угодно) форм. Каждая форма может решать какую-то локальную задачу и должна появляться на экране, когда это предусмотрит автор приложения. В настоящем занятии мы научимся делать приложения с несколькими формами, осуществлять взаимодействие форм проекта, а для этого познакомимся с некоторыми свойствами и методами форм.


  1. Создание новой формы в проекте, главная форма. Видимость модулей форм

Подключение новой формы к проекту осуществляется в Delphi достаточно просто: на этапе проектирования нужно воспользоваться опцией меню File/NewForm. Таким образом вы создаете столько форм, сколько вам необходимо. Однако из всех созданных вами форм только одна является главной. Именно ее окно появляется на экране в момент старта вашей программы. По умолчанию Delphi назначает главным окно первой созданной формы. Программист может сделать главной любую другую форму. Для этого нужно обратиться к опции Project/Options и, раскрыв список Main form, выбрать нужную форму.




Для каждой формы Delphi создает файл модуля Unit с расширением pas.

После запуска проекта сделать видимым окно, которое не является главным, можно с помощью метода Show. Чтобы обратиться из одного окна формы к другому методом Show, необходимо, чтобы модуль первой формы “знал” о существовании второго. В модуле первой формы в разделе implementations должна стоять ссылка на второй модуль. Вставку такой ссылки Delphi осуществляет автоматически. На этапе проектирования для этого необходимо активизировать главное окно и после этого обратиться к опции меню File/Uses Unit. В появившемся диалоговом окне нужно выбрать модуль, который должен быть видимым и нажать Ok.






При необходимости можно точно так же сослаться в модуле второго окна на модуль главного окна. Нужно активизировать второе окно и вызвать опцию File/Uses Unit.


  1. Методы формы Hide, Show

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

ИмяФормы.Hide

Показать форму, которая создана, но невидима, можно с помощью метода Show:

ИмяФормы.Show

  1. Приложение 6.1 с тремя формами. Метод Close

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

Начните новый проект. На первой форме Form1, которую автоматически создает Delphi, поместите кнопку для завершения приложения со следующим кодом:

procedure Tform1.BitBtn1Click(Sender: TObject);

begin

Application.Terminate ;

end;

Еще одну кнопку поместите на первую форму для перехода на вторую форму. Код у нее будет такой:

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

Form1.Hide;

Form2.Show;

end;

Задайте цвет формы значением, например, голубой - clAqua. Сохраните на диске файл модуля формы Unit1.pas. Добавьте еще одну форму Form2, сохраните на диске файл ее модуля под именем Unit2.pas. Цвет формы пусть будет салатовый – clLime. На вторую форму поместите кнопку для перехода на третью форму с кодом:

procedure TForm2.BitBtn1Click(Sender: TObject);


begin

Form2.Hide;

Form3.Show;

end;

Добавьте третью форму Form3, цвет задайте значением clYellow и запишите на диске файл модуля формы Unit3.pas.

С помощью диалога Use Unit сделайте видимыми модули форм друг для друга.

Если вы теперь запустите приложение на выполнение, то сможете перейти с первой формы на вторую, со второй на третью, щелкая по соответствующим кнопкам.

Предположим, что пользователь, оказавшись на второй или третьей форме, решил завершить выполнение приложения. Ситуация естественная. Ее нужно обыграть в коде. Что придет в голову пользователю, если он окажется, скажем, на второй форме, захочет завершить работу, но не увидит кнопки соответствующего назначения? Он попытается щелкнуть на пиктограммке с крестом в верхнем правом углу формы. Это его действие соответствует событию OnClose второй формы. Вот заготовка соответствующей процедуры обработки события

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);

begin


end;

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

Имя формы.Close

Однако, если мы закроем окно не главной формы, то проект не завершит свою работу. Завершение работы произойдет, если мы закроем окно главной формы. Поэтому для корректного завершения приложения по щелчку пользователем на пиктограмме с крестиком, нужно вставить в соответствующую заготовку процедуры Delphi следующую строку:

Form1.Close


Если из второй формы в вашем проекте видна первая, то соответствующее событие обработано корректно.

Аналогично составьте соответствующую процедуру для третьей формы:

procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);


begin

Form1.Close;

end;

На всякий случай приведем коды модулей, которые получились в результате наших действий над формами. Для первой формы:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Buttons;

type

TForm1 = class(TForm)

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

uses Unit2;

{$R *.DFM}

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

Application.Terminate ;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

form1.hide;

form2.Show;

end;

end.

Для второй формы:

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Buttons;

type

TForm2 = class(TForm)

BitBtn1: TBitBtn;

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }


end;

var

Form2: TForm2;

implementation

uses Unit1, Unit3;

{$R *.DFM}

procedure TForm2.BitBtn2Click(Sender: TObject);

begin

form1.close;

end;

procedure TForm2.BitBtn1Click(Sender: TObject);

begin

form2.hide;

form3.show;

end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Form1.Close;

end;

end.

Для третьей формы:

unit Unit3;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;

type

TForm3 = class(TForm)

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form3: TForm3;

implementation

uses Unit2, Unit1;

{$R *.DFM}

procedure TForm3.Button2Click(Sender: TObject);

begin

form3.close;

end;

procedure TForm3.Button1Click(Sender: TObject);

begin

form1.close;

end;

procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);

begin

form1.Close;

end;

end.

Опробуйте приложение в работе.


  1. Приложение 6.2. Ваше собственное приложение с несколькими формами

Итак, мы достаточно подробно познакомились с основными элементами среды Delphi,(и только слегка коснулись некоторых принципов программирования на языке Object Pascal). Вы научились делать несложные приложения Windows в Delphi. А теперь пришло время сделать вам свое приложение с несколькими формами. Пусть эта работа будет завершать ваше обучение в первом блоке курса. Постарайтесь. Выберите интересующую вас тему, подберите файлы с изображениями, файлы для музыкального оформления. Пусть эта работа принесет вам удовольствие. Тогда она будет интересна любому, кто станет ее пользователем. Все работы обязательно размещу на сервере.