• 一段托盘程序


    delphi托盘程序

    Delphi的托盘编程   。现在很多程序都用这个,比如傲游,迅雷等,主要代码如下:

    uses

    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

    Dialogs, ShellAPI, AppEvnts, StdCtrls, Menus;

    const WM_NID = WM_User + 1000; //声明一个常量

    private

        { Private declarations } // 定义两个函数

        procedure SysCommand(var SysMsg: TMessage); message WM_SYSCOMMAND;

        procedure WMNID(var msg:TMessage); message WM_NID;

    public

    end;

    var

    Form1: TForm1;

    NotifyIcon: TNotifyIconData; // 全局变量

    implementation

    {$R *.dfm}

    procedure TForm1.WMNID(var msg:TMessage);

    var

    mousepos: TPoint;

    begin

    GetCursorPos(mousepos); //获取鼠标位置

    case msg.LParam of

        WM_LBUTTONUP: // 在托盘区点击左键后

        begin

          Form1.Visible := not Form1.Visible; // 显示主窗体与否

          Shell_NotifyIcon(NIM_DELETE, @NotifyIcon); // 显示主窗体后删除托盘区的图标

          SetWindowPos(Application.Handle, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW); // 在任务栏显示程序

        end;

       

        WM_RBUTTONUP: PopupMenu1.Popup(mousepos.X, mousepos.Y); // 弹出菜单

    end;

    end;

    procedure TForm1.FormDestroy(Sender: TObject);

    begin

    Shell_NotifyIcon(NIM_DELETE, @NotifyIcon); // 删除托盘图标

    end;

    procedure TForm1.SysCommand(var SysMsg: TMessage);

    begin

    case SysMsg.WParam of

        SC_MINIMIZE: // 当最小化时

        begin

          SetWindowPos(Application.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_HIDEWINDOW);

          Hide; // 在任务栏隐藏程序

          // 在托盘区显示图标

          with NotifyIcon do

          begin

            cbSize := SizeOf(TNotifyIconData);

            Wnd := Handle;

            uID := 1;

            uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;

            uCallBackMessage := WM_NID;

            hIcon := Application.Icon.Handle;

            szTip := '托盘程序';

          end;

          Shell_NotifyIcon(NIM_ADD, @NotifyIcon); // 在托盘区显示图标

        end;

    else

        inherited;

    end;

    end;

    {以下三个函数为托盘右键菜单,可自行添加功能}

    procedure TForm1.N1Click(Sender: TObject);

    begin

    ShowMessage('Delphi托盘小程序!');

    end;

    procedure TForm1.N2Click(Sender: TObject);

    begin

    Form1.Visible := true; // 显示窗体

    SetWindowPos(Application.Handle, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW);

    Shell_NotifyIcon(NIM_DELETE, @NotifyIcon); // 删除托盘图标

    end;

    procedure TForm1.N3Click(Sender: TObject);

    begin

    Shell_NotifyIcon(NIM_DELETE, @NotifyIcon);

    Application.Terminate;

    end;

    end.

  • 相关阅读:
    [Docker]如何实现使用scp从任意路径中向Docker镜像中复制文件
    puma web server如何监听所有IP地址
    Consider increasing the configuration parameter "max_wal_size
    ABFramework中使用select查询表时,想要排除某些字段不显示的方法
    FireDAC内存表过虑的错误
    有了ABMeeting,远程控制再也不用什么向X葵了
    ABFramework中设置关联表下拉选择的方法
    太牛逼了
    python3 利用scapy抓取网卡数据包并保存pcap
    json数组根据某属性去重
  • 原文地址:https://www.cnblogs.com/onionhacker/p/3427890.html
Copyright © 2020-2023  润新知