AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi CreateWindowEx, Parent + Child erzeugen
Thema durchsuchen
Ansicht
Themen-Optionen

CreateWindowEx, Parent + Child erzeugen

Ein Thema von schwa226 · begonnen am 12. Jul 2009 · letzter Beitrag vom 4. Jan 2010
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#11

Re: CreateWindowEx, Parent + Child erzeugen

  Alt 12. Jul 2009, 11:28
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.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#12

Re: CreateWindowEx, Parent + Child erzeugen

  Alt 12. Jul 2009, 11:42
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!

Anscheinend hat es auch etwas mit dem zu tun:
Delphi-Quellcode:
function ChildWndProc(hWindow: HWND; Msg: UINT;
    wParam: wParam; lParam: lParam): HRESULT; stdcall;
begin
  Result := 1;
end;
Wenn ich Result := 0 zurück gebe werden Childs nicht erzeugt!
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#13

Re: CreateWindowEx, Parent + Child erzeugen

  Alt 12. Jul 2009, 11:51
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;
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#14

Re: CreateWindowEx, Parent + Child erzeugen

  Alt 15. Jul 2009, 06:19
Hi,

also das mit
Zitat:
//hInstance := hMyChild; // <--<< das wird nix
hInstance := hInstance;
habe ich probiert. Da bleibt mir dann das Parent leer. Letzten Error habe ich jetzt noch nicht überprüft.

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:
SendMessage(h, WM_SYSCOMMAND, SC_CLOSE, 0);
das Handle zu schließen.

Es wird auch geschlossen, aber leider auch meine Anwendung!?
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#15

Re: CreateWindowEx, Parent + Child erzeugen

  Alt 4. Jan 2010, 11:06
Hallo,

ich habe zu RegisterClass und Unregister nochmal eine Frage:

Ich erzeuge so mein Fenster:
Delphi-Quellcode:
      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);
Das Fenster wird erzeugt und ich bekomme Aufrufe in der angegebenen Funktion: MainWndProc.

Wie beende ich das nun wieder.

Ich habe es so versucht:
Delphi-Quellcode:
  if hMainFenster <> 0 then
    DestroyWindow(hMainFenster);

  if GetClassInfo(HInstance, wa.lpszClassName, TempClass) then
    Windows.UnregisterClass(wa.lpszClassName,hInstance);
zeromemory(@wa, sizeof(wa));
Jedoch scheint es so das immer noch Aufrufe in meine MainWndProc Funktion rein kommen.

Wie kann ich das verhindern, oder ist wenn ich das Fenster schließe auch sichergestellt das die Funktion MainWndProc nicht mehr verfügbar ist?
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: CreateWindowEx, Parent + Child erzeugen

  Alt 4. Jan 2010, 11:19
Zitat von schwa226:
Es ist eine VCL Anwendung!
Und warum mischt du dann VCL und nonVCL? Das geht meistens schief.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#17

Re: CreateWindowEx, Parent + Child erzeugen

  Alt 4. Jan 2010, 13:05
Weil das erzeugte "unsichtbare" Fenster für einen Shell-Ersatz dient.
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 08:47 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