В приложениях, разработанных для 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); begin2.Form2.ShowModal;3.if Form2.ModalResult = mrOK then begin4.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); begin2.Form2 := TForm2.Create(Self); Form2.ShowModal;3.if Form2.ModalResult = mrOK then begin4.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.begin07.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; uses02.{ Процедура Sleep объявлена в модуле Windows )03.Forms, Windows,04.Unit1 in 'Uniti.pas' (Form1),05.Unit2 in 'Unit2.pas' (SplashForm);06.begin07.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.
