delphi 关闭时缩小到托盘_程序启动后直接最小化到托盘栏(delphi) | 学步园

unit   ServerMain;

interface

uses

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

StdCtrls,   IniFiles,   ExtCtrls,   bsSkinData,   BusinessSkinForm,   Menus,

bsSkinMenus,shellapi,   ImgList;

type

Tmain   =   class(TForm)

bsSkinData:   TbsSkinData;

bsBusinessSkinForm1:   TbsBusinessSkinForm;

Image1:   TImage;

Timer1:   TTimer;

Label1:   TLabel;

PopupMenu1:   TbsSkinPopupMenu;

N1:   TMenuItem;

N2:   TMenuItem;

N3:   TMenuItem;

N4:   TMenuItem;

Timer2:   TTimer;

ImageList1:   TImageList;

procedure   FormCreate(Sender:   TObject);

procedure   FormDestroy(Sender:   TObject);

procedure   N3Click(Sender:   TObject);

procedure   N4Click(Sender:   TObject);

procedure   FormClose(Sender:   TObject;   var   Action:   TCloseAction);

private

{   Private   declarations   }

public

{   Public   declarations   }

procedure   WndProc(var   Msg:   TMessage);   override;

end;

const

TrayMsgStr   =   'TrayNotifyIconMsg';

var

main:   Tmain;

shi,fen,miao:integer;

nd0,nd1:   NotifyIconData;

hs:   array[0..1]of   LongWord;

WM_TRAYNOTIFY:   Cardinal;

IconFlag:   integer;

implementation

{$R   *.DFM}

procedure   TMain.WndProc(var   Msg:   TMessage);

var

pt:TPoint;

begin

with   Msg   do

begin

if   Msg   =   WM_TRAYNOTIFY   then

begin

case   lParam   of

WM_LBUTTONDOWN:

begin

hs[1]:=LoadIcon(hInstance,   'Icon1');

nd1.cbSize   :=   sizeof(NotifyIconData);

nd1.Wnd   :=   Handle;

nd1.uID   :=   1;

nd1.uFlags   :=   NIF_MESSAGE   or   NIF_ICON   or   NIF_TIP;

nd1.uCallbackMessage   :=   WM_TRAYNOTIFY;

nd1.hIcon   :=   hs[1];

StrPLCopy(nd1.szTip,   'Thank   You   !',63);

Shell_NotifyIcon(NIM_MODIFY,@nd1);

IconFlag   :=1;

Main.Show   ;

end;

WM_LBUTTONDBLCLK:

begin

ShowMessage('double   click');

end;

WM_RBUTTONDOWN:

begin

SetForegroundWindow(Handle);

GetCursorPos(pt);

PopupMenu1.Popup(Pt.X,   Pt.Y);

end;

end;

end;

end;

inherited;

end;

procedure   Tmain.FormCreate(Sender:   TObject);

begin

setwindowlong(application.handle,gwl_exstyle,ws_ex_toolwindow);

WM_TRAYNOTIFY   :=   RegisterWindowMessage(TrayMsgStr);

hs[0]:=LoadIcon(hInstance,   'MainIcon');

nd0.cbSize   :=   sizeof(NotifyIconData);

nd0.Wnd   :=   Handle;

nd0.uID   :=   0;

nd0.uFlags   :=   NIF_MESSAGE   or   NIF_ICON   or   NIF_TIP;

nd0.uCallbackMessage   :=   WM_TRAYNOTIFY;

nd0.hIcon   :=   hs[0];

StrPLCopy(nd0.szTip,   '速普得应用服务器,正在运行...',63);

Shell_NotifyIcon(NIM_ADD,@nd0);

IconFlag   :=0;

with   Timer2   do

begin

Enabled   :=   False;

Interval   :=   GetDoubleClickTime;

end;

end;

procedure   Tmain.FormDestroy(Sender:   TObject);

begin

if     (IconFlag=0)     then

Shell_NotifyIcon(NIM_DELETE,   @nd0)

else

Shell_NotifyIcon(NIM_DELETE,   @nd1);

end;

procedure   Tmain.N3Click(Sender:   TObject);

begin

main.Show;

end;

procedure   Tmain.N4Click(Sender:   TObject);

begin

beep;

if   messagedlg('如果你退出该服务,ERP系统将无法正常运行!'+#13+'你确定要强行退出应用服务器吗?   Y/N',mtwarning,[mbyes,mbno],0)   =   mryes   then

Application.Terminate;

end;

procedure   Tmain.FormClose(Sender:   TObject;   var   Action:   TCloseAction);

begin

Action   :=   caNone;

main.Hide;

end;

end.

trayicon类的使用 //新建一个基于单文档的工程 //将trayicon类引入工程,并引入图标作为动态显示用 //在工程中新建一个菜单ID为IDR_TRAYPOPUP,添加两个命令ID:ID_SHOWWINDOW 和 ID_HIDEWINDOW //并利用类向导在CMainFrame类中为它们添加命令处理函数 void CMainFrame::OnShowwindow() { // 显示窗口 this->ShowWindow(SW_SHOW); } void CMainFrame::OnHidewindow() { // 隐藏窗口 this->ShowWindow(SW_HIDE); } //在类CMainFrame头文件前添加 #include "ntray.h" #define MAXICONS (int)9 //定义图标的最大数目,具体工程具体修改数目 #define DELAY (DWORD)100 //定义动画图标的间延迟 //在DECLARE_MESSAGE_MAP()前添加自定义消息 afx_msg LRESULT OnTrayNotification(WPARAM wParam, LPARAM lParam); //声明trayicon类对象 CTrayNotifyIcon m_TrayIcon; //声明图标数组 HICON m_hIcons[MAXICONS]; //在CMainFrame的实现文件中添加消息宏ID #define WM_TRAYNOTIFY (WM_USER + 100) //在BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) 和 END_MESSAGE_MAP()之间添加消息映射 ON_MESSAGE(WM_TRAYNOTIFY, OnTrayNotification) //在CMainFrame的实现文件中定义消息处理函数 LRESULT CMainFrame::OnTrayNotification(WPARAM wParam, LPARAM lParam) { //Delegate all the work back to the default implementation in //CTrayNotifyIcon. return m_TrayIcon.OnTrayNotification(wParam, lParam); } //在CMainFrame的构造函数中添加icon的初始化代码 for (int i=0; i<MAXICONS; i++) { //任务图标,注意引入的图标的ID值为连续的,且IDI_ICON1的值为图标ID中最小的 m_hIcons[i] = AfxGetApp()->LoadIcon(IDI_ICON1 + i); } //在CMainFrame的OnCreate(LPCREATESTRUCT lpCreateStruct) 函数中添加 if (!m_TrayIcon.Create(this, IDR_TRAYPOPUP, _T("提示信息"), m_hIcons, MAXICONS, DELAY, WM_TRAYNOTIFY)) { AfxMessageBox(_T("Failed to create tray icon"), MB_OK | MB_ICONSTOP); return -1; } //在需要使用动态图标或静态图标处加入以下代码 if (m_TrayIcon.UsingAnimatedIcon())//判断是否处于动态显示状态 { m_TrayIcon.SetIcon(m_hIcons[0]);//设置通知区为静态图标 m_TrayIcon.SetTooltipText(_T("静止也美!")); } else { m_TrayIcon.SetIcon(m_hIcons, MAXICONS, DELAY);//设置通知区为动态图标 m_TrayIcon.SetTooltipText(_T("运动才美!")); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值