Zitat von
bioser:
Ich habe in meinem Projekt ein Hauptformular und eine
unit mit der DialogBox.
In dieser
unit rufe ich die Box im begin...end-Teil so auf:
DialogBoxParamW(hinstance, MAKEINTRESOURCEW(1000), 0, @dlgfunctionW, 0);
Beim Starten erscheint aber nur die DialogBox, ohne das Formular.
Für mich sah das aus wie die Deklaration der Funktion dlgfunctionW, die sich selbst wieder als Dialogprozedur übergibt.
Erzeuge deinen Dialog mit CreateDialogParamW im FormShow-Ereignis deines Hauptprogramms und teile dies der Anwendung mit, also etwa so (ungetestet):
Wird an die Eigenschaft DialogHandle etwas zugewiesen dann prüft die Anwendung in der Meldungsschleife selbst mit IsDialogMessage, ob die Meldung für den Dialog bestimmt ist.
//EDIT:
Nachgelesen:
Zitat:
Verwenden Sie DialogHandle bei der Anzeige eines nichtmodalen Dialogfeldes, das über die
API-Funktion CreateDialog erzeugt wurde. Wenn Sie der Eigenschaft DialogHandle das
Handle des nichtmodalen Dialogfeldes zuweisen, können im Dialogfeld Meldungen aus der Meldungsschleife der Anwendung angezeigt werden.,
Das
Handle des nichtmodalen Dialogfeldes muss dann an die Eigenschaft DialogHandle übergeben werden, wenn dieses eine Aktivierungsbotschaft empfängt (WM_NCACTIVATE). Wenn das Dialogfeld eine Deaktivierungsbotschaft erhält, muss DialogHandle auf den Wert 0 gesetzt werden.
-> die Dialogprozedur erweitern um die Meldung WM_NCACTIVATE.
Delphi-Quellcode:
procedure dlgfunctionW(...);
begin
...
case ... of
...
WM_NCACTIVATE:
if wParam <> 0 then
Application.DialogHandle := hDlg
else
Application.DialogHandle := 0;
...
end;
end;
Delphi-Quellcode:
begin
CreateDialogParamW(...);
end.