Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:01 Uhr.
Seite 1 von 4  1 23     Letzte »    

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