托盘的菜单实现问题,打印机监控问题,高手请进!!!急!!!!!在线等待!

swxwy 2003-08-20 09:54:10
1、本人做了个托盘程序,但不知道怎么把菜单应用到工具栏上的托盘图标,也就是对托盘点击鼠标左键或右键出来相应的菜单,象我们用的金山和瑞星只要我们点击托盘就有相应的操作选项。(我不是用控件实现的,我是用API函数实现的托盘)
2、请问有没人做过网络打印机监控系统,可以根据用户名,计算机IP来监控打印信息,处理打印信息,那位大哥指点一下,另开帖子高分回报!
...全文
45 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenquan 2003-08-20
  • 打赏
  • 举报
回复
1.我给你答案
//制作托盘
unit tp;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls,ShellApi, Menus, StdCtrls;
const
ICON_ID = 1;
My_ICONEVENT = WM_USER + 1;
type
TMyTest = class(TForm)
Image1: TImage;
pop1: TPopupMenu;
showform: TMenuItem;
N1: TMenuItem;
Memo1: TMemo;
Button1: TButton;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure showformClick(Sender: TObject);
private
procedure InitIcon;
procedure UnInstallIcon;
procedure IConOnclick(var Myss:TMessage);message My_ICONEVENT;
procedure WMSysCommand(var Sysss: TWMSysCommand);message WM_SYSCOMMAND;
public
end;
var
MyTest: TMyTest;
implementation
{$R *.dfm}
procedure TMyTest.WMSysCommand(var Sysss: TWMSysCommand); //拦截系统消息
begin
with Sysss do
begin
if (CmdType and $FFF0 = SC_MINIMIZE) or (CmdType and $FFF0 = SC_CLOSE) then
begin
ShowWindow(MyTest.Handle,SW_HIDE);
Exit;
end;
inherited;
end;
end;
procedure TMyTest.ICononclick(var Myss:TMessage);
var p: TPoint;
begin
if (Myss.lParam = WM_RBUTTONDOWN) or (Myss.lParam = WM_LBUTTONDBLCLK) then
begin
GetCursorPos(p);
pop1.Popup(p.x,p.y);
end;
end;
procedure TMyTest.InitIcon;
Var MyNotify:TNotifyIconData;
begin
MyNotify.cbSize:=Sizeof(MyNotify);
MyNotify.Wnd:=handle;
MyNotify.uID := ICON_ID;
MyNotify.uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
MyNotify.uCallbackMessage:=My_ICONEVENT;
MyNotify.hIcon :=Image1.Picture.Icon.Handle;
MyNotify.szTip :='MyTest';
Shell_NotifyIcon(NIM_ADD,@MyNotify);
end;
procedure TMyTest.FormCreate(Sender: TObject);
begin
InitIcon;
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
//设置应用程序状态栏目不显示
end;
procedure TMyTest.N1Click(Sender: TObject);
begin
close;
end;
procedure TMyTest.UnInstallIcon; //卸载图标
var IconData: TNotifyIconData;
begin
IconData.cbSize := SizeOf(IconData);
IconData.Wnd := Handle;
IconData.uID := ICON_ID;
Shell_NotifyIcon(NIM_DELETE,@IconData);
end;
procedure TMyTest.FormDestroy(Sender: TObject);
begin
UnInstallIcon;
end;
procedure TMyTest.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=False;
ShowWindow(MyTest.Handle,SW_HIDE);
end;
procedure TMyTest.showformClick(Sender: TObject);
begin
ShowWindow(MyTest.Handle,SW_SHOWNORMAL);
SetForegroundWindow(application.handle);//激活应用程序为前台,此处可以省掉
end;
end.

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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