Стандартные диалоговые окна
Диалоговое окно — вспомогательное окно, содержащее кнопки и другие элементы управления, при помощи которых можно выполнить ту или иную команду или задачу.
Виды диалоговых окон:
· окна ввода информации;
· окна вывода информации (окна сообщений).
Диалоговые окна ввода
InputBox
Возвращает текст, введенный пользователем в диалоговом окне с указанным заголовком и сообщением.
Переменная := InputBox(заголовок, подсказка, значение);
где:
· Переменная — переменная строкового типа, значение которой должно быть получено от пользователя.
· Заголовок — текст заголовка окна ввода.
· Подсказка — текст поясняющего сообщения.
· Значение — текст, который будет находиться в поле ввода, когда окно ввода появится на экране.
Пример использования:
Ввести возраст с помощью диалогового окна.
…
Var s:Byte;
…
Begin
…
s:=StrToInt(InputBox(‘Окно ввода','Введите ваш возраст','0'));
…
End;
Понять по возвращенному результату, написал ли пользователь какой-то текст, или отказался от ввода, можно, сравнив возвращенный результат с начальным значением. Впрочем, результат останется неизменным и в случае, если пользователь ничего не написал в диалоге, но нажал кнопку OK. Если надо достоверно знать, отказался ли пользователь от диалога или нажал OK, следует использовать похожую на InputBox функцию InputQuery.
InputQuery
Возвращает текст, введенный пользователем в диалоговом окне с указанным заголовком и сообщением, и позволяет определить действия пользователя в диалоге.
Возможные виды использования:
function InputQuery(const ACaption, APrompt: string; var Value: string): Boolean;
function InputQuery(const ACaption, APrompt: WideString; var Value: WideString): Boolean;
function InputQuery(const ACaption, APrompt: WideString; var Value: string): Boolean;
function InputQuery(const ACaption, APrompt: WideString; var Value: Double, Min: Double = Low(Integer); Max: Double = High(Integer)): Boolean;
, где:
· ACaption — заголовок диалогового окна.
· APromt — предложение пользователю что-то написать и окошко редактирования, в котором пользователь может написать ответ.
· Value — строка текста в окошке редактирования.
· AMin — минимальный набор символом, которые пользователь может ввести в окно редактирования.
· AMax — максимальный набор символов, которые пользователь может ввести в окно редактирования.
Пример использования:
Для этого примера понадобятся кнока и метка на форме. Когда пользаватель нажмет на кнопку появится диалоговое окно. Если пользаватель нажмет OK, то строка из дилогового окна отобразится на метке, находящейся на форме. Если пользователь нажмет Esc, Cancel или x, то метка останется без изменений.
Procedure TForm1.Button1Click(Sender: TObject);
Var
NewString: string;
ClickedOK: Boolean;
Begin
NewString := 'Пустая строка';
Label1.Caption := NewString;
ClickedOK := InputQuery('Окно ввода', 'Подсказка', NewString);
If ClickedOK then
Label1.Caption := 'Новая строка ' ' ' + NewString + ' ' ' ';
End;
Диалоговые окна вывода
ShowMessage
Отображает окно сообщения с кнопкой OK.
ShowMessage(‘Сообщение’);
В заголовке окна сообщения указывается имя выполняемого файла приложения. Изменить имя приложения можно на вкладке Application, в окне пункта меню Project, подпункта Options.
Пример использования
…
Var st: String;
Begin
…
st:='Спасибо, что выбрали нашу программу!';
ShowMessage(st);
…
End;
При необходимости анализировать ответ пользователя на сообщение используют функцию MessageDlg.
MessageDlg
Отображает диалоговое окно сообщения в центре экрана.
function MessageDlg(const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: Longint): Word;
, где
· Msg — текст сообщения.
· Type — тип сообщения. Сообщение может быть информационным, предупредительным или сообщением о критической ошибке. Каждому типу сообщения соответствует определенный значок. Тип сообщения задается именованной константой, которые приведены на таблице ниже.
· AButtons — кнопки, которые будут присутствовать в окне. Тип TMsgDlgBtns является множеством. Которое включает различные кнопки. Возможные значения кнопок:
Список необходимых кнопок заключается в квадратные скобки [ ], поскольку параметр AButtons является множеством. Если внутри скобок список отсутствует, то в окне не будет ни одной кнопки и пользователю придется закрывать окно системными средствами Windows.
Кроме приведенных констант можно использовать константы: mbokcancel, mbYesNoCancel и mbAbortRetryIgnore. Эти константы определяют наиболее часто используемые в диалоговых окнах комбинации командных кнопок.
· HelpCtx — параметр, определяющий раздел справочной системы, который появится на экране, если пользователь нажмет клавишу <F1>. Если вывод справки не предусмотрен, то значение параметра должно быть равно нулю.
Значение, возвращаемое функцией MessageDlg, позволяет определить, какая из командных кнопок была нажата пользователем. Возможные возвращаемые значения:
Пример использования:
…
Begin
…
If MessageDlg('Вы действительно хотите выйти?',mtConfirmation,[mbYes,mbNo],0)= mrYes then Form1.Close;
End;
MessageBox
Функция для вызова диалогового окна с сообщение для пользователя. Принципиальное отличие от функции MessageDlg состоит в том, что можно задать заголовок сообщения и на кнопках отображаются русские надписи, это возможно поскольку MessageBox является функцией Windows32 API (функция самой ОС).
Рассмотрим синтаксис этой функции:
function Application.MessageBox(const Text, Caption: PChar; Flags: Longint ): Integer;
, где
· Text — текст самого сообщения, которое может быть более 255 символов при необходимости. Длинные сообщения будут автоматически распределяться на нескольких строках.
· Caption — заголовок диалогового окна. Заголовок тоже может иметь длину более 255 символов, при этом диалоговое окно будет увеличиваться в длину, что придаст ему не совсем эстетичный вид.
· Flag — множество параметров, определяющих вид и действия диалогового окна. При использовании нескольких параметров одновременно их необходимо складывать и записывать в скобках. Рассмотрим основные параметры:
Кнопки, отображаемые в диалоговом окне:
Параметр |
Значение |
Внешний вид |
MB_ABORTRETRYIGNORE |
Кнопки «Стоп», «Повтор» и «Пропустить». |
|
MB_OK |
Кнопка «ОК». Этот параметр принят по умолчанию. |
|
MB_OKCANCEL |
Кнопки «ОК» и «Отмена». |
|
MB_RETRYCANCEL |
Кнопки «Повтор» и «Отмена». |
|
MB_YESNO |
Кнопки «Да» и «Нет». |
|
MB_YESNOCANCEL |
Кнопки «Да», «Нет» и «Отмена». |
Пиктограммы, отображаемые в диалоговом окне:
Параметр |
Значение |
Пиктограмма |
MB_ICONEXCLAMATION |
Замечание. |
|
MB_ICONWARNING |
Предупреждение. |
|
MB_ICONINFORMATION |
Информирование. |
|
MB_ICONASTERISK |
Подтверждение. |
|
MB_ICONQUESTION |
Ожидание ответа |
|
MB_ICONSTOP |
Запрет. |
|
MB_ICONERROR |
Ошибка. |
|
MB_ICONHAND |
Прерывание. |
Параметры, указывающие кнопку, находящуюся в фокусе:
Параметр |
Кнопка |
Пример |
MB_DEFBUTTON1 |
Первая кнопка. Этот параметр принят по умолчанию. |
|
MB_DEFBUTTON2 |
Вторая кнопка. |
|
MB_DEFBUTTON3 |
Третья кнопка. |
|
MB_DEFBUTTON4 |
Четвертая кнопка. |
— |
Параметры, определяющие модальность окна:
Параметр |
Пояснение |
MB_APPLMODAL |
Пользователь должен ответить на запраос, прежде чем он сможет продолжить работу приложения. Но он может перейти работать в окна другого приложения или работать со всплывающими окнами данного приложения |
MB_SYSTEMMODAL |
То же самое, что и MB_APPLMODAL, но окно всегда отображается поверх других окон. Используется этот параметр для предупреждения о серьезных о серьезных ошибках, требующих немедленного вмешательсьва. |
Дополнительные параметры (могут задаваться одновременно).
Параметр |
Пояснение |
Пример |
MB_HELP |
Добавляет кнопку «Справка» в окно. |
|
MB_TOPMOST |
Помещает окно всегда поверх других окон. |
— |
MB_RIGHT |
Выраснивает текст по правому краю. |
Функция может возвращать следующие значения:
Значение |
Численное значение |
Пояснение |
— |
0 |
Не хватает памяти для создания диалогового окна. |
IDOK |
1 |
Нажата кнопка «ОК». |
IDCANCEL |
2 |
Нажата кнопка «Отмена» или клавиши «Esc». |
IDABORT |
3 |
Нажата кнопка «Стоп». |
IDRETRY |
4 |
Нажата кнопка «Повтор». |
IDIGNORE |
5 |
Нажата кнопка «Пропустить». |
IDYES |
6 |
Нажата кнопка «Да». |
IDNO |
7 |
Нажата кнопка «Нет». |
Существует еще довольно большое количество функций вызова диалоговых окон, такие как MessageBoxEx, ShowMessageFmt, CreateMessageDialog и других, мы рассмотрели основные из них, остальные построены на тех же принципах. Например, функция MessageBoxEx (функция самой Windows) полностью дублирует функцию MessageBox, причем позволяет задать заголовок и переводит надписи на кнопках на русский язык (если у вас, конечно, установлен русскоязычный Windows) Если вы хотите узнать принципы использования MessageBoxEx можете воспользоваться справкой Delphi, справочником по Win32 API функциям или написать мне письмо с просьбой объяснить ее использование.