|
//应用程序的消息钩子,获得主窗口的最小化消息
function AppMsgHook(var Msg:TMessage):Boolean;
procedure WndProc(var Msg: TMessage);//不可视窗口的窗口过程
//以下为事件的调度函数
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;
public
constructor Create(AOwner:TComponent);override;
destructor Destroy;override;
published
property Active:Boolean read FActive write SetActive default False;
property Icon:TIcon read FIcon write SetICon;
property SetDfIconed: boolean read FSetDfIcon write SetDfIcon default true;
property Hint:String read FHint write SetHint;
property RMode:TRmode read FRmode write SetRMode default LDbClick;
//事件的方法指针
property OnIconClick: TNotifyEvent read FOnIconClick write FOnIconClick;
property OnIconDblClick: TNotifyEvent read FOnIconDblClick write FOnIconDblClick;
property OnIconMouseMove: TMouseMoveEvent read FOnIconMouseMove write FOnIconMouseMove;
property OnIconMouseDown: TMouseEvent read FOnIconMouseDown write FOnIconMouseDown;
property OnIconMouseUp: TMouseEvent read FOnIconMouseUp write FOnIconMouseUp;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents(''''Wind'''', [TMyTray]);
end;
///////////TmyTray////////////////////////////
constructor TMyTray.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
//设置程序钩子,指定AppMsgHook为处理函数,
//则,应用程序的任何消息都将经过这个函数
Application.HookMainWindow(AppMsgHook);
FICon:=TICon.Create;
//得到默认图标的句柄,图标为应用程序的图标
FDfIcon:=Application.Icon.Handle;
FSetDfIcon:=True;
FActive:=False;
FRMode:=LDbClick;
isMin:=False;
//创建一个不可视窗口,并指定窗口过程,以处理托盘事件
FHandle := AllocateHWnd(WndProc);
//保存窗体的老的风格,在恢复窗口的同时也恢复原来的窗口风格
OldStyleEX:=GetWindowLong(Application.Handle,GWL_EXSTYLE);
end;
destructor TMyTray.Destroy;
begin
Application.UnhookMainWindow(AppMsgHook);
//对象释放之前先消除托盘
SetTray(NIM_DELETE);
//释放不可能窗口的句柄
DeallocateHWnd(FHandle);
FICon.Free;
inherited Destroy;
end;
//应用程序钩子,可以截获应用程序的所有消息
function TMyTray.AppMsgHook(var Msg:TMessage):Boolean;
var placement:WINDOWPLACEMENT;
begin
Result:=False;
//保证程序不会在设计时处理最小化消息
if not (csDesigning in ComponentState) then
if (Msg.Msg=WM_SYSCOMMAND) and(FActive) then
begin
if msg.WParam=SC_MINIMIZE Then
begin
//设置了这个属性后,窗口最小化就不会停在任务栏了,而 上一页 [1] [2] [3] [4] [5] [6] [7] 下一页 没有相关教程
|