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;
interface
uses
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

在Delphi中,由于没有内置的MouseEnter和MouseLeave事件,可以通过响应CM_MOUSEENTER和CM_MOUSELEAVE自定义消息来实现类似功能。这些消息是VCL定义的,可以通过两种方式实现:一是自定义控件并添加事件处理,二是让窗体直接响应并判断不同控件。为了在设计阶段方便,可以创建自定义控件并注册为可视化控件。
最低0.47元/天 解锁文章
2697

被折叠的 条评论
为什么被折叠?



