ФункцияMessageDlg.
ФункцияMessageDlg обладает более широкими возможностями. Кроме сообщения она позволяет указать тип сообщения и отобразить в окне сообщения несколько кнопок.
Форма записи: MessageDlg(<сообщение>, <тип>, <кнопки>, <справка>);
Здесь: <сообщение>- строковая константа, отображается в окне.
<тип>- тип сообщения - может принимать несколько значений. От этих значений зависит содержимое заголовка и иконка в левом верхнем углу окна. Возможные значения типа сообщений приведены в таблице 5.28.1
Таблица 5.28.1.
Тип сообщения | Описание | Вид окна |
mtWarning | Предупреждение. Можно использовать в предупреждающих сообщениях. Например, "Вы действительно желаете удалить все данные с диска С:" | |
mtError | Ошибка. Обычное окошко вывода сообщения об ошибки. Например, аргумент Ln меньше нуля. | |
mtInformation | Информация. Какая-нибудь информация. Например, "Не найден файл настройки, создается заново" | |
mtConfirmation | Запрос\ подтверждение Запрос на сохранение перед выходом, спрашивает перед удалением параметра, и т.п. | |
mtCustom | Без значка. Это сообщение полностью аналогично ShowMessage |
Элемент <кнопки> - содержит в себе массив кнопок, которые можно показывать в сообщении.
кнопка | * mbYes | * mbNo | * mbOK | * mbCancel | * mbAbort |
текст на кнопке | Yes | No | Ok | Cancel | Abort |
Еще есть кнопки: * mbHelp, * mbRetry, * mbIgnore, * mbAll.
Массив кнопок задается в квадратных скобках []. Например, нам надо задать три кнопки Yes, No, Cancel. Это делается так [mbYes, mbNo, mbCancel].
Элемент <справка> содержит номер страницы справочной системы. Если справка отсутствует, то указывается номер 0.
MessageDLG является функцией. Она возвращает результат нажатой кнопки.
Рассмотрим пример. Пусть нам надо спросить у пользователя о дальнейших действиях перед выходом из программы.
1. Сохранить файл.
2. Не сохранять файл.
3. Продолжить редактирование.
Var R:Word; // переменная, в которой хранится результат
...R:=MessageDLG ('Сохранить файл перед выходом?', mtConfirmation, [mbYes, mbNo, mbCancel], 0);
if R=mrYes then // если нажата кнопка Yes
begin
// сохраняем файл и завершаем программу
end;
if R=mrNo then // если нажата кнопка No
begin
// завершаем работу программы без сохранения
end;
if R=mrCancel then // если нажата кнопка Cancel
begin
// продолжаем работу без сохранения
end;
MessageDLG - это очень гибкая функция, у нее есть много достоинств, но есть и один существенный недостаток - англоязычный интерфейс.
Следующая процедура использует системные сообщения пользователю вашей операционной системы. Т.е., если у вас установлена, например немецкая версия windows, то кнопки будут иметь соответствующие названия на немецком языке.
MessageBox(Handle,ТЕКСТ_СООБЩЕНИЯ,ЗАГОЛОВОК_ОКНА,ТИП_СООБЩЕНИЯ);
Первый параметр - указатель на владельца окна сообщения. Этот параметр вам пока ничего не говорит, устанавливайте его в Handle (это ссылка на окно, откуда это сообщение вызывается).
ТЕКСТ_СООБЩЕНИЯ и ЗАГОЛОВОК_ОКНА - имеют тип PChar, поэтому, во избежание недоразумений и появления неизвестного рода ошибок, выдаваемых компилятором, меняйте тип String в PChar "на ходу". Например:
MessageBox(Handle,PChar('ТЕКСТ_СООБЩЕНИЯ'),PChar('ЗАГОЛОВОК_ОКНА'),...
Это был перевод из одного типа строковой величины в другой тип.
Теперь поговорим о немного сложном параметре ТИП_СООБЩЕНИЯ. Он включает в себя иконку и кнопки.
Кнопки:
* MB_ABORTRETRYIGNORE - кнопки "Прервать", "Повторить", "Пропустить".
* MB_OK - кнопка "Ok".
* MB_OKCANCEL - кнопки "Ok", "Отмена".
* MB_RETRYCANCEL - кнопки "Повторить" и "Отмена".
* MB_YESNO - две кнопки "Да" и "Нет".
* MB_YESNOCANCEL - кнопки "Да", "Нет", "Отмена".
Для того, чтобы отобразить иконку, нужно указать:
* MB_ICONEXCLAMATION
* MB_ICONWARNING
* MB_ICONINFORMATION
* MB_ICONASTERISK
* MB_ICONQUESTION
* MB_ICONSTOP
* MB_ICONERROR
* MB_ICONHAND
Если у вас в сообщении несколько кнопок, а по умолчанию нужно выбрать определенную, то такая кнопка задается:
MB_DEFBUTTON1 - где последняя цифра указывает номер кнопки, выбранной по умолчанию. Это свойство может быть полезным, например, чтобы обезопасить данные от случайного уничтожения. "Удалить файл?". Две кнопки - "Да", "Нет". По умолчанию мы программно выбираем вторую кнопку. Если пользователь сразу нажал на Enter, не осознавая своего поступка, можно сказать по привычке, то ничего страшного не произойдет.
Как же указать параметры иконки, кнопок, кнопки по умолчанию в одном параметре ТИП_СООБЩЕНИЯ. Очень просто. Простым знаком +
Например:
MessageBox(Handle,PChar('Выйти из программы?'),PChar('Мое сообщение'),MB_ICONINFORMATION+MB_OKCANCEL+MB_DEFBUTTON2);
Выглядит это в программе так, как показано на рисунке:
Итак, MessageBox можно считать идеальной командой вывода сообщения пользователю, которая будет совместима со всеми языковыми версиями windows.
Контроль нажатия на кнопку в MessageBox мы осуществляем аналогично MessageDLG, только возвращаемая величина может принимать следующие значение (соответственно нажатой кнопке):
* IDABORT
* IDCANCEL
* IDIGNORE
* IDNO
* IDOK
* IDRETRY
* IDYES