Click) and not assigned(FOnDblClick) then OnClick(self); end; WM_LBUTTONDOWN:begin //左键落下,如果单击和双击同时定义,则启用定时器, if assigned(FOnClick) and assigned(FOnDblClick) then begin //以判断是单击还是双击 SetTimer(Handle,1,FDblClickTime,nil); //如果不是同时定义则不响应 FTimer :=True; end; end; WM_LBUTTONDBLCLK :begin //左键双击, if FTimer then begin //如果有定时器,则取消定时器 KillTimer(Handle,1); FTimer:=False; end ; if assigned(FOnDblClick) then OnDblClick(self); //如果定义双击则响应 end; WM_RBUTTONUP : begin //右键弹起,响应菜单 if assigned(FPopupMenu) then begin GetCursorPos(p); FPopupMenu.Popup(p.x,p.Y); end; end; end; msg.Result :=0; end else if msg.Msg = WM_TIMER then begin //定时器结束,响应单击。 KillTimer(Handle,1); //在单击、双击同时定义的情况下,没有双击 FTimer := False; FOnClick(self); end; end;
procedure Register; begin RegisterComponents(''''System'''', [TNotifyIcon]); end;
end.
好了,这个组件到这里已经写完了,应该是很简单的,但功能已经基本够用了。没有太多花哨的东西,用起来也很方便。最主要的是对单击和双击的不同处理可以满足多方面的需要。另外需要注意的是本控件定义的图标,只是定义了一个句柄并没有在构造函数中生成一个实例,所以在析构的时候没有对其进行释放,如果在用自定义图标的时候,需要使用者自己创建并在使用完的时候自己释放,但如果用程序默认的图标就简单了,一句代码不用写就可以了。
上一页 [1] [2] |