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 1400 Error beim Erstellen eines Fensters via API (https://www.delphipraxis.net/162123-1400-error-beim-erstellen-eines-fensters-via-api.html)

Mangafreak1995 8. Aug 2011 01:18

1400 Error beim Erstellen eines Fensters via API
 
Hey Leute,

wie ihr evtl. an der Zeit seht sitze ich schon länger an dem Problem.
Ich lasse mir via API ein Fenster erstellen bzw. versuche es.
Ich kriege immer die Nachricht : 'Fenster konnte nicht erzeugt werden 1400' bei folgendem Code :
Delphi-Quellcode:
procedure TSForm.Show();
var msg : TMsg;
begin
  with self.windowClass do // private und vom Typ TWndClass
  begin
    Style:= CS_HREDRAW or CS_VREDRAW;
    lpfnWndProc:= @TSForm.WindowProcedure; // protected und mit stdcall versehen
    cbClsExtra:= 0;
    cbWndExtra:= 0;
    hbrBackground:= COLOR_APPWORKSPACE;
    lpszMenuName:= nil;
    lpszClassName:= 'TestSWindow';
    hInstance := hInstance;
    hIcon := LoadIcon(0, IDI_WINLOGO);
    hCursor := LoadCursor(0, IDC_ARROW);
  end;
  if RegisterClass(self.windowClass) = 0 then
    ShowMessage('Fensterklasse konnte nicht registriert werden ' + IntToStr(GetLastError));
  self.hwnd {private HWND} := CreateWindow('TestSWindow', PChar(self.appName) {public und vom Typ String}, WS_CAPTION or WS_VISIBLE or WS_SYSMENU, (GetSystemMetrics(SM_CXSCREEN) - self.w {private, Integer und im Create auf 400 gesetzt}) div 2, (GetSystemMetrics(SM_CYSCREEN) - self.h{private, Integer und im Create auf 500 gesetzt}) div 2, self.w, self.h, 0, 0, hInstance, nil);
  if self.hwnd = 0 then
    ShowMessage('Fenster konnte nicht erzeugt werden ' + IntToStr(GetLastError));
  // is ja egal ... komm ich nicht mal hin
  ExitCode := msg.wParam;
end;
Ich konnte leider keine andere Lösungen finden wo Delphi und die API genutzt wird. Auch die *Ex-Variante funktioniert nicht und wirft den gleichen Fehler.

Ich rufe das ganze dann so auf:
Delphi-Quellcode:
program API;

uses
  USForm in 'USForm.pas';

var win : TSForm;
begin
  win := TSForm.Create();
  win.appName := 'WinAPITestApp';
  win.Show();
  win.Close(); // unregistriert die Klasse
end.
Ich hoffe ihr könnt mir da irgendwie helfen :(

himitsu 8. Aug 2011 06:15

AW: 1400 Error beim Erstellen eines Fensters via API
 
Zitat:

Zitat von GetLastError 1400
Invalid window handle.

Tja, da hast du wohl einen falschen Parameter angegeben.


um es mal etwas verständlicher zu machen:
http://msdn.microsoft.com/en-us/library/ms681385.aspx (das wurde übrigens direkt in MSDN-Library durchsuchenGetLastError verlinkt)
oder man läßt es sich übersetzen
Delphi-Referenz durchsuchenSysErrorMessage
oder gleich anzeigen
Delphi-Referenz durchsuchenRaiseLastOSError


RegisterClass ... Und was macht man, wenn man mal zwei Fenster dieser Art anzeigen möchte?

Mangafreak1995 8. Aug 2011 08:43

AW: 1400 Error beim Erstellen eines Fensters via API
 
Zitat:

Zitat von himitsu (Beitrag 1115572)
Zitat:

Zitat von GetLastError 1400
Invalid window handle.

Tja, da hast du wohl einen falschen Parameter angegeben.

um es mal etwas verständlicher zu machen:
http://msdn.microsoft.com/en-us/library/ms681385.aspx (das wurde übrigens direkt in MSDN-Library durchsuchenGetLastError verlinkt)
oder man läßt es sich übersetzen
Delphi-Referenz durchsuchenSysErrorMessage
oder gleich anzeigen
Delphi-Referenz durchsuchenRaiseLastOSError

RegisterClass ... Und was macht man, wenn man mal zwei Fenster dieser Art anzeigen möchte?

Ich habe schon vorher die MSDN konsultiert, aber die gibt mir leider nur das gleiche wie die SysErrorMessage(GetLastError)-Funktion.

Das Problem mit dem doppelten Fenster ist geklärt, weil ich nur ein Fenster und einen Mutex verwende. Aber danke für den Hinweis. Werde ich mir merken ;)

himitsu 8. Aug 2011 09:13

AW: 1400 Error beim Erstellen eines Fensters via API
 
Zitat:

Zitat von Mangafreak1995 (Beitrag 1115586)
Ich habe schon vorher die MSDN konsultiert, aber die gibt mir leider nur das gleiche wie die SysErrorMessage(GetLastError)-Funktion.

Und demnach stimmt wohl irgendein Handle (HWND) in Self.windowClass oder in den Parametern des CreateWindow nicht.

Luckie 8. Aug 2011 09:28

AW: 1400 Error beim Erstellen eines Fensters via API
 
Vermischt du da irgend wie VCL und nonVCL?

Mangafreak1995 8. Aug 2011 09:32

AW: 1400 Error beim Erstellen eines Fensters via API
 
Zitat:

Zitat von himitsu (Beitrag 1115592)
Zitat:

Zitat von Mangafreak1995 (Beitrag 1115586)
Ich habe schon vorher die MSDN konsultiert, aber die gibt mir leider nur das gleiche wie die SysErrorMessage(GetLastError)-Funktion.

Und demnach stimmt wohl irgendein Handle (HWND) in Self.windowClass oder in den Parametern des CreateWindow nicht.

Deswegen bin ich ja hier. Ich weiß nicht welcher Parameter falsch ist.

Zitat:

Zitat von Luckie (Beitrag 1115594)
Vermischt du da irgend wie VCL und nonVCL?

Ich hoffe nicht. Mehr wie ihr schon wisst, ist da nicht. Nur die 2 Dateien (teilweilse oben gepostet) existieren und nur "Windows, Messages, inifiles, SHFolder, SysUtils" sind in der externen Uses-Liste.

EWeiss 8. Aug 2011 09:56

AW: 1400 Error beim Erstellen eines Fensters via API
 
grmmm... :gruebel:

Du erstellst ein Window mit einem Handle das schon existiert?
self.hwnd

und auch noch mit einer existierenden Classe?
self.windowClass

gruss

Mangafreak1995 8. Aug 2011 10:02

AW: 1400 Error beim Erstellen eines Fensters via API
 
Zitat:

Zitat von EWeiss (Beitrag 1115599)
grmmm... :gruebel:

Du erstellst ein Window mit einem Handle das schon existiert?
self.hwnd

und auch noch mit einer existierenden Classe?
self.windowClass

gruss

Die werden in der Show-Procedure erst initialisiert.

EWeiss 8. Aug 2011 10:05

AW: 1400 Error beim Erstellen eines Fensters via API
 
Für mich sieht das aus wie Luckie schon sagt
Da wird versucht von TForm (existierendes Window) ein neues Window zu erstellen.

Kann mit den bißchen Quelltext ohne zu sehen wie die Classe aufgebaut ist.
Auch nur Raten.

gruss

Mangafreak1995 8. Aug 2011 10:13

AW: 1400 Error beim Erstellen eines Fensters via API
 
Zitat:

Zitat von EWeiss (Beitrag 1115603)
Für mich sieht das aus wie Luckie schon sagt
Da wird versucht von TForm (existierendes Window) ein neues Window zu erstellen.

Kann mit den bißchen Quelltext ohne zu sehen wie die Classe aufgebaut ist.
Auch nur Raten.

gruss

Entschuldigung, die Klasse erbt von gar nichts. Definition:
Delphi-Quellcode:
type
  TSForm = class
  private
    hwnd : HWND;
    windowClass : TWndClass;
    w, h : Integer;
    function getAppData() : String;
    procedure init();
    procedure finale();
    procedure keypress(c : Char);
    procedure ShowError(ErrorText: PChar);
  published
    function WindowProcedure(HWND: HWND; uMsg: UINT; wParam: wParam; lParam: lParam): lResult; stdcall;
  public
    appName : String;
    constructor Create();
    procedure Show();
    destructor Close();
  end;

EWeiss 8. Aug 2011 10:18

AW: 1400 Error beim Erstellen eines Fensters via API
 
Wenn du dich ja schon in der Classe befindest
procedure TSForm.Show();

warum dann noch überall self. ?
mach das mal weg und versuche es einfach mal mit hwnd :=

also alle self.xx entfernen.

gruss

DeddyH 8. Aug 2011 10:25

AW: 1400 Error beim Erstellen eines Fensters via API
 
Weshalb? Ein Verweis auf Self ist zwar meist nicht nötig, kann aber der besseren Lesbarkeit dienen und stört eigentlich auch nicht (man hat nur mehr Tipparbeit ;)).

Mangafreak1995 8. Aug 2011 10:28

AW: 1400 Error beim Erstellen eines Fensters via API
 
Ich war auch erst verwirrt warum, aber auch das hilft nichts :( (1400)

Ich bleibe bei meiner self.*-Variante, weil ich dann doppelten Bezeichnern aus den Weg gehe.

EWeiss 8. Aug 2011 10:29

AW: 1400 Error beim Erstellen eines Fensters via API
 
Zitat:

Zitat von DeddyH (Beitrag 1115607)
Weshalb? Ein Verweis auf Self ist zwar meist nicht nötig, kann aber der besseren Lesbarkeit dienen und stört eigentlich auch nicht (man hat nur mehr Tipparbeit ;)).

Mach für mich hier keinen sinn.
Sorry ;)

gruss

DeddyH 8. Aug 2011 10:30

AW: 1400 Error beim Erstellen eines Fensters via API
 
Du musst Dich doch nicht entschuldigen. Aber wenn er/sie das mit Verweis besser findet, lass ihn/sie doch.

EWeiss 8. Aug 2011 10:35

AW: 1400 Error beim Erstellen eines Fensters via API
 
Wenn da nichts besonderes im Quelltext ist häng das teil mal an..
Schaue es mir dann mal an.

gruss

Medium 8. Aug 2011 10:47

AW: 1400 Error beim Erstellen eines Fensters via API
 
Zitat:

Zitat von Mangafreak1995 (Beitrag 1115569)
Delphi-Quellcode:
    hInstance := hInstance;

Der irritiert mich etwas! Zudem bin ich grade unsicher, ob hier:
Delphi-Quellcode:
CreateWindow('TestSWindow', PChar(self.appName)....
Delphi von selbst den ersten Parameter nach PChar konvertiert.

DeddyH 8. Aug 2011 10:50

AW: 1400 Error beim Erstellen eines Fensters via API
 
Zitat:

Zitat von Medium (Beitrag 1115617)
Zudem bin ich grade unsicher, ob hier:
Delphi-Quellcode:
CreateWindow('TestSWindow', PChar(self.appName)....
Delphi von selbst den ersten Parameter nach PChar konvertiert.

Bei Konstanten ist das kein Problem.

EWeiss 8. Aug 2011 10:53

AW: 1400 Error beim Erstellen eines Fensters via API
 
hInstance := hInstance
-------------------------------------
hInstance := GetModuleHandle(nil);

gruss

Mangafreak1995 8. Aug 2011 10:57

AW: 1400 Error beim Erstellen eines Fensters via API
 
Zitat:

Zitat von EWeiss (Beitrag 1115614)
Wenn da nichts besonderes im Quelltext ist häng das teil mal an..
Schaue es mir dann mal an.

gruss

Klar.

Download : http://www.joshua-behrens.de/downloa...ile=WinAPI.zip
Zitat:

Zitat von Medium (Beitrag 1115617)
Zitat:

Zitat von Mangafreak1995 (Beitrag 1115569)
Delphi-Quellcode:
    hInstance := hInstance;

Der irritiert mich etwas! Zudem bin ich grade unsicher, ob hier:
Delphi-Quellcode:
CreateWindow('TestSWindow', PChar(self.appName)....
Delphi von selbst den ersten Parameter nach PChar konvertiert.

Wo habe ich "hInstance = hInstance" ?
Auch das konvertieren des ersten Parameters habe ich versucht, ist aber dasselbe in grün.
Zitat:

Zitat von EWeiss (Beitrag 1115619)
hInstance := hInstance
-------------------------------------
hInstance := GetModuleHandle(nil);
gruss

Teste ich mal, aber wo habt ihr die Stelle ?

Und jetzt postet mal alle nicht so schnell, sonst kann ich nicht so schnell antworten :D

Medium 8. Aug 2011 10:59

AW: 1400 Error beim Erstellen eines Fensters via API
 
Fundstelle:
Zitat:

Zitat von Mangafreak1995 (Beitrag 1115569)
Delphi-Quellcode:
procedure TSForm.Show();
var msg : TMsg;
begin
  with self.windowClass do // private und vom Typ TWndClass
  begin
    Style:= CS_HREDRAW or CS_VREDRAW;
    lpfnWndProc:= @TSForm.WindowProcedure; // protected und mit stdcall versehen
    cbClsExtra:= 0;
    cbWndExtra:= 0;
    hbrBackground:= COLOR_APPWORKSPACE;
    lpszMenuName:= nil;
    lpszClassName:= 'TestSWindow';
    hInstance := hInstance; // <============================ hier so die Ecke :)
    hIcon := LoadIcon(0, IDI_WINLOGO);
    hCursor := LoadCursor(0, IDC_ARROW);
  end;
  if RegisterClass(self.windowClass) = 0 then
    ShowMessage('Fensterklasse konnte nicht registriert werden ' + IntToStr(GetLastError));
  self.hwnd {private HWND} := CreateWindow('TestSWindow', PChar(self.appName) {public und vom Typ String}, WS_CAPTION or WS_VISIBLE or WS_SYSMENU, (GetSystemMetrics(SM_CXSCREEN) - self.w {private, Integer und im Create auf 400 gesetzt}) div 2, (GetSystemMetrics(SM_CYSCREEN) - self.h{private, Integer und im Create auf 500 gesetzt}) div 2, self.w, self.h, 0, 0, hInstance, nil);
  if self.hwnd = 0 then
    ShowMessage('Fenster konnte nicht erzeugt werden ' + IntToStr(GetLastError));
  // is ja egal ... komm ich nicht mal hin
  ExitCode := msg.wParam;
end;


DeddyH 8. Aug 2011 11:03

AW: 1400 Error beim Erstellen eines Fensters via API
 
Jaja, das "ach so bequeme" with :twisted:

Mangafreak1995 8. Aug 2011 11:14

AW: 1400 Error beim Erstellen eines Fensters via API
 
Zitat:

Zitat von DeddyH (Beitrag 1115622)
Jaja, das "ach so bequeme" with :twisted:

Eyy :(

Ich versuchs mal ohne.

Edit:
Habe es so versucht:
Delphi-Quellcode:
  with self.windowClass do
  begin
    Style:= CS_HREDRAW or CS_VREDRAW;
    lpfnWndProc:= @TSForm.WindowProcedure;
    cbClsExtra:= 0;
    cbWndExtra:= 0;
    hbrBackground:= COLOR_APPWORKSPACE;
    lpszMenuName:= nil;
    lpszClassName:= 'WinAPITestWindow';
    hIcon := LoadIcon(0, IDI_WINLOGO);
    hCursor := LoadCursor(0, IDC_ARROW);
  end;
  self.windowClass.hInstance := SysInit.HInstance;
Aber immer noch 1400. Falls es vielleicht hilft, ich arbeite auf Win 5.1/XP Professional 32 bit.

himitsu 8. Aug 2011 11:18

AW: 1400 Error beim Erstellen eines Fensters via API
 
Mann kann auch den entsprechenden Namespace mit angeben.
HInstance ist doch in der Unit System (glaub ich) deklariert, also
Delphi-Quellcode:
hInstance := System.hInstance
.

[edit]
oder eventuell auch SysInit :stupid:


Eventuell mal self.windowClass über FillChar/ZeroMemory vorher komplett auf 0 sezten?

Ansonsten bleibt noch die Möglichkeit mal über den Debugger die ganzen Werte zu prüfen.

Mangafreak1995 8. Aug 2011 11:23

AW: 1400 Error beim Erstellen eines Fensters via API
 
Zitat:

Zitat von himitsu (Beitrag 1115624)
Man kann auch den entsprechenden Namespace mit angeben.
HInstance ist doch in der Unit System (glaub ich) deklariert, also
Delphi-Quellcode:
hInstance := System.hInstance
.

Schon längts passiert ;) Ich weiß, dass man Namespaces (aka Units) mit angeben kann.

Edit:
Delphi-Quellcode:
ZeroMemory(@self.windowClass.hInstance, SizeOf(Cardinal));
bringt nichts :(

Mangafreak1995 8. Aug 2011 11:52

AW: 1400 Error beim Erstellen eines Fensters via API
 
Laut Debugger ist alles mit einem validen Wert bestückt(hInstance : 4194304). Bei CreateWindow durchläuft der Debugger mehrmals die WndProc mit dem Parametern (hwnd:36, uMsg:0, wParam:1243444, lParam:4268636), (hwnd:129, uMsg:0, wParam:1243412, lParam:4268636) und
(hwnd:130, uMsg:0, wParam:0, lParam:4268636). Danach bekommt self.hwnd von CreateWindow den Wert 0 und der 1400 wird geworfen.

EWeiss 8. Aug 2011 13:44

AW: 1400 Error beim Erstellen eines Fensters via API
 
Es ist definitiv so das du das erstellen des Windows nicht abhängig von deiner Classe machen darfst.
Das wird immer fehlschlagen.
Die WinProc muss Statisch also Global definiert sein darf nicht in der Classe gekapselt werden.

PS:
Vorallem darfst du niemals einen Breakpoint bei WinHandle := CreateWindow(
setzen auch dann wird das erstellen des Windows jedesmal fehlschlagen.

gruss

himitsu 8. Aug 2011 13:56

AW: 1400 Error beim Erstellen eines Fensters via API
 
Zitat:

Zitat von EWeiss (Beitrag 1115640)
Vorallem darfst du niemals einen Breakpoint bei WinHandle := CreateWindow(
setzen auch dann wird das erstellen des Windows jedesmal fehlschlagen.

Dem kann ich so nicht zustimmen, denn ich konnte (also ich sowas das letzte Mal gemacht hatte) überall Halptepunkte hinsetzen oder mit F7 durchsteppen, ohne daß es da nennenswerte Probleme gab. :gruebel:
(damals in Delphi 7 und TDE)

EWeiss 8. Aug 2011 14:04

AW: 1400 Error beim Erstellen eines Fensters via API
 
Zitat:

Zitat von himitsu (Beitrag 1115641)
Zitat:

Zitat von EWeiss (Beitrag 1115640)
Vorallem darfst du niemals einen Breakpoint bei WinHandle := CreateWindow(
setzen auch dann wird das erstellen des Windows jedesmal fehlschlagen.

Dem kann ich so nicht zustimmen, denn ich konnte (also ich sowas das letzte Mal gemacht hatte) überall Halptepunkte hinsetzen oder mit F7 durchsteppen, ohne daß es da nennenswerte Probleme gab. :gruebel:
(damals in Delphi 7 und TDE)

Ungläubiger Thomas ;)
Es ist aber so!

Habe es gerade nach deinem Post nochmalig getestet.
Das setzen eines Breakpoint auf WinHandle := CreateWindow( schlägt immer ohne ausnahme fehl.

Ist auch unabhängig von der Delphi Version Das ist Winapi muss überall laufen egal welche Delphi Version das ist.
Schlägt es in D7 fehl dann auch in allen anderen Versionen wie bei mir d2009

Hier deine Lösung!

Delphi-Quellcode:
program API;

uses
  Windows, Messages, SHFolder, inifiles, SysUtils;

type

  TSForm = class
  private
    run:        Boolean;
    ClassNamen: PAnsiChar;
    windowClass: TWndClass;
    Winhandle:  HWND;
    AppName:    PAnsiChar;
    w, h:       Integer;
    msg:        TMsg;
    procedure finale;
    procedure init;
    procedure ShowError(ErrorText: PChar);
    function getAppData() : String;
    procedure keypress(c : Char);
  protected
    //
  public
    constructor Create();
    procedure Show();
    destructor Close();
  end;

var
  win : TSForm;

procedure TSForm.finale;
begin
  //
end;

function WindowProcedure(Winhandle: HWND; uMsg: UINT; wParam: wParam; lParam: LParam):
  lresult; stdcall;
var
  x, y : integer;
begin
  Result := 0;

  case uMsg of
    WM_CREATE:
      begin
        x := GetSystemMetrics(SM_CXSCREEN);
        y := GetSystemMetrics(SM_CYSCREEN);

        MoveWindow(Winhandle, (x div 2) - (win.w div 2),
          (y div 2) - (win.h div 2),
          win.w, win.h, true);
      end;

    WM_DESTROY:
      begin
         win.run := false;
        win.finale();
        PostQuitMessage(0);
      end;
    WM_KEYDOWN:
      begin
        win.KeyPress(Char(Word(wParam)));
      end;

  else
    Result := DefWindowProc(Winhandle, uMsg, wParam, lParam);
  end;
end;

destructor TSForm.Close;
begin

  UnregisterClass(windowClass.lpszClassName, hInstance);
end;

constructor TSForm.Create;
begin

  w := 640;
  h := 400;
end;

function TSForm.getAppData: String;
var
  path : array[0..MAX_PATH] of char;

begin

  if SUCCEEDED(SHGetFolderPath(0, CSIDL_LOCAL_APPDATA, 0, 0, PChar(path[0]))) then
    result := path
  else
    result := '';
end;

procedure TSForm.init;
begin

  run := true;
end;

procedure TSForm.keypress(c: Char);
begin
  //
end;

procedure TSForm.Show;
begin
  //
end;

procedure TSForm.ShowError(ErrorText: PChar);
begin

  MessageBox(Winhandle, ErrorText, 'Error', MB_ICONERROR);
  Halt;
end;


begin
  win := TSForm.Create();

  win.appName := 'WinAPITestApp';
  win.ClassNamen := 'WinAPITestWindow';
  win.windowClass.hInstance := hInstance;

  with win.windowClass do
  begin
    Style          := CS_HREDRAW or CS_VREDRAW;
    lpfnWndProc    := @WindowProcedure;
    cbClsExtra     := 0;
    cbWndExtra     := 0;
    hbrBackground  := COLOR_APPWORKSPACE;
    lpszMenuName   := nil;
    lpszClassName  := win.ClassNamen;
    hIcon          := LoadIcon(0, IDI_WINLOGO);
    hCursor        := LoadCursor(0, IDC_ARROW);
  end;

  if RegisterClass(win.windowClass) = 0 then
    win.ShowError(PChar('#' + IntToStr(GetLastError) + ' : ' + SysErrorMessage(GetLastError)));

  win.WinHandle := CreateWindow(win.windowClass.lpszClassName, win.AppName, WS_CAPTION or WS_VISIBLE or WS_SYSMENU
    or WS_MINIMIZEBOX or WS_MAXIMIZEBOX or WS_SIZEBOX, 400,
    400, win.w, win.h, 0, 0, hInstance, nil);

  if win.WinHandle <> 0 then
  begin
    win.init();

    while win.run do
    begin
      if PeekMessage(win.msg, win.WinHandle, 0, 0, PM_REMOVE) then
      begin
        TranslateMessage(win.msg);
        DispatchMessage(win.msg);
      end;
    end;
  end else
  win.ShowError(PChar('#' + IntToStr(GetLastError) + ' : ' + SysErrorMessage(GetLastError)));

  ExitCode := win.msg.wParam;

  win.Show();
  win.Close();

end.

gruss

Mangafreak1995 8. Aug 2011 14:32

AW: 1400 Error beim Erstellen eines Fensters via API
 
Zitat:

Zitat von EWeiss (Beitrag 1115640)
Es ist definitiv so das du das erstellen des Windows nicht abhängig von deiner Classe machen darfst.
Das wird immer fehlschlagen.
Die WinProc muss Statisch also Global definiert sein darf nicht in der Classe gekapselt sein.

PS:
Vorallem darfst du niemals einen Breakpoint bei WinHandle := CreateWindow(
setzen auch dann wird das erstellen des Windows jedesmal fehlschlagen.

gruss

Niemand hat gesagt, dass ich dort einen Punkt gesetzt habe. Es ist nur die Stelle, wo der Fehler geworfen wird und deswegen habe ich diese Stelle einfach ausführlich beschrieben.

Ich probiere mal die globale WndProc.

Edit : Danke für die Lösung. Ich teste das mal.

EWeiss 8. Aug 2011 14:34

AW: 1400 Error beim Erstellen eines Fensters via API
 
Zitat:

Zitat von Mangafreak1995 (Beitrag 1115645)
Zitat:

Zitat von EWeiss (Beitrag 1115640)
Es ist definitiv so das du das erstellen des Windows nicht abhängig von deiner Classe machen darfst.
Das wird immer fehlschlagen.
Die WinProc muss Statisch also Global definiert sein darf nicht in der Classe gekapselt sein.

PS:
Vorallem darfst du niemals einen Breakpoint bei WinHandle := CreateWindow(
setzen auch dann wird das erstellen des Windows jedesmal fehlschlagen.

gruss

Niemand hat gesagt, dass ich dort einen Punkt gesetzt habe. Es ist nur die Stelle, wo der Fehler geworfen wird und deswegen habe ich diese Stelle einfach ausführlich beschrieben.

Ich probiere mal die globale WndProc. Wie kann ich dann am besten auf die Klasse zurückgreifen, die diese Form handlen soll ?

Hab meinen Beitrag editiert..

win.Show();
win.Close();

müssen noch an einer anderen stelle gesetzt werden..
hab das jetzt nicht korrigiert.

Zitat:

Niemand hat gesagt, dass ich dort einen Punkt gesetzt habe. Es ist nur die Stelle, wo der Fehler geworfen wird und deswegen habe ich diese Stelle einfach ausführlich beschrieben.
Habe ich auch nicht behauptet das war nur ein Hinweis..
Aber hast ja jetzt die korrigierte version teste es selbst.

gruss

Mangafreak1995 8. Aug 2011 22:07

AW: 1400 Error beim Erstellen eines Fensters via API
 
Vielen vielen Dank an euch alle. Ich war bis jetzt der API so nah wie jetzt als ich mal in C reingeschnuppert habe. Jetzt kann ich besser arbeiten und habe wieder ein paar Sachen gelernt.
Speziell an EiWeiss


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