Mit der Funktion
hDialog := CreateDialog(hInstance, MAKEINTRESOURCE(100), 0, @dlgfunc);
Laut MSDN nutzt diese Funktion aber auch nur
lParam angeben, der dann an Ihre Dialog-Nachrichtenfunktion weitergegeben wird:
hDialog := CreateDialogParam(hInstance, MAKEINTRESOURCE(100), 0, @dlgfunc, 0);
Wenn Sie eine dieser Funktionen benutzen, dann benötigen Sie auch eine
TranslateMessage" oder "DispatchMessage" bearbeitet werden.
while GetMessage(msg,0,0,0) do begin IsDialogMessage(hDialog,msg); end;
Wenn Sie in Ihrem Programm die Nachrichten "WM_USER" und "WM_USER + 1" benutzen, könnten u.U. Probleme auftreten, weil "IsDialogMessage" in einigen Fällen die Nachrichten "DM_GETDEFID" und "DM_SETDEFID" senden kann. Diese besitzen die selben numerischen Werte wie die o.g. Nachrichten, so dass es zu Überschneidungen und damit verbundenen Problemen kommt, wenn Ihr Programm z.B. eine Bearbeitung von "WM_USER + 1" vorsieht.
Wenn Sie sich für diese Form des Dialogaufrufs entscheiden, müssen Sie sich im Klaren sein, dass Sie die Verantwortung für die Verarbeitung aller Nachrichten haben. Das betrifft alle Controls, die Sie auf dem Dialog platziert haben usw. Oder wenn Sie z.B. Shortcuts aus den Ressourcen laden und bearbeiten wollen, dann bleibt Ihnen leider nichts anderes übrig, als diesen Weg zu wählen.
Nach dem Verlassen der Nachrichtenschleife sollten Sie auch das Dialog-Handle mit der Funktion "DestroyWindow" freigeben:
DestroyWindow(hDialog);