打印本文 打印本文 关闭窗口 关闭窗口
组件制作之五(托盘组件)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数3615  更新时间:2009/4/23 18:34:08  文章录入:mintao  责任编辑:mintao
//应用程序的消息钩子,获得主窗口的最小化消息

    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]  下一页

打印本文 打印本文 关闭窗口 关闭窗口