Hallo Mitstreiter,
ich stehe gerade auf dem Schlauch bei einem Eventhandler.
Konkret habe ich eine Klasse, die einem
TNA Icon kurzzeitig einen Eventhandler für die Balloonhints zuweisen soll.
Das Problem: Der Eventhandler wird nicht ausgelöst weil er nicht an das zugeordnete Objekt übergeben wird.
Code (die üblichen Verdächtigen):
Delphi-Quellcode:
type
TTestKlasse = class(TComponent)
private
...
FTrayIcon: TTntTrayIcon;
...
published
property TrayIcon: TTntTrayIcon read FTrayIcon write FTrayIcon;
end;
Das TrayIcon wird im MainForm erzeugt, und es sind keine Eventhandler zugewiesen. Der Klasseninstanz wird nun das MainForm-Icon über die Property übergeben. Innerhalb der TTestKlasse wird nun ein Event definiert.
Delphi-Quellcode:
procedure TTestKlasse.ShowIconNotification;
begin
if Assigned(FTrayIcon) then
with FTrayIcon do
begin
OnBalloonHintClick := DoSomething; // hier ist das Augenmerk drauf
BalloonFlags := bfInfo;
BalloonTitle := _('Test Header');
BalloonHint := _('Testtext');
ShowBalloonHint;
end;
end;
Soweit ist also alles klar. Wenn ich das nun laufen lasse, wird der Eventhandler auch FTrayIcon zugewiesen, aber kommt nie beim externen TTntTrayIcon an (übrigens auch nicht bei TTrayIcon).
Ein Breakpoint in der TntExtCtrls, der Quelle für TTntTrayIcon, zeigt dies auch genauso an. FTrayIcon hat den Handler, aber nicht das zugewiesene TrayIcon im MainForm.
Wo ist mein Denkfehler, den ich vor lauter Programmier-Language-Hopping derzeit nicht sehe?
Gruß Assertor