我有一个VCL,你可以看看!
unit kqNetLabel1;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls,shellAPI,Graphics,
forms,Dialogs;
type
THyperLink = (hlHTTP, hlMail, hlTelnet, hlGopher, hlNews, hlFTP);
type
TkqNetLabel1 = class(TLabel)
private
{ Private declarations }
FHyperLinkKind: THyperLink;
FHyperLink: string;
FHLinkColor: TColor;
FVLinkColor: TColor;
// 定义私有类型的变量,分别作为属性HyperLinkKind、HyperLink、HLinkColor和VLinkColor的数据域
FColor: TColor; //私有变量FColor用作存放颜色值的临时变量
procedure CMMouseEnter(var AMsg: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var AMsg: TMessage); message CM_MOUSELEAVE;
// 定义Windows消息处理函数,分别处理鼠标消息CM_MOUSEENTER和CM_MOUSELEAVE
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); Override;
// 重载TLabel的构造方法,在新声明Create方法中对TNetLabel控件的属性进行初始化
procedure Click; override;
// 重载TLabel祖先TCustomLabel中的Click方法,在新声明的Click方法中实现超链接调用
published
{ Published declarations }
property HyperLinkKind: THyperLink read FHyperLinkKind write FHyperLinkKind default hlMail;
// 声明属性HyperLinkKind,采用直接读写私有数据域FHyperLinkKind的值,并用关键词default定义缺省值为hlMail
property HyperLink: string read FHyperLink write FHyperLink;
// 声明属性HyperLink,采用直接读写私有数据域FHyperLink的值
property HLinkColor: TColor read FHLinkColor write FHLinkColor default clBlue;
// 声明属性HLinkColor,采用直接读写私有数据域FHLinkColor的值,并定义缺省值为clBlue
property VLinkColor: TColor read FVLinkColor write FVLinkColor default clNavy;
// 声明属性VLinkColor,采用直接读写私有数据域FVLinkColor的值,并定义缺省值为clNavy
end;
procedure Register; // 此过程由Delphi生成源代码框架时自动生成
implementation
procedure Register;
begin
RegisterComponents('Samples', [TkqNetLabel1]);
end;
procedure TkqNetLabel1.CMMouseEnter(var AMsg: TMessage);
begin
FColor:= Font.color; // 存储初始颜色值到临时变量FColor中
Font.color := FHLinkColor; // 设置文字标签颜色为属性HLinkColor中的颜色
Font.style := Font.style + [fsUnderLine]; // 添加文字标签的字体修饰属性为有下划线
end;
procedure TkqNetLabel1.CMMouseLeave(var AMsg: TMessage);
begin
Font.color := FColor; // 恢复初始文字标签的颜色
Font.style := Font.style - [fsUnderLine]; // 恢复初始文字标签的字体属性
end;
constructor TkqNetLabel1.Create(AOwner: TComponent);
begin
inherited Create(AOwner); // 继承调用TLabel的Create方法
FHyperLinkKind := hlMail; // 初始化私有变量
FHyperLink := 'sgp_kq@msn.com';
FHLinkColor := clBlue;
FVLinkColor := clNavy;
with self do
begin
cursor := crHandPoint; // 初始化TkqNetLabel的鼠标指针为手形
caption := FHyperLink;// 默认时TNetLabel的Caption属性与HyperLink属性内容相同,但在使用该控件时可以设置为不同的字符串。比如:Caption置为“给我写信”,而在HyperLink属性中将超链接设置为邮箱地址,如zhangzhen@263.net
Font.Color := clMaroon; // 初始化TNetLabel的字体颜色为clMaroon
FColor := Font.color; // 存储初始颜色值到临时变量FColor中
end;
end;
procedure TkqNetLabel1.Click;
begin
inherited Click; // 继承调用TLabel的Click方法
if FHyperLink <> '' then
begin
case FHyperLinkKind of
hlHTTP : ShellExecute(parent.handle,nil,pchar('http://' + FHyperLink),nil,nil,sw_shownormal);
hlMail : ShellExecute(parent.handle,nil,pchar('mailto:' + FHyperLink),nil,nil,sw_shownormal);
hlFTP : ShellExecute(parent.handle,nil,pchar('ftp://' + FHyperLink),nil,nil,sw_shownormal);
hlNews : ShellExecute(parent.handle,nil,pchar('news:' + FHyperLink),nil,nil,sw_shownormal);
hlGopher : ShellExecute(parent.handle,nil,pchar('gopher://' + FHyperLink),nil,nil,sw_shownormal);
hlTelnet : ShellExecute(parent.handle,nil,pchar('telnet:' + FHyperLink),nil,nil,sw_shownormal);
// 调用Windows API函数 ShellExecute,实现超链接调用
end;
FColor := FVLinkColor;
// 将VLinkColor属性中访问后超链接文字标签的颜色保存在变量FColor中,以便在CMMouseLeave消息处理程序中重新设置文字标签的颜色
end;
end;
end.