说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

自制THyperLink组件-Delphi资料

HTML文档下载 WORD文档下载 PDF文档下载
自制THyperLink组件-Delphi资料

很多软件在其About窗口或Help菜单中,可让用户通过单击一段文字就能方便地访问某个网页。比如,Delphi的Help中就有可直接访问该公司主页的菜单项。下面介绍的THyperLink组件是用Delphi3.0编制的,可方便地实现上述功能。

THyperLink是基于TCustomLabel组件的,它有以下特性:

属性:

普通Label组件的所有特性,考滤到实际用途只公布了Caption、Color、 Cursor、 Enabled、 Font、 Hint、 ShowHint、 Visible等属性,其中Font属性在构造函数中被初始化为蓝色带下划线字体,Cursor被置为手型鼠标。别外,增加了URL属性用于存贮网址。在组件内部接管了OnClick事件,用于实现用户单击后调用默认浏览器打开URL中指定的网页,处理各种错误,并将Font属性置为紫色。

方法:

Function Browse(AURL: string): Integer;

{ AURL为网址或文件名。}

事件:

OnClick; { 响应用户鼠标单击动作。 }

具体源码如下:

{ THyperLink VCL

Version 1.0

This is freeware. If you make cool changes to it

please send them to me(1234@5678.com).

}

unit HyperLink;

interface

uses

Windows

Messages

SysUtils

Classes

Graphics

Controls

Forms

Dialogs

ShellAPI

Stdctrls;

type

THyperLink = class(TCustomLabel)

private

FURL: string; // 存贮网址或文件名

FOwnerHandle: HWND;

protected

procedure DoOnClick(Sender: TObject);

// 处理用户单击鼠标

public

constructor Create(AOwner: TComponent); override;

Function Browse(AURL: string): Integer;

published

property Caption;

property Color;

property Cursor default crHandPoint;

property Enabled;

property Font stored True;

property Hint;

property ShowHint default True;

property URL: string read FURL write FURL;

property Visible;

property OnClick;

end;

procedure Register;

implementation

constructor THyperLink.Create(AOwner: TComponent);

begin

inherited Create(aOwner);

FOwnerHandle := (Owner as TForm).Handle;

OnClick := DoOnClick;

Cursor := crHandPoint;

ShowHint := True;

Font.Color := clBlue;

Font.Style := [fsUnderline];

Font.Size := 10;

end;

procedure THyperLink.DoOnClick(Sender: TObject);

begin

if (not (csDesigning in

ComponentState) and (FURL < >'')) then

begin

Browse(FURL);

// 调用相应程序打开URL中的网址、文件

Font.Color := clPurple;

end;

end;

Function THyperLink.Browse(AURL: string): Integer;

var

RtnValue: Integer;

begin

RtnValue := ShellExecute(FOwnerHandle

'Open'

PChar(AURL)

nil

nil

SW_SHOWNORMAL);

case RtnValue of // 处理各种错理

0: ShowMessage('The operating system is out of memory

or resources.');

ERROR_BAD_FORMAT: ShowMessage( 'The .EXE file is invalid

(non-Win32 .EXE or error in .EXE image');

SE_ERR_ACCESSDENIED: ShowMessage( 'The operating system

denied access to the specified file.');

SE_ERR_ASSOCINCOMPLETE: ShowMessage( 'The filename

association is incomplete or invalid.');

SE_ERR_DDEBUSY: ShowMessage( 'The DDE transaction

could not be completed because other DDE transactions

were being processed.');

SE_ERR_DDEFAIL: ShowMessage( 'The DDE transaction failed.');

SE_ERR_DDETIMEOUT: ShowMessage( 'The DDE transaction

could not be completed because the request timed out.');

SE_ERR_DLLNOTFOUND: ShowMessage( 'The specified

dynamic-link library was not found.');

SE_ERR_FNF: ShowMessage( 'The specified file was not found.');

SE_ERR_NOASSOC: ShowMessage( 'There is no application

associated with the given filename extension.');

SE_ERR_OOM: ShowMessage( 'There was not enough

memory to complete the operation.');

SE_ERR_PNF: ShowMessage( 'The specified path was not found.');

SE_ERR_SHARE: ShowMessage( 'A sharing violation occurred.');

else

if(RtnValue < =32) then ShowMessage( 'Unknown

Error in ShellExecte.');

end;

Result := RtnValue;

end;

procedure Register;

begin

RegisterComponents('Tools'

[THyperLink]);

end;

end.

由于THyperLink内部使用ShellExcute函数来打开网页,而ShellExcute函数的特点是可调用与给定文件相关联的应用程来打开该文件,所以在属性URL中设置其它类型的文件(如E-mail地址、文本文件、图像文件,甚至是数据库文件),只要用户的计算机内有相应程序,ThyperLink就能打开该文件。不过E-mail地址应写成mailto:1234@5678.com这样的型式。以下是一简单的示例程序:

unit sample;

interface

uses

Windows

Messages

SysUtils

Classes

Graphics

Controls

Forms

Dialogs

Menus

StdCtrls

HyperLink;

type

TForm1 = class(TForm)

HyperLink1: THyperLink;

MainMenu1: TMainMenu;

Help1: TMenuItem;

BorlandHomePage1: TMenuItem;

procedure BorlandHomePage1Click(Sender: TObject);

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.BorlandHomePage1Click(Sender: TObject);

begin

HyperLink1.Browse('http://www.borland.com');

end;

end.

因为ThyperLink组件的父类是TCustomLabel组件,所以它拥有TCustomLabel的全部属性、方法、事件,这就是说如果需要的话,你可直接使用它们。

专访ThinkPHP创始人刘晨:用最简单最快速的方式开发PHP应用 重构:仔细查看,改进代码 加速编码的17款最棒的CSS工具 生于微信:专访疯狂猜图CEO曹晓刚 谷歌:受感染的合法网站远比恶意网站危险性大 Mozilla正式发布Firefox 22应用程序开发者受益 支持3D游戏、视频通话和文件分享 直接拿来用!最火的前端开发项目(一) Salesforce.com和Oracle在云合作上达成长期协议 即将到来的数据中心僵尸末日,谁能成为最后的幸存者?! Andorid APK反逆向解决方案:梆梆加固原理探寻 科技拥抱设计:体验设计如何创新? Rails 4.0正式发布 命途多舛的webOS,两度易主,生生死死多少回 Citrix全面开源XenServer 为了三十亿人的网络幸福:Google投资O3b发射网络卫星 Windows 8.1中IE 11开始支持WebGL和SPDY/3 微软Build 2013开发者大会:盘点Windows 8.1的15个重大更新 瞧!这是摩托罗拉移动新Logo,你有什么感觉? 专访UEditor创始人战毅:打造最佳的用户编辑体验 Eclipse 4.3 正式版发布 代号Kepler 为兴趣而生 七大编程挑战项目,你敢来吗? iOS 7辅助功能:左右摇头控制iOS设备 挑战传统关系型数据库:Facebook图形数据库TAO揭秘 揭秘“棱镜计划”幕后的技术 你更新了吗?Visual Studio 2013 Preview和.NET 4.5.1同时发布 你主要使用什么编程语言? 跨平台游戏开发工具App Game Kit或将新增更多强悍功能 移动应用推广的那些事儿:应用发现篇 DDoS攻击也能成为一种云计算服务 Netflix开源Hadoop集群调度工具:日处理近万作业、上千TB数据 传谷歌正开发自己的视频游戏主机和智能手表 我枚举一个外部程序的子窗体,可是却只看到了TDXDraw,我怎么样才能得到TDXDraw中更多的信息呢? 帶一個checkbox的list應該怎麼做? 扫描程序如何循环处理一段IP地址? 数据库中图片如何调用? 如下错误是什么意思,如果解决 一个关于SQL的问题 残啊?都要计算机专业毕业的。。。。。 Miscrosoft Scrioting Library是何东东?Scrrun.dll上那去弄? 如何让softice支持usb鼠标,键盘 多线程程序中使用采用单线程编译参数编译的DLL,会有什么后果? 很多on error goto ... 很简单,有NT4.0或XP的朋友一看就知道。在线等待 手工配置Grub:希望能对大家有所帮助 新显卡驱动For Linux Where download? ADO问题?????????????/ 请问c++的handle class是什么东东呀 怎么textBox控件不可以使用 \n,\r等语句?????? CEdit疑问 急切在线等:打包时出现的问题! 今天我生日,放分!!! 网络财务系统管理信息系统源代码销售 pb8的序列号问题!............................在线等待!!! 在javscript里面怎么判断一个变量(var定义的)是数字? 在线!!!哪位知道好的关于DSP的论坛? 请教高手,如何编程实现一台计算机通过拨号(modem)连接到对方计算机,并实现文件传输? ■■■有没有右键菜单也像VS.NET风格的???■■■ 有没有现成控件,实现EXCELL式的编辑功能 关于BCB中开发DirectDraw的问题 诚聘高手开发电子辞典? 请问一下了dbeng7 -Q的有关事项了? 高手请拉兄弟一把:TField 有一个OnValidate事件,可用它来校验,能否利用它来替换? 怎样把DataSet里面的数据写入一个Excel和Access文件里面? DX全屏模式下如何显示MFC控件? 关于保存对话框的问题,请教高手,谢 (简单问题送分)如何得到select语句得到的数局条数??? 谁能答出来?给分500!!! 很奇怪的问题了 c/s模式,后台是sql server 关于保存对话框的问题,请教高手,谢 类的定义问题 怎样将十进制数转换成十六进制数? 用DataGrid作分页显示,我想让鼠标移到某行时,这行就改变颜色?具体该怎么办? 版主,请进,帮我结贴,沉年老事,我不想再提,越提越伤心,最好帮我删了。 pcgenius(superj) ,你在吗?能告诉我你的QQ吗? 请问我在win2000专业版里装了asa 7可是他的服务器manage为什么用不了呀? 在PL/SQL中这个SQL语句为何不对 用水晶报表实现。怎么样在一个坐标系内画两个图?比如线图和条形图。 fuxc(Michael), 请进! 请问vb中报表如何动态生成?急! 对爱的回味!!! 哪位大侠帮我看看:关于OLE的word使用
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘