При разработке программ автоматизированного проектирования в Delphi приходится использовать окна сообщений. В данной статье функции для создания окон сообщений собраны в одном месте, а простые примеры помогут проектировщику выбрать из предложенного списка наиболее эффективную для решения поставленной задачи.
1. Функция MessageBox (Windows API)
2. Функция MessageBoxEx (Windows API)
3. Функция MessageBox (класса TApplication, модуля Forms)
4. Функция MessageDlg (модуля Dialogs)
5. Функция MessageDlgPos (модуля Dialogs)
6. Функция MessageDlgPosHelp (модуля Dialogs)
7. Процедура ShowMessage (модуля Dialogs)
8. Процедура ShowMessagePos (модуля Dialogs)
9. Процедура ShowMessageFmt (модуля Dialogs)
10. Функция CreateMessageDialog (модуля Dialogs)
11. Функция TaskMessageDlg (модуля Vcl.Dialogs)
12. Функция FlashWindow (Windows API)
13. Функция MessageBeep (Windows API)
1. Функция MessageBox (Windows API)
Функция – отображает диалоговое окно с сообщением.
Синтаксис функции (Windows API):
function MessageBox (Wnd: HWND; lpText, lpCaption : PChar; uType : Cardinal) : integer;
Описание:
Функция используется, чтобы отобразить универсальное диалоговое окно сообщений с одной или более кнопками.
Параметр hWnd – маркер (дескриптор) окна владельца, идентифицирует окно владельца окна сообщений. Если этот параметр НУЛЕВОЙ (ПУСТОЙ), окно сообщений не имеет никакого владельца.
Параметр ipText – указатель на строку, содержащую сообщение, с нулевым символом в конце. Текст сообщения может быть длинным, более чем 255 символов в случае необходимости.
Параметр ipCaption — заголовок, который появляется в области заголовка диалогового окна. Заголовки могут быть более длинными, чем 255 символов, из-за чего создается широкое окно сообщений.
Параметр uType определяет набор флажков, которые определяют содержание и поведение диалогового окна. Этот параметр может быть комбинацией флажков из следующих групп флажков.
Группа флажков, определяющая, какие кнопки появятся на окне сообщений
№ п.п. | Значения параметра | Описание |
1 | MB_ABORTRETRYIGNORE | Окно сообщений содержит три кнопки: Abort, Retry, and Ignore. |
2 | MB_OK | Окно сообщений содержит одну кнопку: OK. Это значение по умолчанию. |
3 | MB_OKCANCEL | Окно сообщений содержит две кнопки: OK и Cancel. |
4 | MB_RETRYCANCEL | Окно сообщений содержит две кнопки: Retry and Cancel. |
5 | MB_YESNO | Окно сообщений содержит две кнопки: Yes и No. |
6 | MB_YESNOCANCEL | Окно сообщений содержит три кнопки: Yes, No, и Cancel. |
Функция MessageBox возвращает 0, если нет достаточного количества памяти, чтобы создать окно сообщений. Иначе она возвращает одно из следующих значений:
№ | Возвращаемое значение функции | Возвращаемое числовое значение функции | Описание |
1 | IDOK | 1 | Пользователь выбрал кнопку OK. |
2 | IDCANCEL | 2 | Пользователь выбрал кнопку Cancel. |
3 | IDABORT | 3 | Пользователь выбрал кнопку Abort. |
4 | IDRETRY | 4 | Пользователь выбрал кнопку Retry. |
5 | IDIGNORE | 5 | Пользователь выбрал кнопку Ignore. |
6 | IDYES | 6 | Пользователь выбрал кнопку Yes. |
7 | IDNO | 7 | Пользователь выбрал кнопку No. |
Группа флажков, определяющая, какие иконки отобразятся в окне сообщений
Группа флажков, указывающая на основную кнопку
№ п.п. | Значения параметра | Описание |
1 | MB_DEFBUTTON1 | Первая кнопка — основная кнопка. |
2 | MB_DEFBUTTON2 | Вторая кнопка — основная кнопка. |
3 | MB_DEFBUTTON3 | Третья кнопка — основная кнопка. |
4 | MB_DEFBUTTON4 | Четвертая кнопка — основная кнопка. |
Группа флажков, указывающая на поведение диалогового окна
№ п.п. | Значения параметра | Описание |
1 | MB_APPLMODAL |
Пользователь должен ответить на окно сообщения перед продолжением работы в окне, идентифицированном параметром hWnd. Однако, пользователь может переходить в окна других приложений и работать в этих окнах. В зависимости от иерархии окон в приложения, пользователь может переходить в другие окна в пределах приложения. Все дочерние окна родителя окна сообщений автоматически заблокированы, но всплывающие окна — нет. Флажок MB_APPLMODAL — значение по умолчанию.
|
2 | MB_SYSTEMMODAL |
То же самое, что и MB_APPLMODAL, за исключением того, что окно сообщений имеет WS_EX_TOPMOST стиль, окно сообщений становится приоритетным окном. Используйте системно — модальные окна сообщений, чтобы уведомить пользователя относительно серьезных, потенциально вредящих ошибок, которые требуют непосредственного (немедленного) внимания (например, исчерпана память). Этот флажок не имеет никакого эффекта на взаимодействие с другими окнами.
|
3 | MB_TASKMODAL |
Тот же самое как MB_APPLMODAL за исключением того, что все окна верхнего уровня, принадлежащие к текущей задаче заблокированы, если hWnd параметр НУЛЕВОЙ (ПУСТОЙ).
|
Кроме того, можно определить следующие флажки:
№ п.п. | Значения параметра | Описание |
1 | MB_DEFAULT_DESKTOP_ONLY |
Окно сообщений не появляется. Задан по умолчанию рабочий стол, приложение может выполняться после того, как пользователь вызвал окно сообщений.
|
2 | MB_HELP |
Прибавляет кнопку Help (Справка) к окну сообщений. Выбор кнопки Help или нажима F1 генерирует справку.
|
3 | MB_RIGHT |
Текст сообщения и заголовка выровнен по правой стороне окна.
|
4 | MB_RTLREADING |
Отображает сообщение и текст заголовка (надписи) «справа налево» на еврейских и арабских языках. Окно симметрично центра поворачивается справа налево.
|
5 | MB_SETFOREGROUND |
Окно сообщений становится приоритетным окном. Внутренне Windows вызывает функцию SetForegroundWindow.
|
6 | MB_TOPMOST |
Окно сообщений создано со стилем окна WS_EX_TOPMOST. Пока не закроете, все время на экране, поверх всех окон.
|
7 | MB_SERVICE_NOTIFICATION |
Только для Windows NT: Функция отображает окно сообщений на текущем активном рабочем столе. Если этот флажок установлен, hWnd параметр должен быть НУЛЕВОЙ (ПУСТОЙ).
|
Пример (фрагмент программы по созданию диалогового окна сообщений):
procedure TForm1.Button1Click(Sender: TObject); var WND:HWND; lpText,lpCaption:PChar; Tip:integer; begin WND:=Form1.Handle; lpCaption:='Заголовок'; lpText:='Текст окна'; Tip:=MB_YESNO+MB_ICONINFORMATION+MB_DEFBUTTON1; Edit1.Text:=IntToStr(Tip); case MessageBox(Wnd,lpText,lpCaption,Tip) of ID;YES: Edit1.Text:='Выбрана кнопка OK'; IDNO : Edit1.Text:='Выбрана кнопка NO'; end; end;
2. Функция MessageBoxEx (Windows API)
Функция – отображает диалоговое окно с сообщением.
Синтаксис функции (Windows API):
function MessageBox (Wnd: HWND; lpText, lpCaption : PChar; uType : Cardinal; wLanguageId: Word) : integer;
Описание:
Функция используется, чтобы отобразить универсальное диалоговое окно сообщений с одной или более кнопками. Аналогична функции MessageBox, только добавлен еще один параметр wLanguageId, представляющий идентификатор языка, на котором будут отображаться надписи на кнопках, например:
$0409 English (United States);
$0419 Russian;
$0422 Ukrainian;
$0423 Belarusian;
$0407 German (Standard);
и т.д.
Пример:
procedure TForm3.Button1Click(Sender: TObject); var WND : HWND; lpText,lpCaption : PChar; Tip : Integer; wLanguageId : Word; begin WND:=Form3.Handle; lpCaption:='Заголовок'; lpText:='Текст окна'; Tip:=MB_YESNO+MB_ICONINFORMATION+MB_DEFBUTTON1; wLanguageId:=$0419; case MessageBoxEx(Wnd,lpText,lpCaption,Tip, wLanguageId) of IDYES: Edit1.Text:='Выбрана кнопка Да'; IDNO: Edit1.Text :='Выбрана кнопка Нет'; end; end;
3. Функция MessageBox (класса TApplication, модуля Forms)
Синтаксис функции:
function MessageBox(const Text, Caption: PChar; Flags: Longint = MB_OK): Integer;
В данной функции отсутствует первый параметр – маркер (дескриптор) окна владельца, в остальном используется аналогично приведенной выше.
procedure TForm1.Button1Click(Sender: TObject); var lpText,lpCaption : PChar; Tip : integer; begin lpText := 'Сообщение'; lpCaption := 'Заголовок'; Tip := MB_YESNO; with Application do begin MessageBox(lpText, lpCaption, Tip); end; end;
Результат выполнения программного кода
4. Функция MessageDlg (модуля Dialogs)
Синтаксис функции
function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word;
Описание
Функция MessageDlg используется для создания окна сообщений и получения на него реакции пользователя.
Параметр Msg – текст сообщения.
Параметр DlgType – определяет тип окна сообщений. Предлагаются следующие их типы:
Параметр Buttons определяет следующие типы кнопок:
type
TMsgDlgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToAll, mbYesToAll, mbHelp);
TMsgDlgButtons = set of TMsgDlgBtn;
Типы кнопок | Возвращаемое значение |
mbOK | mrOK |
mbCancel | mrCancel |
mbYes | mrYes |
mbNo | mrNo |
mbAbort | mrAbort |
mbRetry | mrRetry |
mbIgnore | mrIgnore |
mbAll | mrAll |
mbNoToAll | mrNoToAll |
mbYesToAll | mrYesToAll |
mbClose | mrClose |
Наборы кнопок также определены, как константы:
const
mbYesNoCancel = [mbYes, mbNo, mbCancel];
mbYesAllNoAllCancel = [mbYes, mbYesToAll, mbNo, mbNoToAll, mbCancel];
mbOKCancel = [mbOK, mbCancel];
mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];
mbAbortIgnore = [mbAbort, mbIgnore];
Примечание: 1. Если указываются кнопки, как элементы множества, то их необходимо писать в квадратных скобках. Например, [mbIgnore].
2. Если указывается набор кнопок, как константа, то писать нужно без скобок. Например, mbYesNoCancel.
Параметр HelpCtx определяет идентификатор для контекстной темы справки, которая должна появиться, когда пользователь нажимает кнопку справки или клавишу F1, в то время как отображено диалоговое окно. Если справка не нужна, то параметр равен нулю.
Фрагмент программы по использованию функции MessageDlg
procedure TForm1.Button1Click(Sender: TObject); begin if MessageDlg(‘Первое сообщение программы. Принимаете?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin MessageDlg('Второе сообщение программы.', mtInformation,[mbOk], 0); end; end;
5. Функция MessageDlgPos (модуля Dialogs)
Синтаксис функции
function MessageDlgPos(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): Word;
Описание
Отображает диалоговое окно сообщения в указанных аппаратных координатах устройства. Другие параметры функции аналогичны параметрам функции MessageDlg.
6. Функция MessageDlgPosHelp (модуля Dialogs)
Синтаксис функции
function MessageDlgPosHelp(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer; const HelpFileName: string): Word;
Описание
Отображает диалоговое окно сообщения, справка которого предоставлена в именованном файле справки (HelpFileName) с номером раздела HelpCtx. Выводится на экран с координатами X,Y левого верхнего угла окна относительно левого верхнего угла экрана.
Параметры (аргументы функции)
Msg |
Текст сообщения
|
DlgType |
Тип диалога
|
Buttons |
Типы отображаемых кнопок
|
HelpCtx |
Номер раздела справки, который необходимо отобразить
|
X |
Координата X окна
|
Y |
Координата Y окна
|
HelpFileName |
Имя файла справки, который должен быть показан, когда пользователь нажимает клавишу F1.
|
7. Процедура ShowMessage (модуля Dialogs)
Синтаксис процедуры
procedure ShowMessage(const Msg: string);
Описание
Процедура ShowMessage используется для отображения окна сообщений с кнопкой OK в центре рабочего стола.
Имя исполняемого файла приложения появляется как заголовок окна сообщений. Параметр Msg — строка, которая появляется в окне сообщений.
Если пользователь в окне сообщений нажмет клавиши Ctrl+C , текст сообщения копируется в буфер обмена.
Например,
procedure TForm3.Button1Click(Sender: TObject); var str1: string; begin Str1:='Процедура ShowMessage используется для отображения окна сообщений с кнопкой OK'+#13+ 'в центре рабочего стола. Имя исполняемого файла приложения появляется как'+#13+ 'заголовок окна сообщений. Параметр Msg - строка, которая появляется в окне'+#13+ 'сообщений. Если пользователь в окне сообщений нажмет клавиши Ctrl+C, текст'+#13+ 'сообщения копируется в буфер обмена.'; ShowMessage(str1); end;
8. Процедура ShowMessagePos (модуля Dialogs)
Синтаксис процедуры
procedure ShowMessagePos(const Msg: string; X, Y: Integer);
Описание
Процедура используется, чтобы отобразить простое окно сообщений с кнопкой OK в указанном координатами X, Y месте. Имя исполняемого файла приложения появляется как заголовок окна сообщений. Параметр Msg — строка, которая появляется в окне сообщений.
9. Процедура ShowMessageFmt (модуля Dialogs)
Синтаксис процедуры
procedure ShowMessageFmt(const Msg: string; Params: array of const);
Описание
Процедура используется, чтобы отобразить окно сообщений с кнопкой OK с параметрами. Имя исполняемого файла приложения появляется как заголовок окна сообщений. Параметр Msg — строка, которая появляется в окне сообщений.
Форматирование параметра Msg осуществляется в соответствии с правилами форматирования строк, применяемыми в функции format(). В параметр Msg передается шаблон сообщения с форматирующими символами, во второй параметр Param направляется массив с данными.
Пример,
procedure TForm3.Button1Click(Sender: TObject); var Msg : string; k1,k2,k3 : real; begin k1:=2000;//расстояние в км. k2:=20; //скорость км/час Msg:='Расстояние - %6.1f км,'+#13+'скорость - %3.1f км/час,'+#13+'время - %3.1f час'; ShowMessageFmt(Msg,[k1,k2,k1/k2]); end;
10. Функция CreateMessageDialog (модуля Dialogs)
Синтаксис функции
function CreateMessageDialog(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons): TForm;
Описание
Функция используется для создания собственного диалогового окна сообщений.
Параметр Msg – текст сообщения;
Параметр DlgType – тип диалогового окна;
Параметр Buttons – типы отображаемых кнопок.
Значения параметров Msg и DlgType подробно определены в пункте «3. Функция MessageDlg».
Если пользователь в окне сообщений нажмет клавиши Ctrl+C, текст сообщения копируется в буфер обмена.
Пример:
procedure TForm3.Button1Click(Sender: TObject); var fmt:TForm; begin fmt:=CreateMessageDialog('Привет, мир!',mtInformation,[mbOk]); fmt.ShowModal; end;
11. Функция TaskMessageDlg (модуля Vcl.Dialogs)
Синтаксис функции
function TaskMessageDlg(const Title, Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
Описание
Функция применяется для создания окна сообщения с заголовком Title и текстом сообщения Msg. Остальные параметры функции и их значения описаны выше при рассмотрении, например функции MessageDlg.
<b>Пример:</b> procedure TForm3.Button1Click(Sender: TObject); begin TaskMessageDlg('Заголовок','Текст сообщения',mtInformation, [mbOk,mbCancel], 0); end;
12. Функция FlashWindow (Windows API)
Синтаксис функции
function FlashWindow(Wnd:HWND; bInvert:boolean):boolean;
Описание
Функция применяется для мигания указанного окна.
Параметр Wnd – дескриптор окна программы;
Параметр bInvert определяет состояние окна, если bInvert:=true, то окно начнет мигать, если bInvert:=false, то окно перестанет мигать.
Эффект мигания окна используется для привлечения внимания пользователя на сообщение или некоторое событие.
Пример:
procedure TForm3.Button1Click(Sender: TObject); begin Timer1.Enabled:=true; //форма начнет мигать end; procedure TForm3.FormClick(Sender: TObject); begin Timer1.Enabled:=false; //форма перестанет мигать end; procedure TForm3.Timer1Timer(Sender: TObject); var Wnd : HWND; bInvert :boolean; begin WND:=Form3.Handle; FlashWindow(WND,true); end;
13. Функция MessageBeep (Windows API)
Синтаксис функции
function MessageBeep(uType:Cardinal):Boolean;
Описание
Функция применяется для проигрывания звукового сигнала.
Параметр uType – определяет тип звукового сигнала. Определены следующие типы сигналов:
№ | Значение | Тип звука |
1 | $FFFFFFFF | Стандартный звуковой гудок, используя компьютерный динамик. |
2 | MB_ICONASTERISK | SystemAsterisk |
3 | MB_ICONEXCLAMATION | SystemExclamation |
4 | MB_ICONHAND | SystemHand |
5 | MB_ICONQUESTION | SystemQuestion |
6 | MB_OK | SystemDefault |
Если функция не может запустить указанный звук, то она пытается запустить системный звук по умолчанию.
Пример:
procedure TForm2.Button1Click(Sender: TObject); begin MessageBeep(MB_ICONHAND); end;