delphi怎么写“最小化到系统托盘”(有控件最好)
请直接贴源码能有控件最好了,附上下载地址另外,BS或者是DS(SP)皮肤上的minimizetotray为什么会无效?我已经将它赋值成true了,还需要些什么代码吗?还是...
请直接贴源码
能有控件最好了,附上下载地址
另外,BS或者是DS(SP)皮肤上的 minimize to tray 为什么会无效?
我已经将它赋值成true了,还需要些什么代码吗?还是我操作不对?
最好两个问题一并回答,不定时追分
Thanks 展开
能有控件最好了,附上下载地址
另外,BS或者是DS(SP)皮肤上的 minimize to tray 为什么会无效?
我已经将它赋值成true了,还需要些什么代码吗?还是我操作不对?
最好两个问题一并回答,不定时追分
Thanks 展开
3个回答
展开全部
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.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()事件的代码直接无视吧,这个插代码的功能用着一肚子火。
第二个问题不懂,帮不了你
AiPPT
2024-09-19 广告
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图...
点击进入详情页
本回答由AiPPT提供
2013-04-20
展开全部
要源码的话,我可以帮你写一个。 不过你最好还是看看我说的,然后自己去写吧。
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;
请百度一下我发的那个函数,就会写托盘了。
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;
请百度一下我发的那个函数,就会写托盘了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-04-20
展开全部
要控件的话我传个给你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询