当前位置:主页>仓库管理软件> 列表

如何自定义系统托盘的图标。 找最简单的进销存软件

记账软件版1楼: 我需要自已的图标,不要delphi默认的图标,要怎么做啊!
最好有实例,谢谢。

2楼: 这段代码是dfw上搜的,但这个是默认的delphi图标,怎样把这默认的图标改为自已想要的图标呢??
interface
uses
Menus,shellAPI;
const WM_MYTRAYICONCALLBACK = WM_USER + 1000 ;
private
MyTrayIcon : TNotifyIconData ;
procedure WMMyTrayIconCallBack(Var Msg : TMessage); message WM_MYTRAYICONCALLBACK ;
procedure WMCommand(Var msg : TWMCommand); message WM_Command;
procedure Minimize(var mess:TWMNCLBUTTONDOWN); message WM_NCLBUTTONDOWN;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
Icon.Handle := LoadIcon(Hinstance,''MAINICON'');
MyTrayIcon.cbSize := SizeOf(TNotifyIconData);// nid变量的字节数
MyTrayIcon.Wnd := Handle ;// 主窗口句柄
MyTrayIcon.uID := 1 ;// 内部标识,可设为任意数
MyTrayIcon.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE ;// 指明哪些字段有效


MyTrayIcon.uCallBackMessage := WM_MYTRAYICONCALLBACK ;//回调函数消息,将自定义托盘消息传递进去
MyTrayIcon.hIcon := Application.Icon.Handle; // 要加入的图标句柄,可任意指定
StrCopy(MyTrayIcon.szTip, PChar(Caption));
Shell_NotifyIcon(NIM_ADD,@MyTrayIcon);
ShowWindow(Handle,sw_Hide);
// Visible := False ;//当程序启动时就最小化在托盘区即Form.Create时启用此语句
Application.ShowMainForm := False ;
SetForegroundWindow(Application.Handle);
end;

////消息过程实现
procedure TForm1.WMMyTrayIconCallBack(var Msg: TMessage);
var CursorPos : TPoint;
begin
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);
popupmen1里面就可以加入显示主窗口、退出等功能。这个右键菜单可以是静态的,如上面一句来弹出;也可以动态建立,如下面所示的方法:}


pm := createpopupmenu;//建立一个Hmenu,pm:hmenu;
AppendMenu(pm,0,ord(''A''),''关于....'');//在指定的菜单里添加一个菜单项
AppendMenu(pm,0,Ord(''B''),''&Exit'');
//加入菜单事件---》处理WMCOMMAND消息即可
TrackPopupMenu(pm,Tpm_BottomAlign or Tpm_RightAlign, CursorPos.x, CursorPos.y, 0,handle,nil);
//在图标上方显示该弹出式菜单
end ;
end ;
end;

procedure TForm1.WMCommand(var msg : TWMCommand);
begin
Case msg.ItemID of
Ord(''A'') : showmessage(''我的右键菜单!'');
Ord(''B'') : Self.close;//关闭程序主窗体
else inherited;
end;
end;

procedure Tform1.Minimize(var mess:TWMNCLBUTTONDOWN);//应用程序最小化消息处理
begin
if Mess.Hittest = htReduce then
Self.Hide
else inherited;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var {程序被关闭时通知Windows去掉小图标}
nid: TNotifyIconData;
begin


nid.cbSize := sizeof(nid); // nid变量的字节数
nid.uID := 1; //内部标识,与加入小图标时的数一致
nid.Wnd := Handle; //主窗口句柄
Shell_NotifyIcon(NIM_DELETE, @nid); //去掉小图标
end; 如公司财务管理软件

3楼: 用这个控件吧。。。CoolTrayIcon
很简单的。。。要我做的例子的话
bbgsgs@163.com

4楼: 是不是象QQ那样最小话时候的图标啊?

5楼: 对,用CoolTrayIcon就可以,非常方便。

6楼: 挺简单:
//hImageList: 一个ImageList; nIndex: 图标序号
procedure SetTrayIcon(hImageList: TImageList; nIndex: Longint);
begin
with MyTrayIcon do
begin
if hIcon <> 0 then DestroyIcon(hIcon);
hIcon := ImageList_GetIcon(hImageList.Handle, nIndex, ILD_NORMAL or ILD_TRANSPARENT);
StrCopy(szTip, ''就绪'');
end;
Shell_NotifyIcon(NIM_MODIFY, @NotifyIconData);
end;

记账软件版7楼: 楼上的,我太菜了,不知道要在哪里掉用它啊!
可否说清楚一下,谢谢。

8楼: 你在哪里做最小化响应,就在哪里调用……
比如在最小化按钮的onclick事件中调用vvyang的那段代码就是。。。

9楼: 楼上说的没错。

10楼: 换一个图标就是了

11楼: 在project->option里application页改变图标load icon

12楼: 多人接受答案了。 如最简单的进销存软件