您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> Delphi >> 自写控件消息捕获的问题

自写控件消息捕获的问题

来源:网络整理     时间:2016/7/4 5:47:30     关键词:

关于网友提出的“ 自写控件消息捕获的问题”问题疑问,本网通过在网上对“ 自写控件消息捕获的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 自写控件消息捕获的问题
描述:

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


解决方案1:

不错不错,呵呵

解决方案2:

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

解决方案3:

用钩子

解决方案4:

它捕获到系统内所有的鼠标点击事件
//-------------------
??系统内所有??
//-----------------------------


unit Unit1;
interface
uses
  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.
解决方案5:

那就只能用全局消息钩子了,截获消息


以上介绍了“ 自写控件消息捕获的问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2266420.html

相关图片

相关文章