例如我要监听一个端口,比如379打印端口,做成一个服务。服务一启动,状态栏同时出现托盘图标,当检测到379端口值变了时,就弹出一个警世窗口。该过程大体如何实现呢?当然你可以监视某个变量的值,请高手来个demo
解决方案 »
- 求一查询SQL语句
- QuickReport最后一行内容为两行的宽度,如何将这两行换到下一页显示?
- 请赐教(关于TCPServer接收数据的问题)
- MDI界面打开子窗口出现地址访问非法的错误。
- 程序员有没有喜欢火影的,有的话就加群8214435
- 关于midas的简单问题
- 控件问题,进来看看吧,在线等待
- 用delphi作的OCX加了数字签名后 在IE客户端运行 提示警告 按是接受后 并不能修改客户端的注册表 或者只能修改部分 是怎么回事?在IE5下有
- 数据库中memo显示问题!
- 关于delphi中窗口从绘的消息
- 如何实现对文件的操作的快捷键?
- 怎么用ADO,通过SQL语句生成Paradox表的主键?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ShellAPI, ActnList, ExtCtrls;const
WM_INITIALIZE = WM_USER + 1;
WM_SYSTEM_TRAY_ICON_MESSAGE = WM_USER + 2;type
TMainForm = class(TForm)
PopupMenu: TPopupMenu;
ActionList1: TActionList;
Shutdown: TAction;
Properties: TAction;
S1: TMenuItem;
Setup: TAction;
N1: TMenuItem;
S2: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure ShutdownExecute(Sender: TObject);
procedure SetupExecute(Sender: TObject);
public
FInitialized: Boolean;
FIconData: NOTIFYICONDATA;
FTaskMessage: Cardinal;
procedure RegisterIcon;
procedure UnregisterIcon;
procedure WMTrayIcon(var Message: TMessage); message WM_SYSTEM_TRAY_ICON_MESSAGE;
protected
procedure WndProc(var Message: TMessage); override;
public
end;resourcestring
STip = '你的图标提示';
var
MainForm: TMainForm;
FromService: Boolean;implementationuses Setting;{$R *.dfm}procedure TMainForm.FormCreate(Sender: TObject);
begin
RegisterIcon;
FTaskMessage := RegisterWindowMessage('TaskbarCreated'); // 向Windows要求在任务栏建立时发出个消息, 主要为了服务在起动时, taskbar 不存在
if FromService then
Shutdown.Enabled := false; // Showdown 是一个 Action, 这个程序同时支持 App 和 Svc, Svc 的不能由菜单关闭
end;procedure TMainForm.FormDestroy(Sender: TObject);
begin
UnregisterIcon;
end;procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
;
end;procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
;
end;procedure TMainForm.RegisterIcon;
var
Tip: string;
begin
begin
// tray icon registr information
FIconData.cbSize := sizeof(TNotifyIconData);
FIconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
FIconData.uID := 0;
FIconData.Wnd := Handle;
FIconData.hIcon := Forms.Application.Icon.Handle; // 用的是 Application 的图标, 爱改就自已改一个
FIconData.uCallbackMessage := WM_SYSTEM_TRAY_ICON_MESSAGE;
Tip := STip;
Delete(Tip, 63, Length(Tip) - 63);
StrCopy(FIconData.szTip, PChar(Tip));
Shell_NotifyIcon(NIM_ADD, @FIconData);
end;
end;procedure TMainForm.UnregisterIcon;
begin
Shell_NotifyIcon(NIM_DELETE, @FIconData);
end;
procedure TMainForm.WndProc(var Message: TMessage);
begin
if Message.Msg = FTaskMessage then
begin
RegisterIcon;
Refresh;
end;
inherited WndProc(Message);
end;procedure TMainForm.WMTrayIcon(var Message: TMessage);
var
Point: TPoint;
begin
case Message.LParam of
WM_LBUTTONDBLCLK:
begin
// dblclick 图标时作的事
end;
WM_RBUTTONDOWN:
begin
// 右键时弹出Popupmenu, 记得放一个哈
GetCursorPos(Point);
SetForegroundWindow(Handle);
PopupMenu.Popup(Point.x, Point.y);
end;
end;
end;
Setup: TAction;
N1: TMenuItem;
S2: TMenuItem;
以上怎么都没有对用的动作或文件
Shutdown: TAction;
Properties: TAction;
以上两个在编译时提示要求移走。implementationuses Setting;
这个setting单元没有代码
我是个新手,请楼上高手给个完整的demo(自己调试过的代码打包也可以,)高分结帖!