Пропустить навигацию.
Главная

Вывод сообщений в системах BCB и Delphi

В системах BCB и Delphi существует довольно большое количество диалоговых окон, предназначенных для вывода сообщений и анализа реакции пользователя — ShowMessage, MessageBox, MessageDlg, MessageDlgPos. Однако их функциональные возможности мало чем отличаются от окна MsgBox в системе Visual Basic.

Процедура ShowMessage отображает заданное сообщение в диалоговом окне с единственной кнопкой <OK>. Заголовок диалогового окна совпадает с именем приложения.

Функция MessageBox обладает несколько более широкими возможностями, т.к. располагает тремя аргументами:

int k=MessageBox(Message, Caption, Buttons);

Первый ее аргумент представляет указатель на текст отображаемого сообщения. Оно может быть достаточно длинным и автоматически разбивается на строки, помещающиеся в окне. Второй параметр задает строку, которая выступает в качестве заголовка диалогового окна. Комбинация кнопок в диалоговом окне задается числовым аргументом Buttons. Для их задания предусмотрен набор мнемонических констант, приведенных в табл. 6.2.

Таблица 6.2

Константы Delphi Константы BCB Набор кнопок
mbAbortRetryIgnore MB_ABORTRETRYIGNORE Кнопки <Abort>, <Retry> и <Ignore>
mbOK MB_OK Одна кнопка <OK>
mbOKCancel MB_OKCANCEL Кнопки <OK> и <Cancel>
mbRertryCancel MB_RETRYCANCEL Кнопки <Retry> и <Cancel>
mbYesNo MB_YESNO Кнопки <Yes> и <No>
mbYesNoCancel MB_YESNOCANCEL Кнопки <Yes>, <No> и <Cancel>

Функция MessageBox возвращает целочисленное значение из интервала [0,7] в зависимости от нажатой кнопки (табл. 6.3).

Таблица 6.3

Число Константа BCB Константа Delphi Нажатая кнопка
1 IDOK mrOK <OK>
2 IDCANCEL mrCancel <Cancel>
3 IDABORT mrAbort <Abort>
4 IDRETRY mrRetry <Retry>
5 IDIGNORE mrIgnore <Ignore>
6 IDYES mrYes <Yes>
7 IDNO mrNo <No>

Нулевой результат свидетельствует о неудачной попытке создать диалоговое окно, например, по причине исчерпания ресурсов памяти.

Функция MessageDlg обладает большей гибкостью и несколько более широкими возможностями:

MessageDlg(Msg, DlgType, Buttons, HelpCtx);

Первый аргумент — значение типа AnsiString в BCB или типа String в Delphi, — представляет текст отображаемого сообщения. Второй аргумент определяет тип пиктограммы, включаемой в диалоговое окно, и обычно задается с помощью одной из следующих мнемонических констант:

  • mtWarning — в диалоговом окне появляется восклицательный знак на фоне желтого треугольника, в заголовке окна слово Warning (Предупреждение);
  • mtError — в диалоговом окне появляется стоп-знак (косой крест) в красном кружочке, в заголовке окна слово Error (Ошибка);
  • mtInformation — в диалоговом окне появляется буква i на синем фоне, а в заголовке окна слово Information (Информация);
  • mtConfirmation — в диалоговом окне появляется вопросительный знак на зеленом фоне, а в заголовке окна слово Confirmation (Подтверждение);
  • mtCustom — диалоговое окно не содержит пиктограммы, заголовок окна совпадает с именем приложения.

Приложение 6_07 (Delphi).

Аргумент Buttons представлен множеством, элементы которого определяют набор кнопок, присутствующих в диалоговом окне. Для языка Object Pascal множество (set) является каноническим типом данных, и для задания его значения достаточно перечень допустимых элементов просто заключить в квадратные скобки (рис. 6.7)

Стандартные диалоговые объекты

Рис.6.7. Формат обращения к функции MessageDlg в Delphi

Приложение 6_08 (BCB).

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

Стандартные диалоговые объекты

Рис.6.8. Пример формирования множества в BCB

Последний аргумент HelpCtx определяет номер кадра помощи в Help-файле, который должен появиться при нажатии клавиши <F1>.

Вообще говоря, в системах BCB и Delphi существует несколько вариантов функции MessageDlg, отличающиеся набором параметров. Такая возможность в объектно-ориентированных системах составляет существо термина полиморфизм, и ей пользуются довольно часто. Однако чтобы не вносить сумятицу в головы начинающих программистов, мы рекомендуем использовать еще одну диалоговую функцию MessageDlgPos, которая в дополнение к четырем аргументам предыдущей функции требует задания координат (x,y), задающих в пикселах положение окна на экране.

Обе функции возвращают целочисленное значение — числовой код, приписанный нажатой кнопке (см. табл. 6.3).