Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Eigene Komponente (TNA-Icon) und TNotifyEvent (https://www.delphipraxis.net/62987-eigene-komponente-tna-icon-und-tnotifyevent.html)

ManuMF 12. Feb 2006 13:06


Eigene Komponente (TNA-Icon) und TNotifyEvent
 
Hallo,

ich möchte mir eine eigene Komponente für ein TNA-Icon erstellen. Das Icon soll auch ein onClick-Event besitzen. Wie kann ich das realisieren? Bisher habe ich folgendes (nur relevante Code-Stellen):

Delphi-Quellcode:
type
  TTrayIcon = class(TComponent)
  private
    ...
    procedure WMTaskbarEvent(var Message: TMessage); message WM_TASKBAREVENT;
      // Habe ich aus Code-Beispielen, funktioniert auch, zumindest bei Forms
  protected
    ...
    FOnClick: TMNotifyEvent;
  public
    ...
    property OnClick: TNotifyEvent read FOnClick write FOnClick;
  end;

...

procedure TTrayIcon.WMTaskbarEvent(var Message: TMessage);
begin
  case Message.LParamLo of
    WM_LBUTTONDBLCLK:
      ...
    WM_RBUTTONDOWN:
      ...
  end;
  // So habe ich es bisher gemacht. In RBUTTONDOWN habe ich dann z.B.
  // ein PopupMenu geöffnet.
  // Aber wie kann ich es hier an das Event weitergeben?
end;
Danke,
ManuMF

turboPASCAL 12. Feb 2006 13:28

Re: Eigene Komponente (TNA-Icon) und TNotifyEvent
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
published
    property OnClick: TNotifyEvent read FOnClick write FOnClick;
    property OnDblClick: TNotifyEvent read FOnDblClick write FOnDblClick;
    property OnRightClick: TMouseEvent read FOnRightClick write FonRightClick; // !


// ...

procedure TTrayIcon.DoDblClick(Sender: TObject);
begin
  if Assigned(FOnDblClick) then FOnDblClick(Sender);
end;

procedure TTrayIcon.DoClick(Sender: TObject);
begin
  if Assigned(FOnClick) then FOnClick(Sender);
end;

procedure TTrayIcon.DoRightClick(Sender: TObject);
begin
  if Assigned(FOnRightClick) then...
end;
Das ist schon alles.

[edit=turboPASCAL]Edit: Anhang hinzugefügt. Eine fertige einfache Trayicon-Classe... (nix JVCL's) ;) [/edit]

ManuMF 12. Feb 2006 13:30

Re: Eigene Komponente (TNA-Icon) und TNotifyEvent
 
Cool, danke :thumb:

Probier ich gleich aus.

Gruß,
ManuMF

ManuMF 12. Feb 2006 19:36

Re: Eigene Komponente (TNA-Icon) und TNotifyEvent
 
So, es funktioniert soweit (nach einigen Fehlversuchen ;-) ).

ABER: Es gibt ein Problem. Assigned ist immer true :gruebel: . Der Code:
Delphi-Quellcode:
procedure TTrayIcon.DoClick(Sender: TObject);
begin
  if Assigned(FOnClick) then FOnClick(Sender); // führt zu Zugriffsverletzung
  if Assigned(FOnClick) then showmessage('Ist assigned'); // -> Jeder Klick zeigt Meldung an, auch wenn in OnClick nichts drin steht
end;
Wie kann ich das beheben?

Danke,
ManuMF

omata 12. Feb 2006 20:50

Re: Eigene Komponente (TNA-Icon) und TNotifyEvent
 
Wie initialisierst du den FOnClick?

ManuMF 13. Feb 2006 07:48

Re: Eigene Komponente (TNA-Icon) und TNotifyEvent
 
In der Komponentenunit gar nicht. Dabei habe ich mich an den Beispielen orientiert.

Gruß,
ManuMF

omata 13. Feb 2006 18:24

Re: Eigene Komponente (TNA-Icon) und TNotifyEvent
 
Ja, ich dachte das würde dich schon weiter bringen.

Dann initalisiere doch die Variable mal mit nil oder leg eine Dummy-Prozedur an, die du dann auf die Variable zu weist.

MfG
Thorsten

ManuMF 13. Feb 2006 19:00

Re: Eigene Komponente (TNA-Icon) und TNotifyEvent
 
Wenn in der Prozedur was drin steht, wird der Code beim Click ohne Probleme ausgeführt.

Ich habe jetzt auch mal im onCreate des Icons (in der Icon-Unit) FOnClick := nil hinzugefügt, das hat aber auch nichts gebracht.

Gruß,
ManuMF


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 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