Следующая статья объясняет, как создать диалоговое окно сообщения, которое будет содержать свою иконку из ресурсов.
В 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), со знаком вопроса, поверх всех окон.
|