Диалоговые окна в Дельфи (процедуры и функции, реализующие диалоговые окна)
И так, в рамках этой статьи рассмотрим ряд специальных процедур и функций, предлагаемых Delphi для отображения простых диалоговых окон общего назначения.
Процедура ShowMessage, функции MessageDlg и MessageDlgPos отображают окно (панель) вывода сообщений, а функции InputBox и InputQuery — окно (панель) для ввода информации.
Процедура ShowMessage
Процедура ShowMessage (const Msg: String) отображает окно сообщения с кнопко ОК. Заголовок содержит название исполняемого файла приложения, а строка Msg выводится как текст сообщения.
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- ShowMessage('Простейшее диалоговое окно. Программировать на Delphi вместе с Delphi-faq.ru легко.');
- end;
Функция MessageDlg
Функция MessageDlg(const Msg: String; AType: TMsgDlgType; AButtons: TMsgDlgButtons; Helpctx: Longint) : word отображает окно сообщения в центре экрана и позволяет получить ответ пользователя. Параметр Msg содержит отображаемое сообщение.
Окно сообщения может относиться к различным типам и наряду с сообщением содержать картинки. Тип окна сообщения определяется параметром АТуре, который может принимать следующие значения:
- mtWarning (окно содержит черный восклицательный знак в желтом треугольнике и заголовок Warning);
- mtError (окно содержит белый косой крест в красном круге и заголовок Error);
- mtInformation (окно содержит синюю букву «i» в белом круге и заголовок Information);
- mtConfirmation (окно содержит синий знак «?» в белом круге и заголовок Confirmation);
- mtCustom (окно не содержит картинки, в заголовке выводится название исполняемого файла приложения).
Параметр AButtons задает набор кнопок окна и может принимать любые комбинации следующих значений:
- mbYes (кнопка Yes);
- mbAbort (кнопка Abort);
- mbNo (кнопка No);
- mbRetry (кнопка Retry);
- mbOk (кнопка OK);
- mbIgnore (кнопка Ignore);
- mbCancel (кнопка Cancel);
- mbAll (кнопка All);
- mbHelp (кнопка Help);
Для значения параметра AButtons имеются две константы — mbYesNoCancel и mbOKCancel, задающие предопределенные наборы кнопок:
- mbYesNoCancel = [mbYes, mbNo, mbCancel];
- mbOKCancel = [mbOK, mbCancel]
При нажатии любой из указанных кнопок (кроме кнопки Help) диалоговое окно закрывается, а результат (свойство ModalResult) возвращается функцией MessageDlg.
Параметр HelpCtx определяет контекст (тему) справки, которая появляется во время отображения диалогового окна при нажатии пользователем клавиши <F1>. Обычно! значение этого параметра равно нулю.
Пример использования функции MessageDlg:
- procedure TForm1.Button1Click(Sender: TObject);
- var rez : TModalResult;
- begin
- if Length(DateEdit1.Text) <> 10 then
- begin
- rez:= MessageDlg('Не правильная дата'+#10#13+'Исправить автоматически?', mtError, [mbOk, mbNo], 0);
- if rez = mrOk then DateEdit1.Text:=DateToStr(Date);
- if rez = mrNo then DateEdit1.SetFocus;
- end;
- end;
При нажатии кнопки Button1 производится простейшая проверка даты. Код даты вводится в поле редактирования DateEdit1, размещенное в форме. Если длина даты меньше допустимой, выдается предупреждение с запросом на автоматическую коррекцию (см. скриншот). При утвердительном ответе пользователя в поле даты записывается текущая дата, при отрицательном — фокус передается полю ввода даты.
Функция MessageDlgPos
Функция MessageDlgPos(const Msg: String; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer) : Word отличается от функции MessageDlg наличием параметров Х и Y, управляющих положением окна на экране.
Функция InputBox
Функция InputBox(const ACaption, APrompt, ADefault: String): String отображает диалоговое окно для ввода строки текста. Окно выводится в центре экрана и содержит поле ввода с надписью, а также кнопки ОК и Cancel.
Параметр ACaption задает заголовок окна, а параметр APrompt содержит поясняющий текст к полю ввода. Параметр ADefault определяет строку, возвращаемую функцией при отказе пользователя от ввода информации (нажатие кнопки Cancel или клавиши <Esc>).
Пример использования функции InputBox:
- procedure TForm1.btn1nputNameClick(Sender: TObject);
- var soname : string;
- begin
- soname := InputBox('Пользователь', 'Введите фамилию', 'Иванов');
- end;
Приведенная процедура отображает окно запроса на ввод фамилии пользователя (см. скриншот).
По умолчанию предлагается Иванов.
Функция InputQuery
Функция InputQuery (const ACaption, APrompt: String; var Value: String): Boolean отличается от функции InputBox тем, что вместо третьего параметра— строки по умолчанию— используется параметр Value, который в случае подтверждения ввода содержит введенную пользователем строку.
В качестве результата функция возвращает логическое значение, позволяющее определить, каким образом завершен диалог. Если нажата кнопка ОК, то функция возвращает значение True, если нажата кнопка Cancel или клавиша <Esc> — значение False.
- procedure TForm1.btnlnputNameClick (Sender: TObject);
- var soname: string;
- begin
- soname : = ' Иванов1';
- InputQuery('Пользователь', 'Введите фамилию', soname);
- end;
В вышеуказанной процедуре с помощью функции InputQuery выводится окно запроса, аналогичное приведенному ранее. Возвращаемый функцией InputQuery результат не анализируется.
Кроме рассмотренных диалоговых окон, в Delphi имеется ряд других специализированных диалоговых окон, например диалоговое окно выбора каталога, вызываемое функцией Select Directory модуля FileCtrl.