![]() |
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:
Danke,
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; ManuMF |
Re: Eigene Komponente (TNA-Icon) und TNotifyEvent
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
Das ist schon alles.
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; [edit=turboPASCAL]Edit: Anhang hinzugefügt. Eine fertige einfache Trayicon-Classe... (nix JVCL's) ;) [/edit] |
Re: Eigene Komponente (TNA-Icon) und TNotifyEvent
Cool, danke :thumb:
Probier ich gleich aus. Gruß, ManuMF |
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:
Wie kann ich das beheben?
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; Danke, ManuMF |
Re: Eigene Komponente (TNA-Icon) und TNotifyEvent
Wie initialisierst du den FOnClick?
|
Re: Eigene Komponente (TNA-Icon) und TNotifyEvent
In der Komponentenunit gar nicht. Dabei habe ich mich an den Beispielen orientiert.
Gruß, ManuMF |
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 |
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 22:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz