![]() |
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. |
Re: Fenster wird nicht angezeigt [ WinHorrorApi ]
Delphi-Quellcode:
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.
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; 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