Thema: Delphi API DIALOGBOXPARAMW

Einzelnen Beitrag anzeigen

Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: API DIALOGBOXPARAMW

  Alt 23. Sep 2005, 16:19
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.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat