В приложениях, разработанных для Windows, для взаимодействия с пользователем очень часто используются диалоговые окна. Вы можете не только применять обычные диалоговые окна, но и создавать свои собственные окна. Обычные диалоговые окна будут рассмотрены далее в этой книге.
Диалоговое окно представляет собой не что иное, как специальную форму. Если вы хотите иметь диалоговое окно, размеры которого нельзя будет изменить, и которое не имеет пиктограммы в строке заголовка (рис. 12.20). вам достаточно будет присвоить свойству BorderStyle значение bsDialog.
Рис. 12.20. Диалоговое окно bsDialog
Чтобы создать диалоговое окно (такое, например, как диалоговое окно Project Options), размеры которого можно будет изменять, или которое будет иметь пиктограмму в строке заголовка, выполните следующие действия:
- Присвойте свойству biSystemMenu группы Borderlcons значение True.
- Присвойте свойству BorderStyle значение bsSizeable или bsSingle.
- При желании можете присвоить свойству Position значение poScreen-Center, чтобы расположить форму в центре экрана.
Диалоговые окна обычно являются модальными формами, используемыми для получения дополнительной информации от пользователя. Диалоговые окна должны содержать как минимум две кнопки: ОК и Cancel (Отмена). Кнопка ОК используется для подтверждения завершения работы в диалоговом окне, а кнопка Cancel служит для отмены действий, выполненных в диалоговом окне. Действие обеих кнопок приводит к закрытию окна.
Теперь давайте создадим диалоговое окно, которое позволит пользователю изменять цвет главной формы. Добавьте компонент TLabel и два компонента TButton. и измените их примерно так. как показано на рис. 12.21.
Рис. 12.21. Простое диалоговое окно
Нам необходимо изменить свойство ModalResult кнопок ОК и Cancel. Присвойте свойству ModalResult кнопки ОК значение гглгОК, а свойству ModalResult кнопки Cancel — значение mrCancel. Свойство ModalResult позволяет сделать одновременно две вещи: закрыть диалоговое окно и уведомить вызывающий объект о том. что пользователь выбрал ОК. Cancel или что-то еще. Когда пользователь щелкает на кнопке с модифицированным свойством ModalResult. то значение этого свойства будет автоматически присвоено свойству ModalResult диалогового окна. Поэтому, чтобы узнать, на какой кнопке щелкнул пользователь, мы должны проверить свойство ModalResult диалогового окна.
Код в листинге 12.19 показывает, как с помощью диалогового окна разрешить пользователю изменять цвет главной формы.
Листинг 12.19. Использование специального диалогового окна
1.
procedure
TForm1
.
ButtonlClick(Sender: TObject);
begin
2.
Form2
.
ShowModal;
3.
if
Form2
.
ModalResult = mrOK
then
begin
4.
Caption :=
'User selected OK.'
; Color :a clWhite;
5.
end
;
6.
end
;
Чтобы быть технически грамотными и профессиональными, мы должны сделать две вещи. Во-первых, мы должны разрешить пользователю отменять действия диалогового окна с помощью клавиши и подтверждать их с помощью клавиши . Затем мы должны удалить диалоговое окно из списка автоматически создаваемых окон и создавать его динамически по мере необходимости.
Чтобы сгенерировать событие onclick кнопки Cancel во время нажатия пользователем клавиши на клавиатуре, необходимо присвоить свойству Cancel кнопки значение True. Чтобы сгенерировать событие onclick кнопки ОК во время нажатия пользователем клавиши на клавиатуре, следует присвоить свойству Default кнопки значение True. Вот теперь все готово (рис. 12.22)!
Листинг 12.20. Динамически создаваемое диалоговое окно
1.
procedure
TForml
.
ButtonlClick(Sender: TObject);
begin
2.
Form2 := TForm2
.
Create(Self); Form2
.
ShowModal;
3.
if
Form2
.
ModalResult = mrOK
then
begin
4.
Caption
'User selected OK.'
; Color :« clWhite;
end
;
5.
Form2
.
Free;
end
;
Рис. 12.22. Готовое приложение
01.
program
Projectl;
02.
uses
Forms,
03.
Uniti
in
'Uniti.pas'
{Formi),
04.
Unit2 in ,Unit2.pas' {SplashForm}
;
05.
{SR *.res)
06.
begin
07.
Application.Initialize;
08.
{ Создание и отображение заставки }
09.
SplashForm TSplashForm
.
Create(Application);
10.
SplashForm
.
Show;
11.
SplashForm
.
Update;
12.
Application
.
CreateForm(TForml, Formi);
13.
{ Уничтожение заставки }
SplashForm
.
Free; Application
.
Run;
end
.
01.
program
Project1;
uses
02.
{ Процедура Sleep объявлена в модуле Windows )
03.
Forms, Windows,
04.
Unit1 in 'Uniti.pas' (Form1),
05.
Unit2 in 'Unit2.pas' (SplashForm);
06.
begin
07.
Application.Initialize;
08.
{ Создание и отображение заставки }
09.
SplashForm := TSplashForm
.
Create(Application);
10.
SplashForm
.
Show;
11.
SplashForm
.
Update;
12.
Application . CreateForm (TForml, Form],);
13.
{ Уничтожение заставки с
2
-х секундной задержкой. ) Sleep(
2000
); SplashForm
.
Free; Application
.
Run;
end
.
