Для выдачи пользователю простых диалогов и получения от него ответа в Delphi существует функции ряд функций. Наиболее часто используемыми являются функции ShowMessage (которая просто выводит сообщение с единственной кнопкой "ОК") и MessageDlg, способная выводить сообщения в различном стиле.
Что необходимо сделать | Оператор | Результат вызова |
Выдать простое сообщение | 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. Пример копии диалога
--------------------------- ООП - диалоги --------------------------- Пользуйтесь на здоровье. --------------------------- Да Нет ---------------------------
Закрыть диалог можно различными способами. Например, нажав "ОК", "Отмена" или другую имеющиеся в диалоге кнопку, клавишу <Enter>, <Esc> или сочетание клавиш <Alt>+<F4>, щелкнув мышью по кнопке закрытия окна и т.д.
Действия пользователя в программе можно оценить по значению, возвращаемому функцией MessageDlg типа TModalResult.
Как видно из объявления типа вариантов ответов может быть много. Наиболее часто встречающиеся значения обозначены специальными константами.
Константа | Значение | Когда присваивается |
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('Ну и зря. Хороший диалог.');
В ряде случаев возможностей, предоставляемых вышеописанными функциями, бывает недостаточно. В этом случае необходимо разрабатывать свой пользовательский диалог.