简单深刻:为控件创建MouseEnter和MouseLeave事件(覆盖WndProc,增加对消息的处理,真简单!)——连对CM_MOUSEENTER的消息处理都是颇有深意啊!
2024-10-18 23:33:55
其实很简单:
unit Unit1; interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls; type TURLLabel = class(TLabel)
procedure WndProc(var Message : TMessage); override;
end; type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.DFM} { TURLLabel } procedure TURLLabel.WndProc(var Message: TMessage);
begin
if (Message.Msg = CM_MOUSEENTER) then
begin
Font.Color := clBlue;
Font.Style := Font.Style + [fsUnderline];
end;
if (Message.Msg = CM_MOUSELEAVE) then
begin
Font.Color := clWindowText;
Font.Style := Font.Style - [fsUnderline];
end;
inherited WndProc(Message);
end; procedure TForm1.FormCreate(Sender: TObject);
begin
with TURLLabel.Create(Self) do
begin
Parent := Self;
Left := ;
Top := ;
caption := 'www.delphi3000.com';
Cursor := crHandPoint;
end;
end; end.
转自http://www.delphi3000.com/articles/article_1050.asp?SK=
--------------------------------------------------------------------------------------
稍微分析一下,inherited WndProc(Message)会导致执行:
procedure TControl.CMMouseEnter(var Message: TMessage);
begin
if FParent <> nil then
FParent.Perform(CM_MOUSEENTER, , Longint(Self)); // 把控件自己的指针当参数传过去,即表明当前消息来自于哪个控件
end; procedure TControl.CMMouseLeave(var Message: TMessage);
begin
if FParent <> nil then
FParent.Perform(CM_MOUSELEAVE, , Longint(Self));
end;
即告诉父控件,有鼠标移入了。但是TWinControl没有CM_MOUSEENTER消息函数,所以就不了了之了。
这个例子说明,TControl的许多行为都不仅仅属于自己,即使自己处理了,还必须通知一下TWinControl父控件(而且是向上回溯通知所有祖先控件),看它们有什么意见(就好象小孩做了事情,要报告父母一样)。
最新文章
- jQuery的DOM操作实例(2)——拖拽效果&;&;拓展插件
- 正则获取HTML代码中img的src地址
- MySQL查询语句完整语法解析
- js替换选中的文字
- 定义类Human,具有若干属性和功能;定义其子类Man、Woman; 在主类Test中分别创建子类、父类和上转型对象,并测试其特性。
- vijos2001 xor-sigma
- UVA1210Sum of Consecutive Prime Numbers(素数打表 + 连续和)
- IE/Firefox/Chrome等浏览器保存Cookie的位置
- 算法:C++排列组合
- 【Android 界面效果15】Android UI 之一步步教你自定义控件(自定义属性、合理设计onMeasure、合理设计onDraw等)
- [Everyday Mathematics]20150201
- jquery基础-包裹 替换 删除 复制
- Python的高级特性之切片、迭代、列表生成式、生成器
- [汇编学习笔记][第十三章int指令]
- 重操JS旧业第八弹:面向对象与继承
- 各种oracle10g下载地址(官网网页上好像找不到了)
- ffmpeg命令行循环推流
- [UVa11426]最大公约数之和——极限版II
- 完美解决win10家庭版本系统无法远程连接问题
- 【java】static用法