1. Простые диалоги

1.1. Функции вызова диалога

Для выдачи пользователю простых диалогов и получения от него ответа в Delphi существует функции ряд функций. Наиболее часто используемыми являются функции ShowMessage (которая просто выводит сообщение с единственной кнопкой "ОК") и MessageDlg, способная выводить сообщения в различном стиле.

Таблица 9.1.
Что необходимо сделать Оператор Результат вызова
Выдать простое сообщение ShowMessage('Простое сообщение.')
Проинформировать MessageDlg('Волга впадает в Каспийское море.',mtInformation, [mbOK],0);
Запросить подтверждение if MessageDlg('Вы действительно хотели увидеть этот диалог?',mtConfirmation, [mbYes, mbNo],0)=mrYes then ShowMessage('Рад, что вам понравилось.') else ShowMessage('Ну и зря. Хороший диалог.');
Сообщить об ошибке MessageDlg('В вашей программе что-то не так!',mtError, [mbOk],0);
Выдать предупреждение MessageDlg('Враг не дремлет!',mtWarning, [mbOk],0);
Выдать диалог без изображения MessageDlg('Пользуйтесь на здоровье.',mtCustom, [mbOk],0);

Примечание

При вызове диалога типа mtCustom с помощью функции MessageDlg (или простого сообщения с помощью ShowMessage) заголовок показываемого диалога равен значению свойства Application.Title, если оно установлено. Если нет, то – Application.ExeName

Совет

Текст, выводимый в диалоге, можно скопировать в буфер обмена с помощью комбинации клавиш <Ctrl>+<C>.

Пример 9.1. Пример копии диалога

---------------------------
ООП - диалоги
---------------------------
Пользуйтесь на здоровье.
---------------------------
Да   Нет   
---------------------------

1.2. Анализ действий пользователя

Закрыть диалог можно различными способами. Например, нажав "ОК", "Отмена" или другую имеющиеся в диалоге кнопку, клавишу <Enter>, <Esc> или сочетание клавиш <Alt>+<F4>, щелкнув мышью по кнопке закрытия окна и т.д.

Действия пользователя в программе можно оценить по значению, возвращаемому функцией MessageDlg типа TModalResult.

Пример 9.2.

type
  TModalResult = Low(Integer)..High(Integer);

Как видно из объявления типа вариантов ответов может быть много. Наиболее часто встречающиеся значения обозначены специальными константами.

Таблица 9.2.
Константа Значение Когда присваивается
mrNone 0 Диалог пока открыт
mrOk idOK Пользователь закрыл диалог нажатием кнопки "OK"
mrCancel idCancel Пользователь закрыл диалог нажатием кнопки "Отмена" (CANCEL)
mrAbort idAbort Пользователь закрыл диалог нажатием кнопки "Прервать" (ABORT)
mrRetry idRetry Пользователь закрыл диалог нажатием кнопки "Повторить" (RETRY)
mrIgnore idIgnore Пользователь закрыл диалог нажатием кнопки "Игнорировать" (IGNORE)
mrYes idYes Пользователь закрыл диалог нажатием кнопки "Да" (YES)
mrNo idNo Пользователь закрыл диалог нажатием кнопки "Нет" (NO)
mrAll mrNo+1 Пользователь закрыл диалог нажатием кнопки "Для всех" (ALL)
mrNoToAll mrAll+1 Пользователь закрыл диалог нажатием кнопки "Нет для всех" (NO TO ALL)
mrYesToAll mrNoToAll+1 Пользователь закрыл диалог нажатием кнопки "Да для всех" (YES TO ALL)

Примечание

Все вышеперечисленные константы имеют совершенно условные названия и вы можете в своих приложениях трактовать как угодно.

Совет

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

Пример 9.3. Пример анализа ответа пользователя на запрос

if MessageDlg('Вам понравился диалог?',mtConfirmation, [mbYes, mbNo],0)=mrYes 
   then ShowMessage('Рад, что вам понравилось.') 
   else ShowMessage('Ну и зря. Хороший диалог.');

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