delphi 实现最小化系统托盘

1、new -->application

2、在form1中加入一个tPopMenu 命名为pm1

3、uses ShellAPI;

4、定义一个常量在
const
WM_TRAYMSG = WM_USER + 101;

5、在private中生命变量
NotifyIcon: TNotifyIconData;

6.声明两个消息

 procedure TfrmMain.WMSysCommand(var Msg: TMessage);
    begin
      if Msg.WParam = SC_ICON then
        Self.Visible := False
    else
      DefWindowProc(Self.Handle, Msg.Msg, Msg.WParam, Msg.LParam);
    end;

    procedure TfrmMain.WMTrayMsg(var Msg: TMessage);//声明托盘消息
    var
      p: TPoint;
    begin
      case Msg.LParam of
        WM_LBUTTONDOWN: Self.Visible := True;   //显示窗体
        WM_RBUTTONDOWN:
        begin
              SetForegroundWindow(Self.Handle);   //把窗口提前
            GetCursorPos(p);
          pm1.Popup(p.X, p.Y);
        end;
     end;

    end;

7、oncreate中

  with NotifyIcon do
  begin
    cbSize := SizeOf(TNotifyIconData);
    Wnd := Self.Handle;
    uID := 1;
    uFlags := NIF_ICON + NIF_MESSAGE + NIF_TIP;   //图标、消息、提示信息
    uCallbackMessage := WM_TRAYMSG;
    hIcon := Application.Icon.Handle;
    szTip := ‘erp服务‘;
  end;
  Shell_NotifyIcon(NIM_ADD, @NotifyIcon);

  //去掉关闭按钮
   EnableMenuItem(GetSystemMenu(Handle, FALSE), SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);

8、ondestroy中
Shell_NotifyIcon(NIM_DELETE, @NotifyIcon);

整体代码

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellAPI, Menus;

const
  WM_TRAYMSG = WM_USER + 101;

type
  TForm1 = class(TForm)
    pm1: TPopupMenu;
    N1: TMenuItem;
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    NotifyIcon: TNotifyIconData;
    procedure WMTrayMsg(var Msg: TMessage); message WM_TRAYMSG;    //声明托盘消息
    procedure WMSysCommand(var Msg: TMessage); message WM_SYSCOMMAND;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Shell_NotifyIcon(NIM_DELETE, @NotifyIcon);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  with NotifyIcon do
  begin
    cbSize := SizeOf(TNotifyIconData);
    Wnd := Self.Handle;
    uID := 1;
    uFlags := NIF_ICON + NIF_MESSAGE + NIF_TIP;   //图标、消息、提示信息
    uCallbackMessage := WM_TRAYMSG;
    hIcon := Application.Icon.Handle;
    szTip := ‘erp服务‘;
  end;
  Shell_NotifyIcon(NIM_ADD, @NotifyIcon);

  //去掉关闭按钮
  EnableMenuItem(GetSystemMenu(Handle, FALSE), SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
end;

{ TForm1 }

procedure TForm1.WMSysCommand(var Msg: TMessage);
begin
  if Msg.WParam = SC_ICON then
    Self.Visible := False
  else
    DefWindowProc(Self.Handle, Msg.Msg, Msg.WParam, Msg.LParam);
end;

procedure TForm1.WMTrayMsg(var Msg: TMessage);
var
  p: TPoint;
begin
  case Msg.LParam of
    WM_LBUTTONDOWN: Self.Visible := True;   //显示窗体
    WM_RBUTTONDOWN:
    begin
      SetForegroundWindow(Self.Handle);   //把窗口提前
      GetCursorPos(p);
      pm1.Popup(p.X, p.Y);
    end;
  end;

end;

end.

//这是从网上找的在delphi7测试通过(引用的哪忘了)--- http://blog.csdn.net/akof1314/article/details/6411179 这个列牛B

时间: 2024-10-10 15:40:08

delphi 实现最小化系统托盘的相关文章

Delphi - 利用TRzTrayIcon实现WinFrm工程最小化到托盘

第三方RC控件的安装 浏览器搜索Delphi Rz控件下载,找到下载一个安装文件,解压后点击RC3.exe一键安装. Delphi WinFrm工程最小化到托盘 Delphi新建WinFrm工程,在主窗体上添加TRzTrayIcon.TImageList和TPopupMenu.此时运行工程,点击最小化即可实现到托盘的效果. 系统最小化时实现提示信息 选中RzTrayIcon,单击F11,选择Events,双击OnMinimizeApp,写如下代码: procedure TForm1.RzTray

Outlook2007最小化至托盘

设置outlook新邮件到达提醒:Tool->Options->Prefrences->Email->Email Options->Advanced Email Options->When new items arrive in my Inbox这里面几项你根据需要设置一下就可以了. OUTLOOK启动后最小化总是在任务栏上占一个位置,工作起来碍事,所以希望它能够最小化到托盘,以下方法可以帮你实现: 打开注册表 : 开始菜单 -> 运行, 输入"rege

vb最小化到托盘

'-----------------------窗体中-------------------------- Dim WindowTop, WindowLeft Function WindowStyle() '以下把程序放入System Tray====================================System Tray Begin With nfIconData .hWnd = Me.hWnd .uID = Me.Icon .uFlags = NIF_ICON Or NIF_M

托盘图标_实现方法_最小化到托盘_关闭到托盘_delphi_托盘汇总

托盘图标_实现方法_最小化到托盘_关闭到托盘_delphi_托盘汇总 转自:http://midasyang.blog.163.com/blog/static/189744104201141245344681/ 启动不显示主窗体如果通过Form1.Visible:=False;语句来实现的话,会出现主窗体一闪而过的情形.更好的办法是在OnShow事件中添加Application.ShowMainForm := False; 程序不出现在任务栏procedure TForm1.FormShow(S

VC实现窗口最小化至托盘

所谓的"托盘",在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分.在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区. 一 .原理 1.最小化的原理:首先要将窗口隐藏,然后 在右下角绘制图标. 2.恢复的原理:将窗口显示,再将托盘中的图片删除. 二.代码实现 1.自定义消息WM_SHOWTASK: 为了防止用户定义的消息ID与系统的消息ID冲突,MS定义了一个宏WM_USER,小于WM_USER的ID被系统使用,大于 WM_USE

最小化到托盘

这个办法主要是针对Delphi2010或者更高版本, 利用自带的TTrayIcon来实现最小化到托盘的功能, 至于低版本, 比如D7, 使用RZ的Tray控件就好了 主要修改点: 1.2010或者更高版本, 自带了一个TTrayIcon控件来实现托盘图标, 但是这个控件没有实现最小化时隐藏的功能 2.2010或者更高版本增加了MainFormOnTaskbar功能, 众所周知, delphi的任务栏按钮一直都不是标准的windows风格, 有了这个设置后, 任务栏按钮正常了, 但是也为我们的这个

将VMware工作站最小化到托盘栏

目录 前言 将VMware最小化到托盘栏的方法 1.下载 Trayconizer 2.解压 trayconizerw.zip 3.创建 VMware 快捷方式 4.修改 VMware 快捷方式 5.运行 前言 因为一直要用到虚拟机,每次最小化的时候,总是占用任务栏,很不爽,于是在网上搜索了一番,终于找到一个可以用的方法. 将VMware最小化到托盘栏的方法 首先下载一个软件,叫做Trayconizer,最好把这个文件放在固定的目录下,比如我放在了D盘下的ProgramFiles目录下. 1.下载

WPF实现窗口最小化到托盘,并且实现右击菜单

原版是从网上找了一位大神的,自己只是用了一点适合自己的. 具体实现 1.首先已经确认WPF中没有实现最小化托盘的类与方法,用到了winform中的程序集 using Drawing = System.Drawing;using Forms = System.Windows.Forms; 2.XAML的后代相应事件的Demo,只是为了看起来方便~!其中也包含了在任务栏中不现实图标,只在托盘中显示.双击实现窗口的还原.没用到大神写的,自己琢磨了个,令人想不到的蛋疼的后果还没出现,也就暂时这样了. 1

WinForm 之 窗口最小化到托盘及右键图标显示菜单

Form最小化是指整个Form都缩小到任务栏上,但是窗体以Form的标题栏形式显示在任务栏上, 若是想让Form以Icon的形式显示在任务栏右下角,则需要给Form添加一个NotifyIcon控件. 一.添加NotifyIcon控件 1 如下图为窗体添加一个 NotifyIcon 控件,并指定 Icon 和 Text 属性,如下图: 2 在需要窗体最小化到托盘的处理代码中,添加如下代码: if(this.WindowState==FormWindowState.Normal&&this.V