• delphi trayIcon控件,如何实现窗口最小化的时候到系统托盘?


     trayIcon控件,如何实现窗口最小化的时候到系统托盘?
    就象QQ的那样,一点最小化就到右下脚的图标里,点击右下脚图标,又能打开窗体。
    应该如何设置属性,或者事件呢?拜托各位大哥……指教一二
    
    unit Unit1;
    interface
    
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls,shellapi, Menus, ExtCtrls;
    
    const
    WM_TRAYNOTIFY=10;
    
    type
    TForm1 = class(TForm)
    Button1: TButton;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    Timer1: TTimer;
    Button2: TButton;
    Button3: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure wmTrayNotify(var Msg:TMessage);message WM_TRAYNOTIFY;
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    private
    ChangeFlag: Boolean;
    A:Boolean;
    Icon: TIcon;
    Nid:TNotifyIconData;
    { Private declarations }
    public
    
    { Public declarations }
    end;
    
    var
    Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    ChangeFlag := false;
    A:= True;
    { Nid.cbSize:=sizeof(TNotifyIconData);
    Nid.Wnd:=Handle;
    Nid.uID:=1000;
    Nid.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
    Nid.uCallbackMessage:=WM_TRAYNOTIFY;
    Nid.hIcon:=Application.Icon.Handle;
    Nid.szTip:='我隐藏在系统托盘里了';
    Shell_NotifyIcon(NIM_ADD,@Nid); }
    Icon:= TIcon.Create;
    Icon.LoadFromFile('C:Program FilesMicrosoft OfficeOFFICE11MSN.ICO');
    
    end;
    
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
    Shell_NotifyIcon(NIM_DELETE,@Nid);
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Nid.cbSize:=sizeof(TNotifyIconData);
    Nid.Wnd:=Handle;
    Nid.uID:=1000;
    Nid.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
    Nid.uCallbackMessage:=WM_TRAYNOTIFY; 
    Nid.hIcon:=Application.Icon.Handle;
    Nid.szTip:='我隐藏在系统托盘里了';
    Shell_NotifyIcon(NIM_ADD,@Nid);
    ShowWindow(Application.Handle,SW_SHOWMINIMIZED);
    ShowWindow(Application.Handle,SW_HIDE);
    Timer1.Enabled:= True;
    end;
    
    procedure TForm1.wmTrayNotify(var Msg: TMessage);
    var 
    p:TPoint; 
    begin
    if(Msg.lparam=WM_LBUTTONDBLCLK) then
    begin
    ShowWindow(Application.Handle,SW_SHOW);
    Shell_NotifyIcon(NIM_DELETE,@Nid);
    Timer1.Enabled:= False;
    Application.Restore;
    end
    else if(Msg.LParam=WM_RButtonUp) then
    begin
    GetCursorPos(P);//获得鼠标坐标
    PopupMenu1.Popup(P.X, P.Y);//在鼠标光标处显示弹出菜单
    end;
    end;
    
    procedure TForm1.N1Click(Sender: TObject);
    begin
    ShowWindow(Application.Handle,SW_SHOW);
    Shell_NotifyIcon(NIM_DELETE,@Nid);
    Application.Restore;
    Timer1.Enabled:= False;
    end;
    
    procedure TForm1.N2Click(Sender: TObject);
    begin
    Application.Terminate;
    end;
    
    procedure TForm1.FormShow(Sender: TObject);
    begin
    
    Timer1.Enabled:= False;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    
    begin
    ChangeFlag:= True;
    { Icon:= TIcon.Create;
    Icon.LoadFromFile('C:Program FilesMicrosoft OfficeOFFICE11MSN.ICO');
    Nid.cbSize:=sizeof(TNotifyIconData);
    Nid.Wnd:=Handle;
    Nid.uID:=1000;
    Nid.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
    Nid.uCallbackMessage:=WM_TRAYNOTIFY;
    Nid.hIcon:=Icon.Handle;
    Shell_NotifyIcon(NIM_MODIFY,@Nid);}
    end;
    
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    if not ChangeFlag then
    Exit;
    if A then
    begin
    Nid.hIcon:= Icon.Handle;
    Shell_NotifyIcon(NIM_MODIFY,@Nid);
    A:= False;
    end
    else begin
    Nid.hIcon:= Application.Icon.Handle;
    Shell_NotifyIcon(NIM_MODIFY,@Nid);
    A:= True;
    end;
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    ChangeFlag:= False;
    end;
    
    end.
  • 相关阅读:
    关于遇到问题的解决方法(仅此献给初学者吧,我工作还没两年,这点经验对于大神,不值一谈的)
    chm TO html 另类方法
    Android EditText setOnClickListener事件 只有获取焦点才能响应 采用setOnTouchListener解决
    Jquery UI 中Tree组件的json格式,java递归拼接demo
    汇编 二则运算
    创建 macvlan 网络
    准备 macvlan 环境
    overlay 是如何隔离的?- 每天5分钟玩转 Docker 容器技术(53)
    overlay 如何实现跨主机通信?- 每天5分钟玩转 Docker 容器技术(52)
    在 overlay 中运行容器
  • 原文地址:https://www.cnblogs.com/jijm123/p/12602700.html
Copyright © 2020-2023  润新知