Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TTrayIcon - DblClick überschreiben (https://www.delphipraxis.net/87165-ttrayicon-dblclick-ueberschreiben.html)

scrat1979 24. Feb 2007 10:21


TTrayIcon - DblClick überschreiben
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz