
_Delphi_1курс лекции / Пр 5 Окна сообщений
.docОкна
диалогов
Процедура ShowMessage Модуль Dialogs
procedure ShowMessage(const Msg: string);
Отображает окно сообщения с кнопкой OK.
Вызов ShowMessage отображает простое окно сообщения с кнопкой OK. Текст сообщения задается параметром Msg. Заголовок окна совпадает с именем выполняемого файла приложения.
При необходимости анализировать ответ пользователя на сообщение пользуйтесь функцией Delphi MessageDlg.
Примеры:
1.) ShowMessage('Работа приложения успешно завершена.');
2. ) В приведенном ниже примере предполагается, что целые переменные N1 и N2 содержат соответствующие числа, которые переводятся в строки функцией IntToStr. Сообщение, приведенное в этом примере проще реализовать процедурой ShowMessageFmt.
ShowMessage('Задано ' + IntToStr(N1) + ' параметров из '
+ IntToStr(N2));
ShowMessageFmt процедура Модуль Dialogs
procedure ShowMessageFmt(const Msg: string; Params: array of const);
Отображает окно форматированного сообщения с кнопкой OK.
Вызов ShowMessageFmt отображает окно сообщения с кнопкой OK. Параметр Msg задает строку описания формата, а параметр Params задает массив параметров, форматируемых строкой Msg. Заголовок окна совпадает с именем выполняемого файла приложения.
Пример
ShowMessageFmt('Задано %d параметров из %d ', [N1, N2]);
Функция TApplication.MessageBox
function MessageBox(Text, Caption: PChar; Flags: Longint): Integer;
Функция MessageBox является методом переменной Application типа TApplication, доступной в любом проекте Delphi. Это метод является наиболее удачным способом отображения диалоговых окон. Он отображает диалоговое окно с заданными кнопками, сообщением и заголовком и позволяет проанализировать ответ пользователя. Во многих отношениях это окно подобно окнам, создаваемым функциями MessageDlg и CreateMessageDialog. Но имеются и существенные отличия, связанные с возможностью русификации окна. Заголовок окна может быть написан по-русски, что отличает эту функцию от функции MessageDlg (впрочем, в окне, созданном CreateMessageDialog, это тоже можно сделать). Другим приятным отличием являются русские надписи на кнопках (в русифицированных версиях Windows).
Функция MessageBox инкапсулирует функцию MessageBox API Windows.
Параметр Text представляет собой текст сообщения, которое может превышать 255 символов. Для длинных сообщений осуществляется автоматический перенос текста. Параметр Caption представляет собой текст заголовка окна. Он тоже может превышать 255 символов, но не переносится. Так что длинный заголовок приводит к появлению длинного и не очень красивого диалогового окна.
Параметр Flags представляет собой множество флагов, определяющих вид и поведение диалогового окна. Этот параметр может комбинироваться операцией сложения по одному флагу из следующих групп.
Флаги кнопок, отображаемых в диалоговом окне.
Флаг Значение (в скобках даны надписи в русифицированных версиях Windows)
MB_ABORTRETRYIGNORE Кнопки Abort (Стоп), Retry (Повтор) и Ignore (Пропустить).
MB_OK Кнопка OK. Этот флаг принят по умолчанию.
MB_OKCANCEL Кнопки OK и Cancel (Отмена).
MB_RETRYCANCEL Кнопки Retry (Повтор) и Cancel (Отмена).
MB_YESNO Кнопки Yes (Да) и No (Нет).
MB_YESNOCANCEL Кнопки Yes (Да), No (Нет) и Cancel (Отмена).
Флаги пиктограмм в диалоговом окне
MB_ICONEXCLAMATION, MB_ICONWARNING Восклицательный знак
(замечание, предупреждение).
MB_ICONINFORMATION, MB_ICONASTERISK Буква i в круге (подтверждение).
MB_ICONQUESTION Знак вопроса (ожидание ответа).
MB_ICONSTOP, MB_ICONERROR, MB_ICONHAND Знак креста на красном круге
(запрет, ошибка).
Флаги, указывающие кнопку по умолчанию (которая в первый момент находится в фокусе)
MB_DEFBUTTON1 Первая кнопка. Это принято по умолчанию.
MB_DEFBUTTON2 Вторая кнопка.
MB_DEFBUTTON3 Третья кнопка.
MB_DEFBUTTON4 Четвертая кнопка.
Флаги модальности
MB_APPLMODAL Пользователь должен ответить на запрос, прежде чем сможет продолжить работу с приложением. Но он может перейти в окна другого приложения. Он может также работать со всплывающими окнами данного приложения. Этот флаг принят по умолчанию.
MB_SYSTEMMODAL То же самое, что MB_APPLMODAL, но окно диалога отображается в стиле WS_EX_TOPMOST, то есть всегда остается поверх других окон, даже если пользователь перешел к другим приложениям. Используется для предупреждения о серьезных ошибках, требующих немедленного вмешательства.
Некоторые дополнительные флаги (могут задаваться оба флага)
Флаг Пояснение
MB_HELP Добавляет в окно кнопку Help (Справка), щелчок на которой или нажатие клавиши F1 генерирует событие Help.
MB_TOPMOST Помещает окно всегда сверху (в стиле WS_EX_TOPMOST).
Возможны еще некоторые флаги, определяющие характер поведения окна при работе в сети нескольких пользователей, позволяющие отображать тексты справа налево (для восточных языков) и т.п.
Функция возвращает нуль, если не хватает памяти для создания диалогового окна. Если же функция выполнена успешно, то возвращаемая величина свидетельствует о следующем:
Значение Численное значение Пояснение
IDABORT 3 Выбрана кнопка Abort (Стоп).
IDCANCEL 2 Выбрана кнопка Cancel (Отмена) или нажата клавиша Esc.
IDIGNORE 5 Выбрана кнопка Ignore (Пропустить).
IDNO 7 Выбрана кнопка No (Нет).
IDOK 1 Выбрана кнопка OK.
IDRETRY 4 Выбрана кнопка Retry (Повтор).
IDYES 6 Выбрана кнопка Yes (Да).
Ниже приведен текст, предусматривающий проверку правильности ввода данных перед пересылкой записи в базу данных.
if (проверка введенных данных)
then begin
if (Application.MessageBox(
'Хотите занести текущую запись в базу данных?',
'Подтвердите занесение в базу данных',
MB_YESNOCANCEL + MB_ICONQUESTION) <> IDYES)
then begin
DataSet.Cancel;
Abort;
end
end
else begin
Application.MessageBox('Ошибочные данные','Ошибка', MB_ICONSTOP);
Abort;
end;
MessageDlg – функция Модуль Dialogs
function MessageDlg(const Msg: string; AType: TMsgDlgType;
AButtons: TMsgDlgButtons; HelpCtx: Longint): Word;
Отображает диалоговое окно сообщений в центре экрана.
Вызов MessageDlg отображает диалоговое окно и ожидает ответа пользователя. Сообщение в окне задается параметром функции Msg.
Вид отображаемого окна задается параметром AType. Возможные значения этого параметра:
Значение Описание
mtWarning Окно замечаний, содержащее желтый восклицательный знак.
mtError Окно ошибок, содержащее красный стоп-сигнал.
mtInformation Информационное окно, содержащее голубой символ "i".
mtConfirmation Окно подтверждения, содержащее зеленый вопросительный знак.
mtCustom Заказное окно без рисунка. Заголовок соответствует имени выполняемого файла приложения.
Параметр AButtons определяет, какие кнопки будут присутствовать в окне. Тип TMsgDlgBtns параметра AButtons является множеством, которое включает различные кнопки. Возможные значения видов кнопок:
Значение Описание
mbYes Кнопка с надписью 'Yes'
mbNo Кнопка с надписью 'No'
mbOK Кнопка с надписью 'OK'
mbCancel Кнопка с надписью 'Cancel'
mbHelp Кнопка с надписью 'Help'
mbAbort Кнопка с надписью 'Abort'
mbRetry Кнопка с надписью 'Retry'
mbIgnore Кнопка с надписью 'Ignore'
mbAll Кнопка с надписью 'All'
Список необходимых кнопок заключается в квадратные скобки [ ], поскольку параметр AButtons является множеством. Если внутри скобок список отсутствует, в окне не будет ни одной кнопки и пользователю придется закрывать окно системными кнопками Windows.
Кроме множества значений, соответствующих отдельным кнопкам, в Delphi определены три константы, соответствующие часто используемым сочетаниям кнопок:
Значение Описание
mbYesNoCancel Включает в окно кнопки Yes, No и Cancel
mbOkCancel Включает в окно кнопки OK и Cancel
mbAbortRetryIgnore Включает в окно кнопки Abort, Retry и Ignore
Эти константы являются предопределенными множествами. Поэтому при их использовании их не надо заключать в квадратные скобки [ ].
Параметр HelpCtx определяет экран контекстной справки, соответствующий данному диалоговому окну. Этот экран справки будет появляться при нажатии пользователем клавиши F1. Если вы справку не планируете, при вызове MessageDlg надо задать нулевое значение параметра HelpCtx..
Функция MessageDlg возвращает значение, соответствующее выбранной пользователем кнопке. Возможные возвращаемые значения:
mrNone mrAbort mrYes
mrOk mrRetry mrNo
mrCancel mrIgnore mrAll
Функция MessageDlg очень полезна для быстрого создания прототипа приложения и проверки диалогового взаимодействия с пользователем. Но у нее есть заметный недостаток: в заголовках и надписях на кнопках тексты английские, так что при использовании русских сообщений получается смесь русского с английским.
Имеется также функция MessageDlgPos, во всем аналогичная функции MessageDlg, но отображающее окно в заданном месте экрана.
При выводе простых сообщений без необходимости анализировать ответ пользователя удобно использовать другие процедуры Delphi - ShowMessage и ShowMessageFmt.
Примеры:
1. Заключительный диалог при окончании работы приложения.
if MessageDlg('Действительно хотите закончить приложение?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
MessageDlg('Работа приложение закончена', mtInformation,
[mbOk], 0);
Close;
end;
Первый вызов MessageDlg приводит к отображению окна типа mtConfirmation с вопросом о завершении приложения. Если пользователь нажимает кнопку Yes, то выводится второе окно типа mtInformation с сообщением о завершении.
1. Сообщение об ошибке и замечание.
on Exception do
begin
MessageDlg('Произошла ошибка.', mtError,
[mbOk], 0);
MessageDlg('Будьте внимательнее.
', mtWarning,
[mbOk], 0);
end;
3. В каком-то диалоге, после редактирования пользователем записи ему предлагается вопрос о сохранении ее в базе данных. Если пользователь выбирает кнопку Yes, запись сохраняется методом Post; если пользователь выбирает кнопку No, результаты редактирования уничтожаются методом Cancel; если же пользователь выбирает кнопку Cancel, диалог закрывается.
case MessageDlg('Занести запись в БД?', mtCustom,
mbYesNoCancel, 0) of
mrYes: DataSet1.Post;
mrNo: DataSet1.Cancel;
mrCancel: Close;
end;
В вызове MessageDlg использован тип mtCustom, в результате чего в заголовке окна указано имя приложения. Для задания кнопок использована константа mbYesNoCancel