我们何不效仿它呢。
于是也定义一个成员句柄:
fhandle: hwnd;
把该句柄赋给notifyicondata的hwnd字段
再定义一个消息处理过程:
procedure wndproc(var msg: tmessage);
再在组件构造函数中:
fhandle := allocatehwnd(wndproc);
如此之后,组件就可以截获托盘的消息了,并在wndproc过程中作相应处理。这里有必要对托盘的自定义消息做一个介绍:
我们自定义了这个消息wm_traymsg,它的lparam与托盘的uid相同,wparam是鼠标在图标上发生的事件消息,比如单击,双击等。
我们就要把这些消息转化为事件,供给用户处理,所以定义几个事件调度函数:
//以下为事件的调度函数
procedure dblclick; dynamic;
procedure click; dynamic;
procedure mousedown(button: tmousebutton; shift: tshiftstate; x, y: integer); dynamic;
procedure mouseup(button: tmousebutton; shift: tshiftstate; x, y: integer); dynamic;
procedure mousemove(shift: tshiftstate; x, y: integer); dynamic;
意思很明显,不多说,