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 Fenster wird nicht angezeigt [ WinHorrorApi ] (https://www.delphipraxis.net/111054-fenster-wird-nicht-angezeigt-%5B-winhorrorapi-%5D.html)

Desmulator 28. Mär 2008 16:26


Fenster wird nicht angezeigt [ WinHorrorApi ]
 
Hallo

ich habe mich mal an die WinApi gewagt...
also das problem ist relativ simpel, ich habe alles wie in einem Tutorial nachgebaut, das Tut ist allerdings für C++.
Naja das Fenster wird einfach nicht angezeigt, allerdings entsteht ein taskbar eintrag...

hier der Code :
Delphi-Quellcode:
program FileShooter;

uses
  {FileFunctions,
  SocketFunctions,
  Exceptions,
  MySQLConnection,
  WindowFunctions,
  ComponentFunctions,}
  Windows,Messages, SysUtils;

const
  szAppName : String = 'TestApp';

var
  WndClass : TWndClass;
  Wnd     : HWnd;
  Message : TMsg;

function WinProc(Handle : Hwnd; Message : UInt; WParam : Longint; LParam : Longint) : LongInt;
begin
  { Bla }
  //WriteLn(Message);

end;

begin
  { WndClass füttern }
  WndClass.style := CS_DBLCLKS;
  WndClass.lpfnWndProc := @WinProc;
  WndClass.cbClsExtra := 0;
  WndClass.cbWndExtra := 0;
  { progressInstanc }
  WndClass.hInstance := System.MainInstance;
  WndClass.hIcon := LoadIcon(0,IDI_APPLICATION);
  WndClass.hCursor := LoadCursor(0,IDC_ARROW);
  WndClass.hbrBackground := HBrush(COLOR_WINDOW);
  { Klassgeschisse }
  WndClass.lpszMenuName := nil;
  WndClass.lpszClassName := PChar(szAppName);

  { Klasse registern }
  RegisterClass(WndClass);

  { Fenster erzeugen }
  Wnd := CreateWindow(PChar(szAppName),'Test',WS_OVERLAPPEDWINDOW,
                      CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT
                      ,HWND_DESKTOP,0,System.MainInstance,0);
  { Anzeigen }
  ShowWindow(Wnd,System.CmdShow);
  { Updaten }
  UpdateWindow(Wnd);


  WriteLn(GetLastError);

  { Nachrichten abholen }
  while GetMessage(Message,0,0,0) do begin
    TranslateMessage(Message);
    DispatchMessage(Message);
  end;
end.

1234588 28. Mär 2008 16:31

Re: Fenster wird nicht angezeigt [ WinHorrorApi ]
 
Delphi-Quellcode:
function wndproc(hwnd: LongWord; uMsg: LongWord; wParam: LongInt; lParam: LongInt): LongInt; stdcall;
begin
  case uMsg of
    WM_DESTROY:
      PostQuitMessage(0);

  else result := DefWindowProc(hWnd, uMsg, wParam, lParam);
  end;
end;
DefWindowProc() laesst windows fuer die nicht von dir abgearbeitet nachricht agieren. events wie WM_PAINT werden sonst nicht ausgefuehrt und somit kann windows dein fenster nicht zeichnen.
PostQuitMessage(0) beendet deine nachrichtenschleife, da dein programm sonst ohne fenster weiter laufen wuerde


//edit
vorsicht, wndproc MUSS eine andere aufrufkonvektion erhalten (stdcall)


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