其实很简单:

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父控件(而且是向上回溯通知所有祖先控件),看它们有什么意见(就好象小孩做了事情,要报告父母一样)。

最新文章

  1. jQuery的DOM操作实例(2)——拖拽效果&amp;&amp;拓展插件
  2. 正则获取HTML代码中img的src地址
  3. MySQL查询语句完整语法解析
  4. js替换选中的文字
  5. 定义类Human,具有若干属性和功能;定义其子类Man、Woman; 在主类Test中分别创建子类、父类和上转型对象,并测试其特性。
  6. vijos2001 xor-sigma
  7. UVA1210Sum of Consecutive Prime Numbers(素数打表 + 连续和)
  8. IE/Firefox/Chrome等浏览器保存Cookie的位置
  9. 算法:C++排列组合
  10. 【Android 界面效果15】Android UI 之一步步教你自定义控件(自定义属性、合理设计onMeasure、合理设计onDraw等)
  11. [Everyday Mathematics]20150201
  12. jquery基础-包裹 替换 删除 复制
  13. Python的高级特性之切片、迭代、列表生成式、生成器
  14. [汇编学习笔记][第十三章int指令]
  15. 重操JS旧业第八弹:面向对象与继承
  16. 各种oracle10g下载地址(官网网页上好像找不到了)
  17. ffmpeg命令行循环推流
  18. [UVa11426]最大公约数之和——极限版II
  19. 完美解决win10家庭版本系统无法远程连接问题
  20. 【java】static用法

热门文章

  1. 修改VISUAL STUDIO EXPRESS 2012新建C++文件编码
  2. Esper学习之五:EPL语法(一)
  3. 如何在Windows上配置EBS R12.1.3的OAF开发环境
  4. 创建Activity
  5. cocos2dx 在windows上实现键盘输入
  6. Debian安装Nexus
  7. Xcode4.6 自制iOS可用的 Framework
  8. uva 620 Cellular Structure
  9. Python笔记之面向对象
  10. FORM验证简单demo