Einzelnen Beitrag anzeigen

Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#3

AW: BalloonTimeout bei TTrayIcon geht nicht

  Alt 10. Feb 2011, 11:13
So, nun habe ich wieder ein Projekt mit einem BalloonHint und der 'Bug' ist in DelphiXE immer noch vorhanden.

Ich habe das Problem damals per Timer gelöst, der nach ns BalloonHint auf '' setzt... dann verschwindet er auch...

Nun möchte ich in meinem neuen Projekt diese zusätzlichen Timer aber nicht haben, da diese (und das ganze Starten und Stoppen usw.) dan Quellcode unübersichtlich macht.

Deswegen habe ich mir gedacht ich mache mir einfache eine von TTrayIcon abgeleitete Komponete, welche einen Timer enthält.

Das habe ich soweit auch schon gemacht:

Delphi-Quellcode:
unit MyTrayIcon;

interface

uses
  ExtCtrls, Classes;

type
  TMyTrayIcon = class(TTrayIcon)
  private
    FBallonShowInterval: cardinal;
    FTimer: TTimer;
  protected

  public

  published
    constructor Create(Owner: TComponent); override;
    destructor Destroy; override;
    property BallonShowInterval: cardinal write FBallonShowInterval;
  end;

procedure Register;

implementation

uses
  SysUtils;

procedure Register;
begin
  RegisterComponents('MyComponents', [TMyTrayIcon]);
end;

{ TMyTrayIcon }

constructor TMyTrayIcon.Create(Owner: TComponent);
begin
  inherited;
  FTimer := TTimer.Create(self);
end;

destructor TMyTrayIcon.Destroy;
begin
  if assigned(FTimer) then
    FreeAndNil(FTimer);
  inherited;
end;

end.
Nur fehlt mir das Ergeifnis wenn der BalloonHint angezeigt wird. In diesem muss ich den Timer dann ja starten.

TTrayIcon hat aber nur diese Ereignisse:

Zitat:
Ereignisse von ExtCtrls.TTrayIconAus RAD Studio VCL Reference
Übergeordnetes: TTrayIcon

OnAnimate
OnBalloonClick Wird ausgelöst, wenn der Sprechblasenhinweis angeklickt wird.
OnClick
OnDblClick
OnMouseDown
OnMouseMove
OnMouseUp
Wie kann ich diese Problem lösen?

Noch eine OT Zusatzfrage: Muss ich im destructor eigentlich FreeAndNil(FTimer); machen?

Im Konstruktor habe ich ja einen Owner angegeben. Wenn dieser freigegeben wird, werden doch auch automatisch alle Objekte welche dieses Objekt als Owner haben freigegeben, oder?
  Mit Zitat antworten Zitat