2015-10-15 41 views
0

我使用此代碼顯示TrayIcon它的工作原理和TrayIcon出現在Systray中,但它不顯示BalloonHint;我試圖改變一些設置,但它仍然不顯示通知TrayIcon不顯示通知

procedure TMainForm.FormCreate(Sender: TObject); 
begin 
    TrayIcon1.Hint := 'Hint'; 
    TrayIcon1.AnimateInterval := 200; 
    TrayIcon1.BalloonTitle := 'Hint'; 
    TrayIcon1.BalloonHint := 'Double click to restore Application'; 
    TrayIcon1.BalloonFlags := bfInfo; 
end; 

procedure TMainForm.ApplicationEvents1Minimize(Sender: TObject); 
begin 
    Hide(); 
    WindowState := wsMinimized; 
    TrayIcon1.Visible := True; 
    TrayIcon1.Animate := True; 
    TrayIcon1.ShowBalloonHint; 
end; 

procedure TMainForm.TrayIcon1DblClick(Sender: TObject); 
begin 
    TrayIcon1.Visible := False; 
    Show(); 
    WindowState := wsNormal; 
    Application.BringToFront(); 
end; 

這段代碼有什麼問題?


該項目最初是用Delphi7編寫的,現在升級到DelphiXE8。

+1

爲什麼要改變'WindowState'?這足以隱藏主窗體 –

+0

我只是用它來確保「MainForm」已被最小化 –

+1

你隱藏了主窗體。這就是從任務欄中刪除按鈕。最小化隱藏表單毫無意義。這樣做意味着您忘記了表單是正常化還是最大化還是最小化。 –

回答

-1

有一個與代碼沒有問題,它看起來窗戶問題
重新安裝Windows固定它

+0

問題是舊的,所以我只是不想永遠離開它沒有答案,我沒有刪除它,因爲也許別人有同樣的問題,並繼續搜索和更改代碼就像我之前重新安裝Windows一樣 –

0

你需要做的有點不同。首先你需要檢查表單何時最小化。這可能通過捕捉消息WM_SIZE

procedure WMSize(var Msg: TMessage); message WM_SIZE; 

然後進行:

procedure TForm1.WMSize(var Msg: TMessage); 
begin 
    if Msg.WParam = SIZE_MINIMIZED then .... 
end; 

通常你也想關閉按鈕,以儘量減少應用程序。這可以通過實施一個CloseQuery事件來實現。

我給你做了一個基於你自己的代碼的小例子。

首先DFM代碼:

object Form11: TForm11 
    Left = 0 
    Top = 0 
    Caption = 'Form11' 
    ClientHeight = 299 
    ClientWidth = 635 
    Color = clBtnFace 
    Font.Charset = DEFAULT_CHARSET 
    Font.Color = clWindowText 
    Font.Height = -11 
    Font.Name = 'Tahoma' 
    Font.Style = [] 
    OldCreateOrder = False 
    OnCloseQuery = FormCloseQuery 
    OnCreate = FormCreate 
    OnHide = FormHide 
    PixelsPerInch = 96 
    TextHeight = 13 
    object TrayIcon1: TTrayIcon 
    OnDblClick = TrayIcon1DblClick 
    Left = 312 
    Top = 152 
    end 
    object PopupMenu1: TPopupMenu 
    Left = 184 
    Top = 112 
    object Close1: TMenuItem 
     Caption = 'Close' 
     Default = True 
     OnClick = Close1Click 
    end 
    end 
end 

然後實際的源代碼:

unit Unit11; 

interface 

uses 
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.Menus; 

type 
    TForm11 = class(TForm) 
    TrayIcon1: TTrayIcon; 
    PopupMenu1: TPopupMenu; 
    Close1: TMenuItem; 
    procedure FormCreate(Sender: TObject); 
    procedure FormHide(Sender: TObject); 
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); 
    procedure Close1Click(Sender: TObject); 
    procedure TrayIcon1DblClick(Sender: TObject); 
    private 
    AllowClose: Boolean; 
    public 
    procedure WMSize(var Msg: TMessage); message WM_SIZE; 
    end; 

var 
    Form11: TForm11; 

implementation 

{$R *.dfm} 

procedure TForm11.Close1Click(Sender: TObject); 
begin 
    AllowClose := True; 
    Close; 
end; 

procedure TForm11.FormCloseQuery(Sender: TObject; var CanClose: Boolean); 
begin 
    CanClose := AllowClose; 
    if not AllowClose then 
    Hide; 
end; 

procedure TForm11.FormCreate(Sender: TObject); 
begin 
    AllowClose := false; 
    TrayIcon1.Hint := 'Hint'; 
    TrayIcon1.AnimateInterval := 200; 
    TrayIcon1.BalloonTitle := 'Hint'; 
    TrayIcon1.BalloonHint := 'Double click to restore Application'; 
    TrayIcon1.BalloonFlags := bfInfo; 
end; 

procedure TForm11.FormHide(Sender: TObject); 
begin 
    TrayIcon1.Visible := True; 
    TrayIcon1.Animate := True; 
    TrayIcon1.ShowBalloonHint; 
end; 

procedure TForm11.TrayIcon1DblClick(Sender: TObject); 
begin 
    TrayIcon1.Visible := false; 
    Show(); 
    WindowState := wsNormal; 
    Application.BringToFront(); 
end; 

procedure TForm11.WMSize(var Msg: TMessage); 
begin 
    if Msg.WParam = SIZE_MINIMIZED then 
    Close; 
end; 

end. 
+0

我只是現在試過了,它仍然不顯示'Notification' –

+0

然後你做錯了什麼。我剛剛從我發佈的代碼中做了一個「新」測試。它工作得很好。在這裏下載我的代碼。 https://www.dropbox.com/s/x03g8i01yew9ehe/Hint.zip?dl = 0 –

+0

我通常在我的問題中使用代碼,它始終只與這個應用程序一起工作,因此我不知道問題在哪裏,如果我製作新的項目,它將毫無問題地工作。 –

3

是沒有錯的代碼。 它似乎是您的操作系統級別設置Notification Area Icons這是錯誤的(= Hide icon and notifications)。 打開Control Panel\All Control Panel Items\Notification Area Icons併爲您的應用程序選擇Only show notifications或​​3210。

+0

那麼它沒有工作我的電腦。 –

+2

@JensBorrisholt顯然它在我的作品,這是我檢查的第一件事。 –

+0

'Notifications'已設置爲此應用的「顯示圖標和通知」,所有其他應用和所有其他應用顯示通知沒有問題。 –