zoukankan      html  css  js  c++  java
  • delphi 实现最小化系统托盘(rz控件最简单 评论)

    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;
    View Code

    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);
    View Code

    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.
    View Code

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

  • 相关阅读:
    HDU 1114 Piggy-Bank
    HDU 2955 Robberies
    NTOJ 290 动物统计(加强版)
    POJ 3624 Charm Bracelet
    HDU 2602 Bone Collector
    POJ 1523 SPF(无向图割顶)
    HDU 5311 Hidden String
    HDU 1421 搬寝室
    HDU 1058 Humble Numbers
    POJ 3259 Wormholes(spfa判负环)
  • 原文地址:https://www.cnblogs.com/SoftWareIe/p/4595837.html
Copyright © 2011-2022 走看看