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