Создаем свое окно сообщения
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), со знаком вопроса, поверх всех окон.
Комментарии