2015-10-15 90 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'已设置为此应用的“显示图标和通知”,所有其他应用和所有其他应用显示通知没有问题。 –