2010-11-16 41 views
11

我有一個Delphi 2006應用程序,可以最小化爲托盤圖標,並通過托盤圖標上的氣球提示顯示各種警報消息。Delphi應用程序托盤圖標上的氣球提示無限期彈出

在某些情況下 - 我不知道何時 - 以前顯示的氣球提示不斷彈出並不會消失。它顯示編程時間長度,關閉,然後立即重新出現。

它總是從這個應用程序提示氣球。

如果應用程序顯示另一個氣球提示,該應用程序將顯示設定的時間,則幻影提示將恢復。

這就好像提示被卡在某個隊列中並且沒有被刪除。在沒有任何人有靈感的情況下(我意識到這是一個長鏡頭......),有誰知道如何清除氣球提示?

+0

檢查,如果你有一個調用的托盤圖標,彈出氣球或更好的搜索整個項目的托盤圖標組件的名稱,看看你叫,顯示了氣球的程序定時器。 – ComputerSaysNo 2010-11-16 08:41:29

+0

@Dorin。謝謝,完成了。分配給TTrayIcon的BalloonHint屬性的代碼肯定不會再被調用。 – rossmcm 2010-11-16 09:22:16

+0

你在Windows XP上測試了這個嗎?我似乎記得在該操作系統上MS提供的氣球有一個錯誤。無論如何,檢查接受的答案在http://stackoverflow.com/questions/902642/how-to-hide-a-taskbar-balloon-at-願意。我認爲這可能會對你有所幫助。 – 2011-02-27 06:49:32

回答

2

您正在使用哪種TrayIcon? 「Vcl.ExtCtrls」中的TCustomTrayIcon使用TNotifyIconData將Popup發送到TrayIcon。某些屬性需要Windows Vista或更高版本。

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; 

通過處理由trayicon發送的消息,您可以看到發生了什麼。

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

我在VB.NET中面臨同樣的問題。我的應用程序通過systray中的balloontip顯示錯誤消息。當一次出現多個錯誤時,balloontip將會保持正常超時狀態,並一個接一個地顯示錯誤。看起來有一些緩衝區可以記住你試圖顯示氣球提示的實際次數。如果你停止顯示新的氣球提示並等待足夠長的時間,它最終會停止。

我的目標是一旦另一個進來就關閉當前的氣球,但我還沒有想到要做到這一點。所以這只是一個解決方案。


[增加了完整的解決方案]

的完整的解決方案是非常簡單的。在顯示新的提示框之前執行此操作(其中Tray是您的TrayIcon/NotifyIcon)。

Tray.Visible = true; 
+0

很難看到這涉及有關德爾福的問題應用程序 – 2014-10-24 14:06:03

+0

這是針對同一問題的解決方案。只有在不同的代碼。將我的單行代碼翻譯成Delphi代碼。這是OP的問題嗎? – Martin 2014-10-28 13:11:16

相關問題