我写了个控件继承自TCustomControl,我想叫它捕获到系统内所有的鼠标点击事件.无论是点击它自身还是别的窗口,这样的代码要怎么写?另外问下直接继承自TCustomControl的组件应该怎么捕获CM_MOUSEENTER和CM_MOUSELEAVE这两个消息.

解决方案 »

  1.   

    它捕获到系统内所有的鼠标点击事件
    //-------------------
    ??系统内所有??//-----------------------------unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls;type
      TXCustomControl = class(TCustomControl)
      private
        procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
        procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
      end;  TForm1 = class(TForm)
        Bevel1: TBevel;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TXCustomControl }procedure TXCustomControl.CMMouseEnter(var Message: TMessage);
    begin
      inherited;
      Canvas.TextOut(2,2,'enter');
      Message.Result := 1;
    end;procedure TXCustomControl.CMMouseLeave(var Message: TMessage);
    begin
      inherited;
      Canvas.TextOut(2,2,'leave');
      Message.Result := 1;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      with TXCustomControl.Create(Self) do
      begin
        Parent := Self;
        SetBounds(10, 10, 50, 50);
        Color := clRed;
      end;
    end;end.
      

  2.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls;type
      TXCustomControl = class(TCustomControl)
      private
        procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
        procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
      end;  TForm1 = class(TForm)
        Bevel1: TBevel;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TXCustomControl }procedure TXCustomControl.CMMouseEnter(var Message: TMessage);
    begin
      inherited;
      Canvas.TextOut(2,2,'enter');
      Message.Result := 1;
    end;procedure TXCustomControl.CMMouseLeave(var Message: TMessage);
    begin
      inherited;
      Canvas.TextOut(2,2,'leave');
      Message.Result := 1;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      with TXCustomControl.Create(Self) do
      begin
        Parent := Self;
        SetBounds(10, 10, 50, 50);
        Color := clRed;
      end;
    end;end.
      

  3.   

    1、我写了个控件继承自TCustomControl,我想叫它捕获到系统内所有的鼠标点击事件.无论是点击它自身还是别的窗口,这样的代码要怎么写? 
    -----------------------------------------------------------------------------------
    这个最好要使用全局钩子技术;2、另外问下直接继承自TCustomControl的组件应该怎么捕获CM_MOUSEENTER和CM_MOUSELEAVE这两个消息.
    ---------------------------------------------------------------------------------
    这2个消息的捕获楼上已经说了,方法你使用楼上的就可以了;