Функции API (часть I): функции вызова диалоговых окон
Скорее всего, большинство из Вас привыкли использовать простейшую функцию ShowMessage для вывода диалоговых окон на экран.
Вид: function ShowMessage(const Msg: String);
Функция ShowMessage отображает на экране сообщение с кнопкой 'ОК'. Текст сообщения задается параметром Msg. Заголовок окна совпадает с именем выполняемого приложения.
У этой функции есть масса минусов: нельзя поменять текст заголовка, добавить кнопки, да и в приложении на русском языке окошко с английским текстом в заголовке и на кнопке смотрится некрасиво. Какой можно сделать вывод? Функция несомненно нужная, но ее стоит заменить на функцию MessageBox, которую мы сейчас и рассмотрим.
Вид: function MessageBox(Text, Caption: PChar; Flags: LongInt): Integer
Эта функция отображает диалоговое окно с заданными кнопками, сообщением и заголовком и позволяет проанализировать ответ пользователя. Один из плюсов этой функции - это то, что Вы можете создать заголовок и кнопки с русским текстом. Правда, надписи на кнопках будут русскими только в русифицированных версиях Windows. А теперь давайте рассмотрим параметры этой функции. Параметр Text представляет собой текст сообщения. Для длинных сообщений осуществляется автоматический перенос текста. Параметр Caption представляет собой текст заголовка окна. Параметр 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, MD_ICONWARNING
Восклицательный знак (замечание, предупреждение).
MB_ICONINFORMATION, MB_ICONNASTERISK
Буква "I" в круге (подтверждение).
MB_ICONQUESTION
Знак вопроса (ожидание ответа).
MB_ICONSTOP, MB_ICONNERROR, 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
Выбрана кнопка ОК.
IDRETRY
4
Выбрана кнопка Retry (Повтор).
IDYES
6
Выбрана кнопка Yes (Да).
Пример вызова: MessageBox('Вот наше окошко', 'Окно', MB_YESNOCANCEL + MB_ICONQUESTION);
Пояснение: Это выведет окно с заголовком "Окно", текстом - "Вот наше окошко", тремя кнопками - Yes, No, Cancel и пиктограммой знака вопроса.
Конечно же, помимо функции MessageBox существуют и другие функции: ShowMessage, ShowMessageFmt, MessageDlg, MessageDlgPos (подобна функции MessageDlg, но позволяет отображать диалоговое окно в заданном месте экрана), CreateMessageDialog (позволяет создавать диалоговоеокно окно сообщения в виде объекта формы; функция только создает окно, отображение осуществляется методом Show или ShowMessage). К сожалению, мы эти функции не сможем рассмотреть подробно, иначе рассылка стала бы похожа на небольшую книгу! Тем не менее, стоит сказать пару слов о них.
Чтобы "добить" эту тему, давайте разберем еще кое что. Функции, описанные выше, давали пользователю только возможность нажать в диалоге ту или иную кнопку. Но имеются функции, предлагающие пользователю диалоговое окно, в котором он должен ввести в окошко редактирования некоторый текст. Давайте рассмотрим две функции. Первая функция имеет вид: function InputBox(const ACaption, APrompt, ADefault: String): String;
Параметр ACaption - заголовок окна, APrompt - текст сообщения, ADefault - значение по умолчанию. Если пользователь нажмет кнопку ОК, то функция вернет введенное пользователем значение, во всех других случаях будет возвращено значение ADefault. Вторая функция имеет вид: function InputQuery(const ACaption, APrompt: String; var Value: String): Boolean;
Смысл параметров ACaption и APrompt тот же, что в функции InputBox. Параметр Value - это строка текста в окошке редактирования. Функция возвращает True только в том случае, если пользователь вышел из диалога, нажав ОК. В остальных случаях функция вернет False.