![]() |
Re: CreateWindowEx, Parent + Child erzeugen
Wie und wo rufst du das auf ?
Ist oder wird das eine nonVCL oder eine VCL Application ? oder hänge das Projekt mal als zip an. |
Re: CreateWindowEx, Parent + Child erzeugen
Es ist eine VCL Anwendung!
Habe es jetzt aber geschafft! Habe nochmal deinen Code komplett kopiert und neu eingefügt. Auch waren meine Funktionen wie MainWndProc nicht Global erreichbar. Ich bekomme zwar immer noch den Error 120 nach dem erzeugen des Parents, aber es werden Parent und Child erzeugt! Auch kann ich nun eine Funktion statt der Prozedur verwenden! Danke! :lol: Anscheinend hat es auch etwas mit dem zu tun:
Delphi-Quellcode:
Wenn ich Result := 0 zurück gebe werden Childs nicht erzeugt!
function ChildWndProc(hWindow: HWND; Msg: UINT;
wParam: wParam; lParam: lParam): HRESULT; stdcall; begin Result := 1; end; |
Re: CreateWindowEx, Parent + Child erzeugen
Sehe gerade noch einen Fehler:
Delphi-Quellcode:
// ...
with wb do begin lpszClassName := 'MyChild'; lpfnWndProc := @ChildWndProc; Style := CS_VREDRAW or CS_HREDRAW; //hInstance := hMyChild; // <--<< das wird nix hInstance := hInstance; |
Re: CreateWindowEx, Parent + Child erzeugen
Hi,
also das mit Zitat:
Bei RegisterClass habe ich auch hMyChild. Habe jetzt bei 4 Windows 4 verschiedene hInstance und es geht. Jedoch habe ich noch eine kleine Frage: Wie schließe ich das Fenster wieder, dass mit CreateWindowEx eruegt wurde? Habe es versucht mit FindWindow das Handle zu bekommen und mit: Zitat:
Es wird auch geschlossen, aber leider auch meine Anwendung!? |
Re: CreateWindowEx, Parent + Child erzeugen
Hallo,
ich habe zu RegisterClass und Unregister nochmal eine Frage: Ich erzeuge so mein Fenster:
Delphi-Quellcode:
Das Fenster wird erzeugt und ich bekomme Aufrufe in der angegebenen Funktion: MainWndProc.
zeromemory(@wa, sizeof(wa)); // <--<<
with wa do begin lpszClassName := 'Mein_Fenster'; lpfnWndProc := @MainWndProc; Style := CS_VREDRAW or CS_HREDRAW; hInstance := hInstance;//hMain; hIcon := 0;//LoadIcon(0, IDI_APPLICATION); hCursor := 0;//LoadCursor(0, IDC_ARROW); hbrBackground := (COLOR_WINDOW + 1); lpszMenuName := nil; cbClsExtra := 0; cbWndExtra := 0; end; Windows.RegisterClass(wa); hMainFenster := CreateWindowEx(WS_EX_TOPMOST Or WS_EX_TOOLWINDOW, wa.lpszClassName, '', WS_POPUP or windows.ws_visible, // <--<< 0, 0, 0, 0, // <--<< 0, 0, hInstance, nil); Wie beende ich das nun wieder. Ich habe es so versucht:
Delphi-Quellcode:
Jedoch scheint es so das immer noch Aufrufe in meine MainWndProc Funktion rein kommen.
if hMainFenster <> 0 then
DestroyWindow(hMainFenster); if GetClassInfo(HInstance, wa.lpszClassName, TempClass) then Windows.UnregisterClass(wa.lpszClassName,hInstance); zeromemory(@wa, sizeof(wa)); Wie kann ich das verhindern, oder ist wenn ich das Fenster schließe auch sichergestellt das die Funktion MainWndProc nicht mehr verfügbar ist? |
Re: CreateWindowEx, Parent + Child erzeugen
Zitat:
|
Re: CreateWindowEx, Parent + Child erzeugen
Weil das erzeugte "unsichtbare" Fenster für einen Shell-Ersatz dient.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 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