2010-11-16 7 views
11

Ich habe eine Delphi 2006 App, die auf ein Tray-Icon minimiert werden kann, und verschiedene Warnmeldungen über einen Hinweis auf das Tray-Icon anzeigt.Balloon Hinweise auf Delphi App Tray-Icon auf unbestimmte Zeit auftauchen

Unter bestimmten Umständen - ich weiß nicht wann - erscheint ein zuvor angezeigter Sprechblasenhinweis und wird nicht verschwinden. Es wird für die programmierte Dauer angezeigt, schließt und erscheint sofort wieder.

Es ist immer ein Ballon Hinweis von dieser App.

Wenn die App einen weiteren Sprechblasenhinweis anzeigt, der für die programmierte Zeit angezeigt wird, wird der Phantomhinweis fortgesetzt.

Es ist, als ob der Hinweis irgendwo in einer Warteschlange stecken bleibt und nicht entfernt wird. In Ermangelung von irgendjemandem mit etwas Inspiration (ich weiß, es ist ein langer Schuss ...), weiß jemand, wie man die Ballonhinweise wegspült?

+0

überprüfen, ob Sie einen Timer, die das Tray-Icon ruft den Ballon angezeigt werden oder noch besser das gesamte Projekt für den Namen des Tray-Icon-Komponente suchen und sehen, wo Sie die Prozedur aufrufen, die den Ballon zeigt. – ComputerSaysNo

+0

@Dorin. Danke, das getan. Der Code, der der BalloonHint-Eigenschaft des TTrayIcon zugewiesen wird, wird definitiv nicht erneut aufgerufen. – rossmcm

+0

testen Sie dies auf Windows XP? Ich kann mich erinnern, dass es einen Fehler mit den Luftballons gab, die von MS auf diesem OS zur Verfügung gestellt wurden. Überprüfe die akzeptierte Antwort unter http://stackoverflow.com/questions/902642/how-to-hide-a-taskbar-balloon-at-will. Ich denke, das könnte dir helfen. –

Antwort

2

Welche TrayIcon verwenden Sie? Das TCustomTrayIcon in "Vcl.ExtCtrls" verwendet TNotifyIconData, um das Popup an das TrayIcon zu senden. Einige Eigenschaften erfordern Windows Vista oder höher.

public 
    FData: TNotifyIconData; //Winapi.ShellAPI 

procedure TCustomTrayIcon.ShowBalloonHint; 
begin 
    FData.uFlags := FData.uFlags or NIF_INFO; 
    FData.dwInfoFlags := Cardinal(FBalloonFlags); 
    Shell_NotifyIcon(NIM_MODIFY, FData); //Refresh(NIM_MODIFY); 
end; 

Sie können sehen, was passiert, indem Sie Nachrichten verarbeiten, die vom Trayicon gesendet werden.

NIN_BALLOONSHOW  = WM_USER + 2; 
NIN_BALLOONHIDE  = WM_USER + 3; 
NIN_BALLOONTIMEOUT = WM_USER + 4; 
NIN_BALLOONUSERCLICK = WM_USER + 5; 
0

Ich habe das gleiche Problem in VB.NET. Meine Anwendung zeigt Fehlermeldungen durch einen Balloontip im Systray. Wenn mehrere Fehler gleichzeitig vorliegen, hält der Balloontip an seinem normalen Timeout fest und zeigt die Fehler nacheinander an. Es sieht so aus, als gäbe es eine Art Puffer, der sich an die tatsächliche Anzahl erinnert, wie oft Sie versuchen, den Balloontip zu zeigen. Wenn Sie aufhören, neue Balloontips zu zeigen und lange genug warten, würde es irgendwann aufhören.

Mein Ziel wäre, die aktuelle Balloontip zu schließen, sobald eine andere kommt, aber ich habe es noch nicht geschafft. Das ist also nur eine halbe Lösung.


[Hinzugefügt vollständige Lösung]

Die vollständige Lösung war sehr einfach. Führen Sie dies aus, bevor Sie eine neue Balloontip zeigen (Where Tray ist Ihr TrayIcon/NotifyIcon).

Tray.Visible = true; 
+0

Schwer zu sehen, wie diese auf die Frage bezieht, die eine Delphi besorgt Anwendung –

+0

Es ist eine Lösung für das gleiche Problem. Nur in anderem Code.Übersetze meine Codezeile in einen Delphi-Code. Wäre das ein Problem für das OP? – Martin

Verwandte Themen