delphi中响应鼠标进入或离开控件的方法
来源:互联网 发布:淘宝食品代理公司注 编辑:程序博客网 时间:2024/04/30 02:02
Delphi没有MouseEnter与MouseLeave的事件,网上说可以响应CM_MOUSEENTER和CM_MOUSELEAVE消息来实现。这两个消息是VCL自己定义的消息,看了Delphi的Controls.pas果然看到有以下两行:
CM_MOUSEENTER = CM_BASE + 19;
CM_MOUSELEAVE = CM_BASE + 20;
其中CM_BASE = $B000
可以有两种方式来利用:
方式一:在自定义的控件中添加响应事件来实现
方式二:直接让窗体响应事件,然后判断不同的控件
以下代码从网上参考后修改并运行通过。
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;type TMyPanel=class(tpanel) public procedure MSGEnter(var msg:TMessage);message CM_MOUSEENTER;//响应进入的消息 procedure MSGLeave(var msg: TMessage);message CM_MOUSELEAVE;//响应离开的消息 end; TForm1 = class(TForm) Panel1: TPanel; Panel2: TPanel; procedure FormCreate(Sender: TObject); private MYpanel:TMyPanel; panel:tpanel; procedure MSGEnter(var msg:TMessage);message CM_MOUSEENTER;//响应进入的消息 procedure MSGLeave(var msg: TMessage);message CM_MOUSELEAVE;//响应离开的消息 { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}//方式一:对自定义控件定义事件{ TMyPanel }procedure TMyPanel.MSGEnter(var msg: TMessage);begin Color:=clyellow;end;procedure TMyPanel.MSGLeave(var msg: TMessage);begin Color:=clred;end;{ TForm1 }procedure TForm1.FormCreate(Sender: TObject);begin MyPanel:=TMyPanel.Create(self); MyPanel.Parent:=self; MyPanel.Caption:='鼠标进入变黄, 鼠标离开变红'; Panel:=TPanel.Create(self); Panel.Parent:=self; panel.top:=100;end;//方式二:用窗体事件事响应并进行判断procedure TForm1.MSGEnter(var msg: TMessage); var myobj : TObject; begin myobj := TObject(msg.LParam);//用LParam进行判断鼠标进入了哪个控件 if (myobj <> nil) and (myobj is TPanel) then TPanel(myobj).Caption := 'enter'; end; procedure TForm1.MSGLeave(var msg: TMessage); var myobj : TObject; begin myobj := TObject(msg.LParam); if (myobj <> nil) and (myobj is TPanel) then TPanel(myobj).Caption := 'leave'; end;end.
如果想在设计阶段能直接添加事件以做响应,可以自定义控件并将其注册为可视化控件。
方法如下:(以下代码未经测试)
unit MyEdit;interfaceuses Classes, Controls, Messages, StdCtrls;type TMyEdit = class(TEdit) private FOnMouseLeave: TNotifyEvent; FOnMouseEnter: TNotifyEvent; published property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; procedure CMMouseEnter(var Msg:TMessage);message CM_MOUSEENTER; procedure CMMouseLeave(var Msg:TMessage);message CM_MOUSELEAVE; end;procedure Register;implementationprocedure Register;begin RegisterComponents('Standard', [TMyEdit]);end;{ TMyEdit }procedure TMyEdit.CMMouseEnter(var Msg: TMessage);begin inherited; if Assigned(FOnMouseEnter) then FOnMouseEnter(Self);end;procedure TMyEdit.CMMouseLeave(var Msg: TMessage);begin inherited; if Assigned(FOnMouseLeave) then FOnMouseLeave(Self);end;end.
- delphi中响应鼠标进入或离开控件的方法
- delphi中响应鼠标进入或离开控件的方法
- 判断鼠标进入和离开mfc控件的模板类
- 鼠标进入与离开的消息
- 如何知道鼠标进入及离开CHtmlView(或它的子类)?
- JS判断鼠标进入或离开容器的方向做出特殊hover效果
- VC中控件或者对话框的鼠标离开消息
- 如何时感鼠标进入与离开某个控件
- asp.net中按钮在鼠标进入与离开时,显示不同的图片效果
- 在网页中引用DWG控件,交互绘图,和响应鼠标点击对象的方法
- 在网页中引用DWG控件,交互绘图,和响应鼠标点击对象的方法
- Image1鼠标进入、离开时
- VC++鼠标进入离开窗口
- 判断鼠标进入/离开某块的方向
- CAD控件:在网页中引用DWG控件,交互绘图,和响应鼠标点击对象的方法
- map控件中对鼠标滚轮事件的响应
- gtk+ 鼠标进入离开按钮信号
- 模拟键盘或鼠标的响应
- IOS开发之带格式的文本
- Jquery UI 组合树 - ComboTree 集成Wabacus4.1 代码剖析
- android 取消蓝牙配对框 实现自动配对
- opengl——开篇掉坑里了
- Andrew Stankevich's Contest #5 Solution
- delphi中响应鼠标进入或离开控件的方法
- 报错: java.security.KeyStoreException: java.security.NoSuchAlgorithmException: KeyStore jks implementa
- MPEG-2文件的构造格式
- Xcode 常用快捷键及代码自动排版
- 用HDevelop软件自动生成的.ps文件来制作标定板
- Text Justification
- LSMW、BDC、CATT 区别
- Ollivanders: Makers of Fine Wands since 382 BC.
- 文章收录1