Тип сообщения | Описание | Вид окна |
mtWarning |
Можно использовать в предупреждающих сообщениях. Например, "Вы действительно желаете удалить все данные с диска С:" | |
mtError |
Обычное окошко вывода сообщения об ошибки. Всем знаком его вид т.к. это наиболее частое окно в windows :) | |
mtInformation | Какая-нибудь информация. Например, "Не найден файл настройки, создается заново" | |
mtConfirmation | Это запрос. Запрос на сохранение перед выходом, спрашивает перед удалением параметра, и т.п. На ваш собственный вкус | |
mtCustom | Это сообщение полностью аналогично ShowMessage |
КНОПКИ - содержит в себе массив кнопок,
которые следует показывать в сообщении.
Даю перечень кнопок.
* mbYes
* mbNo
* mbOK
* mbCancel
* mbHelp
* mbAbort
* mbRetry
* mbIgnore
* mbAll
Рассказывать про каждую кнопку не буду, т.к. все
равно ее название нельзя сменить. А если вам
англоязычный термин непонятен, то тогда какой
смысл ее применять :).
Массив кнопок задается в квадратных кавычках [].
Например, нам надо задать три кнопки Yes, No,
Cancel. Это делается так [mbYes,mbNo,mbCancel].
Поскольку кнопки в сообщении могут быть разные,
то MessageDLG является функцией. Она возвращает
результат нажатой кнопки.
Соответственно указанным выше кнопкам результат
может принимать следующие значения
* mrNone - окно сообщения закрыто не с помощью кнопки
(Alt+F4 или кнопкой "закрыть")
* mrAbort
* mrYes
* mrOk
* mrRetry
* mrNo
* mrCancel
* mrIgnore
* mrAll
Рассмотрим пример. Нам надо спросить у
пользователя о дальнейших действиях перед
выходом из программы.
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
Оъявление. Автор уроков для начинающих
по delphi ищет темы, какие вам было бы интересно
узнать. Свои предложения отсылайте мне, Semen'у, по
адресу semen@krovatka.net, указав в
теме письма слово "предложение". Ваше
предложение не должно быть очень сложным для
программного решения, понятным для начинающего,
тема не должна отклоняться от тематики ведения
уроков (например, не рассматривается управление
базами данных, SQL, internet и пр.). Материал, написанный
по вашему предложению, ориентировочно должен
быть дан в объеме одного урока. Предложение в
этот урок должно быть отправлено до пятницы.
По вашему дополнительному пожеланию ссылка на
автора идеи будет помещена в начале урока. В
таком случае обязательно делайте
соответствующую пометку и указывайте свое имя с
обратным адресом в письме с предложением.