Окна сообщений

Функции сообщений в Delphi

При разработке программ автоматизированного проектирования в 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)

Функция – отображает диалоговое окно с сообщением.

1_MessageBox

Синтаксис функции (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_ICONEXCLAMATIONMB_ICONWARNING 2_Icon В окне сообщений появляется значок восклицательного знака
2 MB_ICONINFORMATIONMB_ICONASTERISK 3_Icon В окне сообщений появляется значок, состоящий из символа I нижнего регистра в круге.
3 MB_ICONQUESTION 4_Icon В окне сообщений появляется вопросительный знак в круге.
4 MB_ICONSTOPMB_ICONERRORMB_ICONHAND 5_Icon В окне сообщений появляется знак Stop

Группа флажков, указывающая на основную кнопку

№ п.п. Значения параметра Описание
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 генерирует справку.
6_Icon
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)

Функция – отображает диалоговое окно с сообщением.

MessageBoxEX

Синтаксис функции (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;

Результат выполнения программного кода

MessageBox_

4. Функция MessageDlg (модуля Dialogs)

Синтаксис функции

function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word;

Описание

Функция MessageDlg используется для создания окна сообщений и получения на него реакции пользователя.

10

Параметр Msg – текст сообщения.

Параметр DlgType – определяет тип окна сообщений. Предлагаются следующие их типы:

№ п.п. Значение Изображение Описание
1 mtWarning 11
окно сообщений, содержащее желтый символ восклицательного знака.
2 mtError 12
окно сообщений, содержащее красный знак ограничителя.
3 mtInformation 13
окно сообщений, содержащее синюю букву «i».
4 mtConfirmation 14
окно сообщений, содержащее синий вопросительный знак.
5 mtCustom 15
окно сообщений, не содержащее растрового изображения. Заголовок окна сообщений — имя исполняемого файла приложения.

Параметр 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;

Showmessage

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;

ShowmessageFmt

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;

CreateMessageDialog

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;

TaskMessageDlg

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;

Александр Малыгин

Объект обсуждения - программное обеспечение для выполнения автоматизированного конструкторского и технологического проектирования, разработки управляющих программ, вопросы, связанные с разработкой прикладных САПР.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *