菜鸟问题:程序缩小到任务栏!

zhourongbiao 2001-10-06 10:45:55
我用
ShowWindow(handle,SW_HIDE);
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);//*
AddTrayIcon;
来实现程序缩小到任务栏。其中*句是为了其不在任务条上出现。程序名为Project1,AddTrayIcon代码为:
with IconData do begin
cbSize := sizeof(IconData);
Wnd := Handle;
UID := 1001;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
hIcon := Application.Icon.Handle;
szTip := 'App1.0';
end;
shell_NotifyIcon(NIM_ADD,@IconData);

可是缩小后老是在任务条上留有一个无图标的标志,文字为Project1。可是如果将*句在formcreate中调用
就一切正常,为什么?
...全文
45 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yxjjx 2001-10-06
  • 打赏
  • 举报
回复
老兄发一个程序给你参考:
unit Unit1;

interface

uses
Windows, Messages, SysUtils,shellapi, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

const
WM_MYTRAYICONCALLBACK=wm_user +1000;
Wm_DetectToCardetect=wm_user +1005;

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
Mytrayicon:Tnotifyicondata;
procedure wmmytrayiconcallback(var msg:tmessage);message wm_mytrayiconcallback;
procedure WMSysCommand(var Message:TWMSysCommand); message WM_SYSCOMMAND;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
//设定TnotifyiconData的记录长度
Mytrayicon.cbsize:=sizeof(TNotifyicondata);
//确定调用程序的窗体句柄
myTrayicon.wnd:=Handle;
//确定图标的uid
mytrayicon.uid:=1;
//设定显示标记
mytrayicon.uflags:=nif_icon or nif_tip or nif_message;
//用户自定义消息
mytrayicon.ucallbackmessage:=wm_mytrayiconcallback;
//托盘图标的句柄,这里我们使用了程序的图标
mytrayicon.hicon:=loadicon(0,idi_winlogo);
//mytrayicon.hicon:=application.icon.handle;
//图标的提示信息,即黄色的hint
//mytrayicon.sztip:='托盘[mytrayicon]';
mytrayicon.sztip:='你好';
//向托盘中添加图标
shell_notifyicon(nim_add,@mytrayicon);
//application.ShowMainForm:=visible;//隐藏界面 用下一句也可
application.ShowMainForm:=false;//隐藏界面
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
shell_notifyicon(nim_delete,@mytrayicon);
end;


procedure TForm1.wmmytrayiconcallback(var msg: tmessage);
var cursorpos:tpoint;
begin
//在这里处理用户点击托盘图标事件,可以根据WM_MOUSEMOVE消息的不同情况产生不同的回应,
//例如区别对待单击和双击等等
case msg.lparam of
wm_lbuttondblclk: begin
//设为相反的显示开关
visible:=not visible;
//使得程序主窗口可见
application.ShowMainForm:=visible;
//将程序界面设为当前焦点
setforegroundwindow(application.handle);
end;
wm_rbuttondown: begin //右键点击响映弹出菜单
getcursorpos(cursorpos);
//popupmenu1.popup(cursorpos.x,cursorpos.y);
end;
end;
end;

procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
if message.CmdType=sc_minimize then
begin
visible:=false;
application.ShowMainForm:=visible;
end
else
inherited;
end;


end.
zds0707 2001-10-06
  • 打赏
  • 举报
回复
用 rxlib的控件 RxTrayIcon1

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧