Карта сайтаСсылкиКонтакты

Создаем свое окно сообщения

PDF Печать
Статьи

Следующая статья объясняет, как создать диалоговое окно сообщения, которое будет содержать свою иконку из ресурсов.
В API Windows есть следующие функции:


BOOL API MessageBoxIndirect(LPMSGBOXPARAMS lpMsgBoxParams);

Структура lpMsgBoxParams выглядит следующим образом:


typedef struct { 
   UINT      cbSize; 
   HWND      hwndOwner; 
   HINSTANCE hInstance; 
   LPCSTR    lpszText; 
   LPCSTR    lpszCaption; 
   DWORD     dwStyle; 
   LPCSTR    lpszIcon; 
   DWORD     dwContextHelpId; 
   MSGBOXCALLBACK lpfnMsgBoxCallback; 
   DWORD     dwLanguageId; 
}

Переменной lpszIcon может быть передано название ресурса. Далее функция будет выглядеть следующим образом:


uses
   Windows;

function ShowMessageDlgEx(const AText, ACaption: string;
   const ResID: Integer; Style: Cardinal = MB_OK): Cardinal;
var
   lpMsgBoxParams : MsgBoxParams;
begin
   with lpMsgBoxParams do
   begin
     cbSize             := SizeOf(lpMsgBoxParams);
     hwndOwner          := Application.Handle;
     hInstance          := SysInit.hInstance;
     lpszText           := PChar(AText);
     lpszCaption        := PChar(ACaption);
     dwStyle            := MB_USERICON or MB_TOPMOST or Style;
     lpszIcon           := MAKEINTRESOURCE(ResID);
     dwContextHelpID    := 0;
     lpfnMsgBoxCallback := nil;
     dwLanguageId       := LANG_ENGLISH;
   end;

   Result := Cardinal(MessageBoxIndirect(lpMsgBoxParams));
end;

Процедуре должно быть передано по крайней мере три параметра. Это текст сообщения, заголовок и имя ресурса.


procedure TForm1.Button1Click(Sender: TObject);
begin
   ShowMessageDlgEx('Проверка работы окна', 'Информация', 101);
end;

Предварительно, нужно включить иконку под именем 101 в файл ресурсов с проектом. Иконка должна иметь размер 32х32 пиксела.

Четвертый параметр является необязательным. Он контролирует, какие кнопки будут отображаться в окне сообщения. Затем функция возвращает на какую кнопку нажал пользователь.


if ShowMessageDlgEx(Привет, как дела?', 'Информация', 101, MB_YESNO) = IDYES then
   ShowMessageDlgEx('Прекрасно!', 'Информация', 101);
else
   ShowMessageDlgEx(':(', 'Информация', 101);
end;

Внешний вид окна может быть изменен при помощи переменной dwStyle.

Пример


dwStyle:= MB_OKCANCEL or MB_ICONQUESTION or MB_TOPMOST;

Теперь окно отображается с двумя кнопками (OK и Cancel), со знаком вопроса, поверх всех окон.


 

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


Защитный код
Обновить