Einzelnen Beitrag anzeigen

Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#1

TTrayIcon - DblClick überschreiben

  Alt 24. Feb 2007, 10:21
Hallo zusammen,

ich habe eine neue Komponente von TTrayIcon abgeleitet. Ziel soll es sein, daß bei einem Minimieren des Formulares das Icon in der TNA erscheint und die Applikation "versteckt" wird. Das klappt auch wunderbar. Bei einem Doppelklick auf das TrayIcon soll die Applikation (= das Formular) wiederhergestellt werden. Ich möchte, daß ich nicht bei jeder meiner Application die entsprechenden Ereignisse über das Formular (z.B. OnMinimize etc.), sondern direkt über die Komponente abfange und behandle. Wie gesagt, das minimieren funktioniert 1A, nur der Doppelklick auf das TrayIcon wird irgendwie nicht "wahrgenommen". Was muss ich denn im Quellcode noch einfügen, um das zu verwirklichen (Self.Visiblie := False, FOwnerForm.Visible:= True und FOwnerForm.BringToFront soll in der entsprechenden Prozedur ausgeführt werden). Die Mesage WM_LBUTTONDBLCLICK (o.ä.) habe ich versucht abzufangen, ohne Erfolg.

Hier der Quellcode:

Delphi-Quellcode:
unit AdvTrayIcon;

interface

uses
  SysUtils, Classes, ExtCtrls, Forms, Messages, Windows;

type
  TAdvTrayIcon = class(TTrayIcon)
  private
    { Private-Deklarationen }
    FOldWndProc : TWndMethod;
    FOwnerForm : TForm;
    { Protected-Deklarationen }
    procedure WndProc(var Msg : TMessage);
  public
    { Public-Deklarationen }
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;

  published
    { Published-Deklarationen }
  end;

procedure Register;

implementation

constructor TAdvTrayIcon.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FOwnerForm := TForm(AOwner);
  FOldWndProc := FOwnerForm.WindowProc;
  FOwnerForm.WindowProc := WndProc;
end;

destructor TAdvTrayicon.Destroy;
begin
  FOwnerForm.WindowProc := FOldWndProc;

  inherited Destroy;
end;

procedure TAdvTrayIcon.WndProc(var Msg: TMessage);
begin
  If (Msg.Msg = WM_SYSCOMMAND) and (Msg.wParam = SC_MINIMIZE) Then Begin
    FOwnerForm.Hide;
    Self.Visible := True;
  End Else FOldWndProc(Msg);
end;

  procedure Register;
begin
  RegisterComponents('Michael Kübler', [TAdvTrayIcon]);
end;

end.
Hoffe Ihr könnt mir - wie immer - weiterhelfen.

SCRaT
Michael Kübler
  Mit Zitat antworten Zitat