Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi CreateWindowEx liefert kein Handle (https://www.delphipraxis.net/101507-createwindowex-liefert-kein-handle.html)

Neutral General 14. Okt 2007 17:14


CreateWindowEx liefert kein Handle
 
Hi,

Sorry das ich nerve aber bevor ich hier irgendwas kaputt mache muss ich meine Wut in Form dieses Threads loswerden.

Ich erstelle mit CreateWindowEx ein Fenster:

Delphi-Quellcode:
var
  WindowClass: TWndClassEx = (style: 0;
                              lpfnWndProc: @WndProcDispatch;
                              cbClsExtra: 0;
                              cbWndExtra: 4;
                              hIcon: 0;
                              hCursor: 0;
                              lpszMenuName: nil;
                              hIconSm: 0;
                              );
begin
  WindowClass.cbSize := SizeOf(TWndClassEx);
  WindowClass.lpszClassName := 'wnd';
  WindowClass.hInstance := SysInit.hInstance;
  WindowClass.hbrBackground := GetSysColorBrush(COLOR_BTNFACE);
  RegisterClassEx(WindowClass);
end;
Delphi-Quellcode:
FHandle := CreateWindowEx(0,WindowClass.lpszClassname,WindowClass.lpszClassName,
                            WS_CAPTION or WS_SYSMENU or WS_SIZEBOX or WS_MAXIMIZEBOX or WS_MINIMIZEBOX,
                            FLeft,FTop,FWidth,FHeight,HWND_DESKTOP,0,hInstance,nil);
So und ich in FHandle steht nachher ne 0. GetLastError sagt das alles in Ordnung ist. Generell ist überall alles in Ordnung außer das ich kein Handle kriege. Und vor ner verdammten (sry) halben Stunde gings noch und ich hab doch gar nix gemacht man :evil:

Also ich könnt ja an die Decke springen. Jetzt da quasi alle meine Probleme gelöst waren geht nix mehr :wall:

HELFT MIR :wall: :evil: -.-

Gruß
Neutral General

turboPASCAL 14. Okt 2007 17:31

Re: CreateWindowEx liefert kein Handle
 
Delphi-Quellcode:
var
  WindowClass: TWndClassEx = (style: 0; // <--<< sollte hier nich noch was hin ?
                              lpfnWndProc: @WndProcDispatch;
                              cbClsExtra: 0;
                              cbWndExtra: 4; // <--<< was 'n das ???
                              hIcon: 0;
                              hCursor: 0;
                              lpszMenuName: nil;
                              hIconSm: 0;
                              );
begin
  WindowClass.cbSize := SizeOf(TWndClassEx);
  WindowClass.lpszClassName := 'wnd';
  WindowClass.hInstance := SysInit.hInstance;
  WindowClass.hbrBackground := GetSysColorBrush(COLOR_BTNFACE);
  RegisterClassEx(WindowClass);
end;
Was gibt dir denn RegisterClassEx als Result zurück ?

Nur mal so nebenbei:
Delphi-Quellcode:
FHandle := CreateWindowEx(0,WindowClass.lpszClassname,WindowClass.lpszClassName, ...
Klassenname und Fenstername sollen die selben sein ?

Neutral General 14. Okt 2007 17:33

Re: CreateWindowEx liefert kein Handle
 
Hi,

RegisterClassEx liefert ne Zahl <> 0.

Ja das die Caption = dem Klassenname ist, ist schon richtig. Dürfte aber auch nichts ausmachen.

turboPASCAL 14. Okt 2007 17:50

Re: CreateWindowEx liefert kein Handle
 
Zitat:

Return Values

If the function succeeds, the return value is an atom that uniquely identifies the class being registered.

If the function fails, the return value is zero. To get extended error information, call GetLastError.
;)

Delphi-Quellcode:
var
  wc : TWndClassEx = (
    cbSize       : SizeOf(TWndClassEx);
    Style        : CS_HREDRAW or CS_VREDRAW;
    lpfnWndProc  : @WndProc;
    cbClsExtra   : 0;
    cbWndExtra   : 0;
    hbrBackground : COLOR_APPWORKSPACE;
    lpszMenuName : nil;
    lpszClassName : ClassName;
    hIconSm      : 0;
  );

Neutral General 14. Okt 2007 17:54

Re: CreateWindowEx liefert kein Handle
 
Zitat:

Zitat von turboPASCAL
Zitat:

Return Values

If the function succeeds, the return value is an atom that uniquely identifies the class being registered.

If the function fails, the return value is zero. To get extended error information, call GetLastError.
;)

Delphi-Quellcode:
var
  wc : TWndClassEx = (
    cbSize       : SizeOf(TWndClassEx);
    Style        : CS_HREDRAW or CS_VREDRAW;
    lpfnWndProc  : @WndProc;
    cbClsExtra   : 0;
    cbWndExtra   : 0;
    hbrBackground : COLOR_APPWORKSPACE;
    lpszMenuName : nil;
    lpszClassName : ClassName;
    hIconSm      : 0;
  );

Was willst du mir damit sagen? Es hat ja noch geklappt vorher.. ich hab ja ein ganzes Programm schon geschrieben gehabt. Ich weiß was in das TWndClassEx Record rein muss. cbWndExtra ist dafür das ich mit

Delphi-Quellcode:
SetWindowLong(FHandle,GWL_USERDATA,Data);
noch Daten anhängen kann. Um genau zu sein einen Pointer. Und das hat ja bisher auch immer alles geklappt. Ich kapiers einfach nicht.

Ach ja: Das angegebene WndProc springt sogar an. Es erhält nur keine WM_CREATE Message. Mit dem WindowHandle was ich da bekomme kann ich sogar Nachrichten an das Fenster senden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 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