delphi怎么写“最小化到系统托盘”(有控件最好)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi怎么写“最小化到系统托盘”(有控件最好)相关的知识,希望对你有一定的参考价值。
请直接贴源码
能有控件最好了,附上下载地址
另外,BS或者是DS(SP)皮肤上的 minimize to tray 为什么会无效?
我已经将它赋值成true了,还需要些什么代码吗?还是我操作不对?
最好两个问题一并回答,不定时追分
Thanks
const
MY_MESSAGE=WM_USER+100;
public
Public declarations
procedure proOnIconNotify(var MyMeg:TMessage);message MY_MESSAGE;
procedure TfrmTimer.FormCreate(Sender: TObject);
var
nid:TNotifyIconData;
begin
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW); //不在任务栏显示
//创建系统托盘图标开始
nid.cbSize:=sizeof(nid); //nid变量的字节数
nid.Wnd:=Handle; //主窗口句柄
nid.uID:=1; //内部标识,可设为任意数,但删除时应保持一致
nid.hIcon:=Application.Icon.Handle; //要加入的图标句柄,可任意指
nid.szTip:=\'定时启动器\'; //提示字符串
nid.uCallbackMessage:=MY_MESSAGE; //回调函数消息
nid.uFlags:=NIF_ICON or NIF_TIP or NIF_MESSAGE; //指明哪些字段有
if not Shell_NotifyIcon(NIM_ADD,@nid)then
MessageBox(handle,\'创建系统托盘图标失败!\',\'错误\',MB_ICONHAND + MB_OK);
//创建系统托盘图标结束
end;
procedure TfrmTimer.FormDestroy(Sender: TObject);
var
nid:TNotifyIconData;
begin
//删除系统托盘图标 开始
nid.cbSize:=sizeof(nid); //nid变量的字节数
nid.cbSize:=sizeof(nid); //nid变量的字节数
nid.uID:=1; //内部标识,与加入小图标时的数一致
nid.Wnd:=Handle; //主窗口句柄
Shell_NotifyIcon(NIM_DELETE,@nid); //去掉小图标
//删除系统托盘图标 结束
end;
procedure TfrmTimer.FormActivate(Sender: TObject);
begin
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_APPWINDOW); //在任务栏显示
end;
procedure TfrmTimer.proOnIconNotify(var MyMeg:TMessage);
begin
Case MyMeg.LParam of
WM_LBUTTONDBLCLK,WM_RBUTTONDOWN,WM_LBUTTONDOWN:
frmTimer.Show;
end;
end;uses ShellAPI;
const
MY_MESSAGE=WM_USER+100;
public
Public declarations
//点击系统托盘图标事件
procedure proOnIconNotify(var MyMeg:TMessage);message MY_MESSAGE;
procedure TfrmTimer.FormCreate(Sender: TObject);
var
nid:TNotifyIconData;
begin
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW); //不在任务栏显示
//创建系统托盘图标开始
nid.cbSize:=sizeof(nid); //nid变量的字节数
nid.Wnd:=Handle; //主窗口句柄
nid.uID:=1; //内部标识,可设为任意数,但删除时应保持一致
nid.hIcon:=Application.Icon.Handle; //要加入的图标句柄,可任意指
nid.szTip:=\'定时启动器\'; //提示字符串
nid.uCallbackMessage:=MY_MESSAGE; //回调函数消息
nid.uFlags:=NIF_ICON or NIF_TIP or NIF_MESSAGE; //指明哪些字段有
if not Shell_NotifyIcon(NIM_ADD,@nid)then
MessageBox(handle,\'创建系统托盘图标失败!\',\'错误\',MB_ICONHAND + MB_OK);
//创建系统托盘图标结束
end;
procedure TfrmTimer.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if(xPlanCount<1)then
proSvLog(\'程序关闭。\')
else
begin
if(MessageBox(handle,\'关闭程序将清理所有的定时启动任务,是否确认关闭?\',\'注意\',MB_YESNO+MB_ICONINFORMATION)=ID_NO)then
begin
Action:=caNone;
exit;
end;
Hide();
proSvLog(\'程序将关闭,开始清理线程!\');
while(xPlanCount>0)do
begin
proDelPlan(StrToInt(sgList.Cells[0,xPlanCount]));
end;
while(xTHreadCount>0)do
begin
Application.ProcessMessages;//解决循环独占问题以响应外部事件
end;
proSvLog(\'线程清理完成,程序关闭!\');
end;
end;
procedure TfrmTimer.FormDestroy(Sender: TObject);
var
nid:TNotifyIconData;
begin
//删除系统托盘图标 开始
nid.cbSize:=sizeof(nid); //nid变量的字节数
nid.cbSize:=sizeof(nid); //nid变量的字节数
nid.uID:=1; //内部标识,与加入小图标时的数一致
nid.Wnd:=Handle; //主窗口句柄
Shell_NotifyIcon(NIM_DELETE,@nid); //去掉小图标
//删除系统托盘图标 结束
end;
procedure TfrmTimer.FormActivate(Sender: TObject);
begin
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_APPWINDOW); //在任务栏显示
end;
procedure TfrmTimer.proOnIconNotify(var MyMeg:TMessage);//点击系统图标事件
begin
Case MyMeg.LParam of
WM_LBUTTONDBLCLK,WM_RBUTTONDOWN,WM_LBUTTONDOWN:
frmTimer.Show;
end;
end;
formClose()事件的代码直接无视吧,这个插代码的功能用着一肚子火。
第二个问题不懂,帮不了你
1、在程序最小化的时候,不显示在任务栏,这个可以用很多方法,比如ShowWindow = false。 这样就不显示了。
2、在托盘增加图标。定义一个全局变量: NotifyIcon:TNotifyIconData,NotifyIcon是非常重要的一个变量,整个程序基本上是围着这个变量在转。TNotifyIconData是一个记录类型,按住Ctrl键,在TNotifyIconData 双击即进入ShellAPI.pas单元。(注:在Delphi中,这是一个非常好的对源代码进行分析的方法,源代码说明一切,你要想知道程序背后的内幕,最好的方法就是分析源代码!)此时出现了以下赋值语句:
TNotifyIconData = TNotifyIconDataA,这个意思很明显,就是说TNotifyIconData和TNotifyIconDataA是同种数据类型,接着往下看有:
TNotifyIconDataA = _NOTIFYICONDATAA,意思与刚才的一样,再往下看:
type
_NOTIFYICONDATAA = record
cbSize: DWORD;
Wnd: HWND;
uID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
hIcon: HICON;
szTip: array [0..63] of AnsiChar;
end;
请百度一下我发的那个函数,就会写托盘了。 参考技术B 要控件的话我传个给你
foobar2000设置关闭按钮最小化到系统托盘
1、设置托盘选项:
2、【File】->【Preferences】->【Advanced】->【Display】->【Default User Interface】->【Close minimises】
最后来一张经典皮肤感受下foobar2000的强大:
以上是关于delphi怎么写“最小化到系统托盘”(有控件最好)的主要内容,如果未能解决你的问题,请参考以下文章