?? 新控件 (2001年4月23日).txt
字號:
新控件 (2001年4月23日)
網(wǎng)友更新 分類:數(shù)據(jù)庫 作者: zhuhongqing(推薦) 推薦:zhuhongqing 閱讀次數(shù):402
(http://www.codesky.net)
--------------------------------------------------------------------------------
制作構(gòu)件并不是三言兩語就能說清楚的,下面用一個(gè)簡單的實(shí)例來說明。這個(gè)新控件從TLabel派生而來,是一個(gè)增強(qiáng)型的TLabel控件,當(dāng)用戶單擊這個(gè)控件時(shí),就會(huì)執(zhí)行一個(gè)特殊的操作。該控件增加了一個(gè)屬性URLString,其值表示要執(zhí)行的操作。例如,當(dāng)該屬性值為“http://seawave.yeah.net”這個(gè)字符串時(shí),如果用戶單擊該字符串,則會(huì)調(diào)用系統(tǒng)默認(rèn)的瀏覽器來訪問我的個(gè)人主頁。
首先,為這個(gè)構(gòu)件取一個(gè)名字,這里我用SWURLLabel(個(gè)人喜好,SW表示SeaWave)。
由于這個(gè)控件本質(zhì)上是一個(gè)TLabel,所以它從TLabel類派生而來,繼承所有TLabel的屬性、方法和事件句柄。
該構(gòu)件準(zhǔn)備放在Delphi的一個(gè)新面板上,名為“SeaWave”,因此在Register過程中指明了SeaWave字符串型的參數(shù)。
要為新控件增加一個(gè)字符串型的屬性,名為URL,其值表示要執(zhí)行的操作。
為新控件增加一個(gè)事件句柄OnBeforeExecuteURL,指向當(dāng)執(zhí)行URL之前要調(diào)用的過程。
下面是SWURLLabel.PAS源程序清單。
unit SWURLLabel;
interface
uses
Windows, Classes, Controls, StdCtrls, SysUtils, Forms,
Graphics, ShellAPI;
type
TSWURLLabel = class(TLabel) // 從TLabel類派生
private
FOnBeforeExecuteURL: TNotifyEvent; // 指向執(zhí)行URL之前要調(diào)用的過程
FURL: String; // URL字符串
procedure SetURL(Value:String);
protected
procedure Click; override; // 重載TLabel的Click方法
public
constructor Create(AOwner:TComponent); override; // 構(gòu)造函數(shù)
function ExecuteURL: Boolean; // 方法,執(zhí)行URL
published
property OnBeforeExecuteURL: TNotifyEvent
read FOnBeforeExecuteURL
write FOnBeforeExecuteURL default nil;
property OnExecuteURL: TNotifyEvent
read FOnExecuteURL
write FOnExecuteURL default nil;
property URL:String read FURL write SetURL;
end;
procedure Register;
implementation
const DefaultURL:String = 'http://seawave.yeah.net';
{ 重載TLabel的Click方法 }
procedure TSWURLLabel.Click;
begin
inherited Click; // 執(zhí)行TLabel的Click過程
ExecuteURL; // 調(diào)用ExecuteURL過程來執(zhí)行URL
end;
{ 構(gòu)造函數(shù),初始化屬性 }
constructor TSWURLLabel.Create(AOwner:TComponent);
begin
inherited Create(AOwner); // 首先調(diào)用父類的構(gòu)造函數(shù)
FURL := DefaultURL; // URL屬性值初始化為默認(rèn)值
Caption := DefaultURL; // Caption
Font.Color := clBlue; // 顏色默認(rèn)為藍(lán)色
Font.Style := [fsUnderline]; // 字體默認(rèn)為帶下劃線
Cursor := crHandPoint; // 光標(biāo)形狀默認(rèn)為手掌形
end;
{ 方法,調(diào)用Windows API執(zhí)行URL }
function TSWURLLabel.ExecuteURL;
var
ZFileName:array[0..255] of char;
begin
if Assigned(FOnBeforeExecuteURL) then
FOnBeforeExecuteURL(Self); // 若指定了事件處理過程則調(diào)用它
if Length(FURL)>0 then begin
// 當(dāng)URL不為空時(shí)執(zhí)行
StrPCopy(ZFileName, FURL);
ShellExecute(Application.Handle, nil,
ZFileName, nil, nil, SW_SHOWNORMAL);
end;
end;
{ 登記新構(gòu)件的過程 }
procedure Register;
begin
// 第一個(gè)參數(shù)是面板頁的名字,第二個(gè)參數(shù)是新構(gòu)件的類名
RegisterComponents('SeaWave', [TSWURLLabel]);
end;
{ 私有方法,設(shè)置URL屬性值 }
procedure TSWURLLabel.SetURL(Value:String);
begin
FURL := Value;
if csDesigning in ComponentState then
Caption := Value;
end;
end.
如果要為你的新控件加一個(gè)放在Delphi面板上的圖標(biāo),請用Delphi的映象編輯器建立一個(gè)與構(gòu)件源程序同名的、后綴名為DCR的資源文件,該資源文件包含一個(gè)24乘24的16色位圖(即新構(gòu)件的圖標(biāo)),將此DCR文件與源程序文件放在同一目錄下,安裝新構(gòu)件完畢后就會(huì)發(fā)現(xiàn)新構(gòu)件的圖標(biāo)了(否則Delphi為新構(gòu)件建立一個(gè)省缺的圖標(biāo))。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -