![]() |
API DIALOGBOXPARAMW
Ich habe in meinem Projekt eine Unit mit einer Resourcendatei eingebunden.
Der Aufruf in dieser unit erfolgt so:
Code:
Das hat nun zur Folge, daß mein Hauptprogramm nicht mehr aufgerufen wird, sondern
function dlgfunctionW(hwnd: HWND; umsg: Cardinal; wparam: WPARAM; lparam: LPARAM): BOOL; stdcall;
begin DialogBoxParamW(hinstance, MAKEINTRESOURCEW(1000), 0, @dlgfunctionW, 0); end; nur noch der Dialog. Es soll aber beides laufen. Woran liegt das ? |
Re: API DIALOGBOXPARAMW
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: ![]() Grüße vom marabu |
Re: API DIALOGBOXPARAMW
Die Dialog-Prozedur ist ja fertig.
Nur mein Hauptformular Form1 wird nicht mitangezeigt. |
Re: API DIALOGBOXPARAMW
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 |
Re: API DIALOGBOXPARAMW
Zitat:
|
Re: API DIALOGBOXPARAMW
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. |
Re: API DIALOGBOXPARAMW
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 |
Re: API DIALOGBOXPARAMW
Zitat:
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:
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. |
Re: API DIALOGBOXPARAMW
Warum eigentlich diese Mischerei von VCL und nonVCL? Das sollte man möglichst vermeiden, da es sehr häufig nur zu Problemen führt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz