Hmmm, eigentlich hatte ich irgendwann mal was zu diesen MessageOnlyWindows geschrieben, aber die Forensuche scheint das wohl nicht mehr zu finden.
Also entweder du nimmst ein TForm, das
NonVCL-Equivalent über
CreateWindow, womit du dir ein unsichtbares Hauptfenster (MessageWindow) erstellst.
Oder eben den offiziellen Weg für ein MessageOnlyWindow (irgendwo im
MSDN sollte sich ein Artikel dazu finden lassen).
> siehe nachfolgenden Code, aber ohne das SetWindowLong
In der Nachrichtenschleife dann einfach auf das
Handle der Form reagieren.
Oder du erstellst dir eine neue WindowClass, registrierst sie, mit einem eigenem StandardWindowProc und reagierst dann in dieser Prozedur.
> statt Message/Static dann deine eigene Klasse nehmen
Oder eben über MakeObjectInstance eine Methode ala
TWndMethod beim Fenster registrieren und darüber auf die Messages reagieren.
Delphi-Quellcode:
VI.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
If GetVersionEx(VI) and (VI.dwMajorVersion >= 5) Then
S := 'Message' Else S := 'STATIC';
FHandle := CreateWindowEx(WS_EX_TOOLWINDOW, PChar(S), nil,
WS_POPUP, 0, 0, 0, 0, 0, 0, HInstance, nil);
SetWindowLong(FHandle, GWL_WNDPROC, Integer(MakeObjectInstance(YourWndMethod)));
In allen Fällen mußt du aber eine MessageLoop/Nachrichtenschleife verwenden. (in einem
VCL-Programm steckt diese Schleife in Application.Run drin und ohne diese mußt du eben deine eigene Schleife bauen) ... dazu sollten sich aber Massig Infos und Beispiele in der
DP anfinden.
z.B.
http://www.delphipraxis.net/115456-e...tml#post789753
oder siehe
Delay
[add] OK, einwas war doch noch zu finden.
http://www.delphipraxis.net/113322-u...tml#post773692