| p; end;
MouseUp(mbLeft, KeysToShiftState(TWMMouse(Msg).Keys)+ [ssLeft], P.X, P.Y);
end;
WM_RBUTTONDOWN: //右单击下
begin
GetCursorPos(P);
IsClickIn:=True;
MouseDown(mbRight, KeysToShiftState(TWMMouse(Msg).Keys) + [ssRight], P.X, P.Y);
end;
WM_RBUTTONUP: //右单击弹起
begin
GetCursorPos(P);
if IsClickIn then
begin
IsClickIn:=False;
Click;
if FRmode=RClick then
begin
ShowWindow(Application.Handle,SW_SHOW);
SetWindowLong(Application.Handle,GWL_EXSTYLE ,OldStyleEX);
SendMessage(Application.Handle,WM_SYSCOMMAND,SC_RESTORE,0);
SetTray(NIM_DELETE );
end;
end;
MouseUp(mbRight, KeysToShiftState(TWMMouse(Msg).Keys)+ [ssRight], P.X, P.Y);
end;
end;
end
else
Msg.Result := DefWindowProc(FHandle, Msg.Msg, Msg.wParam, Msg.lParam);
end;
//以下为几个事件的调度函数,比较简单.
procedure TMyTray.DblClick;
begin
if Assigned(FOnIconDblClick) then
FOnIconDblClick(Self);
end;
procedure TMyTray.Click;
begin
if Assigned(FOnIconClick) then
FOnIconClick(Self);
end;
procedure TMyTray.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Assigned(FOnIconMouseDown) then
FOnIconMouseDown(Self, Button, Shift, X, Y);
end;
procedure TMyTray.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Assigned(FOnIconMouseUp) then
FOnIconMouseUp(Self, Button, Shift, X, Y);
end;
procedure TMyTray.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
if Assigned(FOnIconMouseMove) then
FOnIconMouseMove(Self, Shift, X, Y);
end;
end.
组制作完毕,相信经过上面的讲解,以及代码的注释,应该不难理解。接下来是什么呢,给我的托盘控件来点效果,即在设计器中,当双击该组件,或右击快捷菜单第一项时,会弹出一个About对话框,来说明我的托盘组件。
这个就要用到组件编辑器啦 。几本经典书中都有说及,比如Deplphi开发人员指南,我也是从那里学来的,不过却遇到了一些问题,折磨了几天才解决。
这里不想详细介绍,去看一下那些书,大概也就知道了,只略说一下。
其原理就是实现一个继承自TComponentEditor的子类TTrayIconEditor,并在其中覆盖以下三个方法:
function GetVerbCount: Integer; override;
function GetVerb(Index: Integer): string; override;
procedure ExecuteVerb(Index: Integer); override;
可以精略理解为:
GetVerbCount指定控件快捷菜单的项数
GetVerb指定快捷菜单中的相关项的名字
ExecuteVerb执行点击快捷菜单项后的动作
上一页 [1] [2] [3] [4] [5] [6] [7] 下一页 |