Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции 2 семестр.doc
Скачиваний:
47
Добавлен:
27.05.2015
Размер:
777.73 Кб
Скачать

5.2. Организация взаимодействия форм

Если одна форма выполняет какие-либо действия с другой формой, то в списке uses раздела implementation (или interface) модуля первой формы должна быть ссылка на модуль второй формы.

Пример организации взаимодействия двух форм – Form1 и Form2, для которых имеются Unit1 и Unit2, соответственно.

unit Unit1; // Приложение включает модуль формы Form1

interface

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

type

TForm1 = class(TForm)

Button1: TButton;

procedure Button1Click(Sender: TObject);

end;

var Form1: TForm1;

implementation

uses Unit2; // Ссылка на модуль второй формы Form2

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject};

begin

Form2.Show; // Вызов второй формы

end;

end.

Delphi позволяет выполнить автоматизированную вставку ссылки на модуль другой формы с помощью команды File | Use Unit (Файл | Использовать модуль).

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

Пример обращение к компоненту другой формы.

uses Unit2;

procedure TForm1.Button2Click(Sender: TObject) // нажатии кнопки Button2 формы Form1

begin

Label1.Caption := Form2.Edit1.Text; // в Label1 отображается текст Edit1 с Form2

end;

5.3. Особенности модальных форм

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

Для отображения формы в модальном режиме служит метод ShowModal.

Пример отображения модальной формы:

procedure TForm1.mnuAboutClick(Sender: TObject); // выбор пункта меню mnuAbout

begin

fmAbout.ShowModal; // отображению формы fmAbout в модальном режиме

end;

Многие формы можно отображать и в немодальном режиме, например: fmAbout.Show;

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

Пример управления диалоговой формой:

// Процедура находится в модуле формы Form1

procedure TForm1.btnDialogClick(Sender: TObject);

var rez :TModalResult;

begin

rez := fmDialog.ShowModal; // Вызов модальной формы (диалога)

if rez = mrOK then // Анализ способа закрытия модальной формы (диалога)

MessageDlg('Диалог принят.', mtInformation, [mbYes], 0);

if rez = mrCancel then

MessageDlg('Диaлог отменен.', mtInformation, [mbYes], 0);

end;

// Процедуры находятся в модуле формы fmDialog

// Закрытие формы и установка значения mrOK коду результата

procedure TfmDialog.btnС1оsеС1ick(Sender: TObject);

begin

ModalResult := mrOK;

end;

// Закрытие формы и установка значения mrCancel коду результата

procedure TfmDialog.btnCancelClick(Sender: TObject);

begin

ModalResult := mrСаnсеl;

end;

Как правило, управление кодом результата диалога выполняется не программно (через свойство ModalResult), а с помощью кнопок.

Пример задания кнопок закрытия формы:

procedure TfmDialog.FormCreate(Sender: TObject); // обработчик события OnCreate формы

begin

fmDialog.BorderStyle := bsDialog;

btnOK.Caption := 'OK'; // свойства кнопки btnOK подтверждения диалога fmDialog

btnOK.Default := true;

btnOK.ModalResult := mrOK;

btnCancel.Caption := 'Cancel'; // свойства кнопки btnCancel отмены диалога

btnCancel.Cancel := true;

btnCancel.ModalResult := mrCancel;

end;

При нажатии любой из кнопок форма автоматически закрывается (без выполнения обработчиков события нажатия кнопок) и возвращает соответствующий результат.

При закрытии формы методом Close всегда возвращается значение mrCancel ее свойства ModalResult. Скрытие формы методом Hide не изменяет значение свойства ModalResult.

Для выполнения типовых действий Delphi предлагает ряд стандартных диалогов. Кроме того, ряд диалоговых форм расположены на странице Dialogs (Диалоги) в Хранилище объектов.