我是
靠谱客的博主
慈祥石头,最近开发中收集的这篇文章主要介绍
delphi中响应鼠标进入或离开控件的方法,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
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:TMyPanel;
- panel:tpanel;
- procedure MSGEnter(var msg:TMessage);message CM_MOUSEENTER;
- procedure MSGLeave(var msg: TMessage);message CM_MOUSELEAVE;
-
- public
-
- end;
-
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.dfm}
-
-
- procedure TMyPanel.MSGEnter(var msg: TMessage);
- begin
- Color:=clyellow;
- end;
- procedure TMyPanel.MSGLeave(var msg: TMessage);
- begin
- Color:=clred;
- end;
-
-
- 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);
- 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;
-
- interface
-
- uses
- 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;
-
- implementation
-
- procedure Register;
- begin
- RegisterComponents('Standard', [TMyEdit]);
- end;
-
-
-
- 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中响应鼠标进入或离开控件的方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复