![]() |
TTrayicon.BalloonHint entfernen
Wenn ich einen TTrayIcon.Balloonhint mit
Delphi-Quellcode:
anzeige, wie bekomme ich den zuverlässig wieder weg (außer warten bis das Timeout erreicht ist)?
TrayIcon1.BalloonHint := 'This is a Balloon Hint';
TrayIcon1.BalloonTitle := 'Hint Title'; TrayIcon1.ShowBalloonHint; wenn ich mit
Delphi-Quellcode:
den BalloonHint mit einem leeren Hint überschreibe geht das beim ersten mal gut, wenn ich dann aber einen neuen Hint anzeigen will kommt dieser sehr start verzögert oder lässt sich auf die gleiche Art und Weise nicht mehr vorzeitig entfernen.
TrayIcon1.BalloonHint := '';
TrayIcon1.BalloonTitle := ''; TrayIcon1.ShowBalloonHint; |
AW: TTrayicon.BalloonHint entfernen
In der VCL-Klasse is halt nix für drin.
Aber schau doch mal, ob du bei Windows was findest? ![]() Nja, dann noch der Spaß, dass die Klasse bissl scheiße designt ist. Hab mal was versucht ... half aber noch nix.
Delphi-Quellcode:
uses
... Winapi.ShellAPI; type TTrayIcon = class(Vcl.ExtCtrls.TTrayIcon); type TForm27 = class(TForm) TrayIcon1: TTrayIcon; Button1: TButton; procedure Button1Click(Sender: TObject); end; ... procedure TForm27.Button1Click(Sender: TObject); var Data: TNotifyIconData; begin TrayIcon1.BalloonHint := 'This is a Balloon Hint'; TrayIcon1.BalloonTitle := 'Hint Title'; TrayIcon1.ShowBalloonHint; Application.ProcessMessages; Sleep(2000); Data := TrayIcon1.Data; Data.uFlags := Data.uFlags and not NIF_INFO; //Shell_NotifyIcon(NIM_MODIFY, @Data); Shell_NotifyIcon(NIN_BALLOONHIDE, @Data); end; |
AW: TTrayicon.BalloonHint entfernen
Kannst du das mit einem simplen Testprogramm reproduzieren? Ich konnte das hier unter D12.1 jedenfalls nicht.
|
AW: TTrayicon.BalloonHint entfernen
Zitat:
Der korrekte Weg ist das BalloonHint Property einfach leer zu setzen. Den nachfolgenden ShowBalloonHint-Aufruf kann man sich sparen. Übrigens auch das Leeren des BalloonTitle. |
AW: TTrayicon.BalloonHint entfernen
Ahhh stimmt, jetzt gesehn ... NIN und nicht MIM :wall: ... hatte mich schon bissl geundert, aber versuchen kann man's ja dennoch mal :stupid:
Der erste Versuch war NIM_MODIFY und dort NIF_INFO zu entfernen ... durch Setzen dieses Flags wurde vorher im ShowBalloonHint der Hint sichtbar. |
AW: TTrayicon.BalloonHint entfernen
Zitat:
Hmmm, das kann ich so nicht nachvollziehen. (Delphi 12.1) Ich habe mir 2 Buttons auf ein Formular gezogen und folgenden Code eingefügt:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin TrayIcon1.BalloonHint := 'This is a Balloon Hint ' + formatdatetime('hh:mm:ss.zzz', now); TrayIcon1.BalloonTitle := 'Hint Title'; TrayIcon1.ShowBalloonHint; end; procedure TForm1.Button2Click(Sender: TObject); begin TrayIcon1.BalloonHint := ''; end; Jetzt klickt man 5 mal abwechselnd (im Sekundentakt) auf Button1 und Button2. Der erste Hint verschwindet noch wenn man Button2 klickt. Dann kommen aber nach jeweils ca. 10 Sekunden die restlichen Hints (mit einem Zeitstempel der ca. eine Sekunde auseinander liegt). Da wird also scheinbar nicht gelöscht sondern eine Warteschlange angelegt. |
AW: TTrayicon.BalloonHint entfernen
Komisch, nun kann ich das von dir beschriebene Verhalten aber nicht nachvollziehen. Also, ich klicke auf Button1, dann auf nach ca. 1 Sekunde Button2, damn wieder auf Button1 usw.
Es werden zwar sporadisch zwischendurch mal die Lösch-Klicks ignoriert. Aber in der Regel verschwindet der Hint beim Klick auf Button2 sofort. Dummerweise kann ich kein Video davon machen, denn während der Aufnahme werden die Popups leider unterdrückt. Ach ja, Windows 10 Pro Build 19045 |
AW: TTrayicon.BalloonHint entfernen
Zitat:
Also konkretisiere ich die Frage: Wie entfernt man einen BalloonHint unter Windows 11 sauber? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:02 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