如何生成托盘图标(100分)

  • 主题发起人 主题发起人 jzg
  • 开始时间 开始时间
J

jzg

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序执行后,如何生成托盘图标,在屏幕的右下方
 
到凌云天地
http://www.delphibyte.com/download/softlist.php?category=63
 
unit RJ;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ShellApi,
Menus;

const
WM_TRAYNOTIFY = 2000;
MY_TRAY_ICON = 1000;
type
TGuoRiJian = class(TForm)
PopupMenu1: TPopupMenu;
N2: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure N2Click(Sender: TObject);
private
{ Private declarations }
public
procedure OnMin(Sender: TObject);
procedure WMTrayNotify(var Msg: TMessage);Message WM_TRAYNOTIFY;
{ Public declarations }
end;

var
GuoRiJian: TGuoRiJian;
nid: TNOTIFYICONDATA;

implementation

{$R *.DFM}
procedure TGuoRiJian.OnMin(Sender: TObject);
begin
nid.cbSize:=Sizeof(TNOTIFYICONDATA);
nid.Wnd:=Handle;
nid.uID:=MY_TRAY_ICON;
nid.uFlags:=NIF_TIP OR NIF_ICON OR NIF_MESSAGE;
nid.hIcon:=Application.Icon.Handle;
nid.szTip:='我的程序';
nid.uCallbackMessage:=WM_TRAYNOTIFY;
Shell_NotifyIcon(NIM_ADD,@nid);
ShowWindow(Application.Handle,SW_HIDE);
end;

procedure TGuoRiJian.WMTrayNotify(var Msg: TMessage);
var
p:TPoint;
begin
if Msg.LParam=WM_LBUTTONDBLCLK then
begin
nid.cbSize:=Sizeof(TNOTIFYICONDATA);
nid.Wnd:=Application.Handle;
nid.uID:=MY_TRAY_ICON;
nid.uFlags:=NIF_TIP OR NIF_ICON OR NIF_MESSAGE;
nid.uCallbackMessage:=WM_TRAYNOTIFY;
nid.szTip:='';
Shell_NotifyIcon(NIM_MODIFY,@nid);
ShowWindow(Application.Handle,SW_SHOW);
Application.Restore;
end
else if Msg.LParam=WM_RBUTTONUP then
begin
GetCursorpos(p);
PopupMenu1.Popup (p.x,p.y);
end;
end;

procedure TGuoRiJian.FormCreate(Sender: TObject);
begin
Application.OnMinimize := OnMin;
end;

procedure TGuoRiJian.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,@nid);
end;

procedure TGuoRiJian.N2Click(Sender: TObject);
begin
Close;
end;

end.
 
有一套cool开头的控件有这个组件
TCoolTrayIcon
 
网上找个控件,又快又方便的。
delphi.mychangshu.com就有。
 
如何用api函数实现呢
提子老兄,不好用呀,没有出现托盘图标
 
呵呵,D5上通过
 
对呀,是D5呀
 
呵呵,要么我把例子发给你
 
那多谢你了
我的邮箱 jzg-27@163.com
 
呵呵,发了
 
不会吧,我再发
 
收到了,谢谢你,一定加分
但是它只能在最下化之后才能出现,能不能在一运行时就出现呢
 
拜托 你把onMin事件的代码看看 在加到Create里不就行了?
 
呵呵,你把程序中//下面的//语句中加*的剪切到窗体的onshow事件中去
procedure TGuoRiJian.OnMin(Sender: TObject);
begin
*nid.cbSize:=Sizeof(TNOTIFYICONDATA);
*nid.Wnd:=Handle;
*nid.uID:=MY_TRAY_ICON;
*nid.uFlags:=NIF_TIP OR NIF_ICON OR NIF_MESSAGE;
*nid.hIcon:=Application.Icon.Handle;
*nid.szTip:='我的程序';
*nid.uCallbackMessage:=WM_TRAYNOTIFY;
*Shell_NotifyIcon(NIM_ADD,@nid);
ShowWindow(Application.Handle,SW_HIDE);
end;
 
to 美国提子:如果加个菜单,让它恢复原来的窗口用什么命令?
 
什么意思?
 
你的例子中点最小化后,它就缩到 右下角了,点击那个不是就关闭了吗?我的意思是说,在菜单里
再加一个如“还原”之类的,点击它让窗口变回原来的大小,这个用什么?(我知道双击那个图标之
后也会还原的,我就是想再加一个菜单看怎么做)我试了,用 form1.WindowState:=wsNormal; 也不行。
 
后退
顶部