AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

API DIALOGBOXPARAMW

Ein Thema von bioser · begonnen am 22. Sep 2005 · letzter Beitrag vom 23. Sep 2005
Antwort Antwort
bioser

Registriert seit: 30. Aug 2005
140 Beiträge
 
#1

API DIALOGBOXPARAMW

  Alt 22. Sep 2005, 19:53
Ich habe in meinem Projekt eine Unit mit einer Resourcendatei eingebunden.
Der Aufruf in dieser unit erfolgt so:


Code:
function dlgfunctionW(hwnd: HWND; umsg: Cardinal; wparam: WPARAM; lparam: LPARAM): BOOL; stdcall;

begin

DialogBoxParamW(hinstance, MAKEINTRESOURCEW(1000), 0, @dlgfunctionW, 0);

end;
Das hat nun zur Folge, daß mein Hauptprogramm nicht mehr aufgerufen wird, sondern
nur noch der Dialog. Es soll aber beides laufen. Woran liegt das ?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: API DIALOGBOXPARAMW

  Alt 22. Sep 2005, 20:06
Hi bioser,

du zeigts eine modale dialog box an und gibst die function, mit der du die Anzeige realisierst, als message handler für diese box an...
Wie eine DialogProc aussehen muss, kannst du u.a. hier sehen: klick

Grüße vom marabu
  Mit Zitat antworten Zitat
bioser

Registriert seit: 30. Aug 2005
140 Beiträge
 
#3

Re: API DIALOGBOXPARAMW

  Alt 22. Sep 2005, 21:47
Die Dialog-Prozedur ist ja fertig.
Nur mein Hauptformular Form1 wird nicht mitangezeigt.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: API DIALOGBOXPARAMW

  Alt 23. Sep 2005, 06:01
Sorry, ich habe bei deinem gezeigten Code nicht erkannt, dass die Signatur und der code block gar nicht zusammen gehören.

Wenn deine Form1 nicht angezeigt wird, dann sicher deshalb, weil dein message handler für die dialog box nicht korrekt arbeitet.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

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

Re: API DIALOGBOXPARAMW

  Alt 23. Sep 2005, 06:49
Zitat von bioser:
Code:
function [b]dlgfunctionW[/b](hwnd: HWND; umsg: Cardinal; wparam: WPARAM; lparam: LPARAM): BOOL; stdcall;
begin
DialogBoxParamW(hinstance, MAKEINTRESOURCEW(1000), 0, @[b]dlgfunctionW[/b], 0);
end;
Hast du das wirklich so gemacht, oder ist's ein Tippfehler? Ansonsten kann es nicht funktionieren.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
bioser

Registriert seit: 30. Aug 2005
140 Beiträge
 
#6

Re: API DIALOGBOXPARAMW

  Alt 23. Sep 2005, 08:19
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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: API DIALOGBOXPARAMW

  Alt 23. Sep 2005, 10:12
Der Aufruf im Initialisierungsabschnitt der Unit ist vielleicht etwas unglücklich. Immerhin wird dieser Code ausgeführt, bevor dein Hauptformular angezeigt wird. Dazu kommt noch, dass die Box modal angezeigt wird.

marabu
  Mit Zitat antworten Zitat
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, 15: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
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: API DIALOGBOXPARAMW

  Alt 23. Sep 2005, 19:32
Warum eigentlich diese Mischerei von VCL und nonVCL? Das sollte man möglichst vermeiden, da es sehr häufig nur zu Problemen führt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz