Delphi-Quellcode:
program Dialogtest;
uses
Windows,
Messages;
{$R main.res}
function DlgProc(hwnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL; stdcall;
begin
Result := True;
case uMsg of
WM_CLOSE:
begin
// Cleanup hier, danach EndDialog() ...
EndDialog(hwnd, 0);
end;
WM_COMMAND: case LOWORD(wParam) of
IDOK,
IDCANCEL: // Abbrechen-Button
SendMessage(hwnd, WM_CLOSE, 0, 0);
end;
else
Result := False;
end;
end;
function ConfigDialog:Integer; // Korrigiert auf Hinweis von Luckie
begin
result := DialogBox(hInstance, MAKEINTRESOURCE(101), GetForegroundWindow, @DlgProc);
end;
begin
ConfigDialog;
end.
Ich habe mit obigem Code keine Probleme. GetForegroundWindow() bei DialogBox() könnte u.U. Probleme bereiten.
Ansonsten solltest du besser darauf achten, daß die Typen auch stimmen. Es hat was mit der Wartbarkeit des Code zu tun!
(Delphi 4/5 Pro auf
W2K SP4)
Übrigens, Optimierungen an/aus hat u.U. noch andere Effekte. Bei mir hat das schon zu bösen Fehlern geführt. Sie waren auch reproduzierbar und nur mit dem Umstellen der Option abstellbar.
[Korrigiert auf Hinweis von Luckie]