Da ich gerade selbst so eine Messagebox brauche habe ich mich damit ein wenig beschäftigt. Beim stöbern bin ich nun über diesen Thread gestolpert und wollte mal meine Lösung hier mit vorstellen.
Delphi-Quellcode:
function MyMessageBox(hWnd: HWND; Text, Caption:
String; IconID: DWORD;
const Buttons: Cardinal = MB_OK): Integer;
var MsgInfo: TMsgBoxParams;
begin
With MsgInfo
do
begin
cbSize := SizeOf(TMsgBoxParams);
dwContextHelpId := 0;
dwLanguageId := LANG_NEUTRAL;
dwStyle := Buttons
or MB_USERICON
or MB_APPLMODAL;
hInstance := GetWindowLong(hWnd, GWL_HINSTANCE);
hwndOwner := hWnd;
lpfnMsgBoxCallback :=
nil;
lpszCaption := @Caption[1];
lpszIcon := MAKEINTRESOURCE(IconID);
lpszText := @Text[1];
end;
Result := Integer(MessageBoxIndirect(MsgInfo));
end;
// Aufruf z. B.:
procedure Foo;
const MyIconID = 1;
begin
if MyMessageBox(
Handle, '
Grafik konnte nicht erzeugt werden.'#13#10+
'
Fortfahren ?', '
Info:', MyIconID, MB_YESNO) = IDOK
then ...
else...
end;
// "MyIconID" bzw. die IconID bezieht sich auf ein Icon in der Resource
Der kleine Vorteil gegenüber der obigen ist das setzen der Messagebox-Buttons wie BM_OK, MB_RETRYCANCEL usw.