Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Auf Herunterfahren reagieren [w/ Forms]

  Alt 12. Dez 2010, 00:33
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 MSDN-Library durchsuchenCreateWindow, 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 Hier im Forum suchenTWndMethod 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 := 'MessageElse 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 DelayDelay

[add] OK, einwas war doch noch zu finden.
http://www.delphipraxis.net/113322-u...tml#post773692
$2B or not $2B

Geändert von himitsu (12. Dez 2010 um 00:37 Uhr)
  Mit Zitat antworten Zitat