AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TTrayicon.BalloonHint entfernen

Ein Thema von kmma · begonnen am 26. Jun 2024 · letzter Beitrag vom 27. Jun 2024
Antwort Antwort
kmma

Registriert seit: 26. Jul 2010
16 Beiträge
 
Delphi 2 Desktop
 
#1

TTrayicon.BalloonHint entfernen

  Alt 26. Jun 2024, 18:17
Wenn ich einen TTrayIcon.Balloonhint mit
Delphi-Quellcode:
  TrayIcon1.BalloonHint := 'This is a Balloon Hint';
  TrayIcon1.BalloonTitle := 'Hint Title';
  TrayIcon1.ShowBalloonHint;
anzeige, wie bekomme ich den zuverlässig wieder weg (außer warten bis das Timeout erreicht ist)?

wenn ich mit

Delphi-Quellcode:
  TrayIcon1.BalloonHint := '';
  TrayIcon1.BalloonTitle := '';
  TrayIcon1.ShowBalloonHint;
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.048 Beiträge
 
Delphi 12 Athens
 
#2

AW: TTrayicon.BalloonHint entfernen

  Alt 26. Jun 2024, 18:58
In der VCL-Klasse is halt nix für drin.
Aber schau doch mal, ob du bei Windows was findest?

MSDN-Library durchsuchenShell_NotifyIcon und NIN_BALLOONHIDE klang nett.

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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.445 Beiträge
 
Delphi 12 Athens
 
#3

AW: TTrayicon.BalloonHint entfernen

  Alt 26. Jun 2024, 19:12
Kannst du das mit einem simplen Testprogramm reproduzieren? Ich konnte das hier unter D12.1 jedenfalls nicht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.445 Beiträge
 
Delphi 12 Athens
 
#4

AW: TTrayicon.BalloonHint entfernen

  Alt 26. Jun 2024, 19:17
NIN_BALLOONHIDE
Das wird aber nur von Windows als Notification an die Application wenn der Balloon verschwindet. Es ist keine Message um das zu steuern.

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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.048 Beiträge
 
Delphi 12 Athens
 
#5

AW: TTrayicon.BalloonHint entfernen

  Alt 26. Jun 2024, 19:20
Ahhh stimmt, jetzt gesehn ... NIN und nicht MIM ... hatte mich schon bissl geundert, aber versuchen kann man's ja dennoch mal

Der erste Versuch war NIM_MODIFY und dort NIF_INFO zu entfernen ... durch Setzen dieses Flags wurde vorher im ShowBalloonHint der Hint sichtbar.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Jun 2024 um 19:22 Uhr)
  Mit Zitat antworten Zitat
kmma

Registriert seit: 26. Jul 2010
16 Beiträge
 
Delphi 2 Desktop
 
#6

AW: TTrayicon.BalloonHint entfernen

  Alt 27. Jun 2024, 09:50
NIN_BALLOONHIDE
Das wird aber nur von Windows als Notification an die Application wenn der Balloon verschwindet. Es ist keine Message um das zu steuern.

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.

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.

Geändert von kmma (27. Jun 2024 um 10:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.445 Beiträge
 
Delphi 12 Athens
 
#7

AW: TTrayicon.BalloonHint entfernen

  Alt 27. Jun 2024, 11:02
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
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
kmma

Registriert seit: 26. Jul 2010
16 Beiträge
 
Delphi 2 Desktop
 
#8

AW: TTrayicon.BalloonHint entfernen

  Alt 27. Jun 2024, 12:01
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
Das Problem scheint tatsächlich nur bei Windows 11 aufzutreten, der gleiche Code funktioniert unter Windows 10 einwandfrei.

Also konkretisiere ich die Frage: Wie entfernt man einen BalloonHint unter Windows 11 sauber?
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:31 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