在Delphi中編寫控制元件的基本方法 (轉)
在Delphi中編寫控制元件的基本方法 (轉)[@more@]
作為Delphi員,要想進一步提高水平就必須掌握控制元件的編寫方法,本篇文章將透過一個簡單的例子來為初學者介紹編寫控制元件的一些基本方法和。
這個例子控制元件叫TLeiLabel,是在TLabel的基礎上增加兩個實用的功能:一是使文字具有立體形狀,二是使文字具有超連結屬性。下面就讓我們一步步來實現這些功能。
一、使文字具有立體形狀
首先定義型別T3DEffect和屬性Style3D分別如下:
T3DEffect=(Normal,Raised,Lowered, Shadowed);
property Style3D:T3DEffect read FStyle3D write SetStyle3D default Normal;
再在private中定義變數:“FStyle3D:T3DEffect;”,並設定SetStyle3D()方法如下,這也是寫方法的一般格式:
procedure TLeiLabel.SetStyle3D(Value: T3DEffect);
begin
if FStyle3D <> value then
begin
FStyle3D := value;
invalidate; //表示控制元件將重畫
end;
end;
另外對於帶陰影的文字還要定義陰影的偏移量ShadeXOffSet和ShadeYOffSet:
property ShadowXOffSet: integer read FXOffSet write SetFXOffSet default 5;
property ShadowYOffSet: integer read FYOffSet write SetFYOffSet default -5;
寫方法SetFXOffSet()、SetFYOffSet()和上面的SetStyle3D()類似。
要重畫控制元件一般要過載Paint方法,此處只是重畫文字,我們只需過載DoDrawText方法。
DoDrawText的宣告放在Protected中:
procedure DoDrawText(var Rect: TRect; Flags: Longint); overr;
此處DoDrawText()根據四種型別(正常、凸起、凹進和陰影)分別畫出不同的文字。
二、使文字具有超連結屬性
定義一個屬性URL表示要連結的網址或E地址。
Property URL : String read FURL write SetURL;
寫方法SetURL如下:
procedure TLeiLabel.SetURL(Value: String);
Begin
if FURL <> Value then FURL := Value ;
if FURL <> '' then
Cursor := crHandPoint;
end;
當點選此Label時要開啟或收發工具,這便要過載Click方法。
Procedure Click; Override;
procedure TLeiLabel.Click;
var s: string;
Begin
Inherited Click;
if FURL = '' then exit;
if LowerCase(Copy(FURL,1,7)) = 'http://' then
s := FURL
else if Pos('@',FURL) <> 0 Then
s := 'mailto:' + FURL
else
s := 'http://' + FURL;
Execute(Application.Handle, 'open', PChar(s), NIL, NIL, SW_SHOWNORMAL);
end;
一般的超連結當滑鼠移入時文字的顏色發生變化。為此加上屬性HoverColor,表示滑鼠移入時文字的顏色。
Property HoverColor : TColor Read FHoverColor Write SetHoverColor default clRed;
還要定義兩個接收訊息CM_MOUSEENTER和CM_MOUSELEAVE(滑鼠移進和移出)的過程:
Procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
Procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
Procedure TLeiLabel.CMMouseEnter (Var Message: TMessage);
begin
If Enabled and Visible and getParentForm(Self).Active then
begin
FFontColor := Font.Color;
//將文字的顏色儲存起來
Font.Color := FHoverColor;
//改變文字顏色
End;
end;
Procedure TLeiLabel.CMMouseLeave (Var Message: TMessage);
begin
Font.Color:=FFontColor;
//恢復文字原來的顏色
end;
為設定屬性的預設值,我們還需要過載構造Create(),注意,過載構造時必須首先祖先類的構造。過載構造Create()的程式如下:
constructor TLeiLabel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
//必須首先呼叫祖先類的構造
FStyle3D := Normal;
FXOffSet := 5;
FYOffSet := -5;
FHoverColor := clRed;
end;
最後,還必須為這個控制元件加上圖示。我們可以用Delphi中的Image Editor來建立一個24×24的Bitmap點陣圖,儲存為一個DCR,檔名必須與控制元件的Pas檔名相同,點陣圖名必須與控制元件名相同且全部大寫。
在中編寫的基本方法
作為Delphi員,要想進一步提高水平就必須掌握控制元件的編寫方法,本篇文章將透過一個簡單的例子來為初學者介紹編寫控制元件的一些基本方法和。
這個例子控制元件叫TLeiLabel,是在TLabel的基礎上增加兩個實用的功能:一是使文字具有立體形狀,二是使文字具有超連結屬性。下面就讓我們一步步來實現這些功能。
一、使文字具有立體形狀
首先定義型別T3DEffect和屬性Style3D分別如下:
T3DEffect=(Normal,Raised,Lowered, Shadowed);
property Style3D:T3DEffect read FStyle3D write SetStyle3D default Normal;
再在private中定義變數:“FStyle3D:T3DEffect;”,並設定SetStyle3D()方法如下,這也是寫方法的一般格式:
procedure TLeiLabel.SetStyle3D(Value: T3DEffect);
begin
if FStyle3D <> value then
begin
FStyle3D := value;
invalidate; //表示控制元件將重畫
end;
end;
另外對於帶陰影的文字還要定義陰影的偏移量ShadeXOffSet和ShadeYOffSet:
property ShadowXOffSet: integer read FXOffSet write SetFXOffSet default 5;
property ShadowYOffSet: integer read FYOffSet write SetFYOffSet default -5;
寫方法SetFXOffSet()、SetFYOffSet()和上面的SetStyle3D()類似。
要重畫控制元件一般要過載Paint方法,此處只是重畫文字,我們只需過載DoDrawText方法。
DoDrawText的宣告放在Protected中:
procedure DoDrawText(var Rect: TRect; Flags: Longint); overr;
此處DoDrawText()根據四種型別(正常、凸起、凹進和陰影)分別畫出不同的文字。
二、使文字具有超連結屬性
定義一個屬性URL表示要連結的網址或E地址。
Property URL : String read FURL write SetURL;
寫方法SetURL如下:
procedure TLeiLabel.SetURL(Value: String);
Begin
if FURL <> Value then FURL := Value ;
if FURL <> '' then
Cursor := crHandPoint;
end;
當點選此Label時要開啟或收發工具,這便要過載Click方法。
Procedure Click; Override;
procedure TLeiLabel.Click;
var s: string;
Begin
Inherited Click;
if FURL = '' then exit;
if LowerCase(Copy(FURL,1,7)) = 'http://' then
s := FURL
else if Pos('@',FURL) <> 0 Then
s := 'mailto:' + FURL
else
s := 'http://' + FURL;
Execute(Application.Handle, 'open', PChar(s), NIL, NIL, SW_SHOWNORMAL);
end;
一般的超連結當滑鼠移入時文字的顏色發生變化。為此加上屬性HoverColor,表示滑鼠移入時文字的顏色。
Property HoverColor : TColor Read FHoverColor Write SetHoverColor default clRed;
還要定義兩個接收訊息CM_MOUSEENTER和CM_MOUSELEAVE(滑鼠移進和移出)的過程:
Procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
Procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
Procedure TLeiLabel.CMMouseEnter (Var Message: TMessage);
begin
If Enabled and Visible and getParentForm(Self).Active then
begin
FFontColor := Font.Color;
//將文字的顏色儲存起來
Font.Color := FHoverColor;
//改變文字顏色
End;
end;
Procedure TLeiLabel.CMMouseLeave (Var Message: TMessage);
begin
Font.Color:=FFontColor;
//恢復文字原來的顏色
end;
為設定屬性的預設值,我們還需要過載構造Create(),注意,過載構造時必須首先祖先類的構造。過載構造Create()的程式如下:
constructor TLeiLabel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
//必須首先呼叫祖先類的構造
FStyle3D := Normal;
FXOffSet := 5;
FYOffSet := -5;
FHoverColor := clRed;
end;
最後,還必須為這個控制元件加上圖示。我們可以用Delphi中的Image Editor來建立一個24×24的Bitmap點陣圖,儲存為一個DCR,檔名必須與控制元件的Pas檔名相同,點陣圖名必須與控制元件名相同且全部大寫。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990235/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在Delphi中編寫控制元件的基本方法(1) (轉)控制元件
- Delphi使用VB編寫的ActiveX控制元件全攻略 (轉)控制元件
- 用Delphi編寫DelTree程式 (轉)
- 在Delphi中使用IP控制元件 (轉)控制元件
- 在delphi中使用flash控制元件 (轉)控制元件
- 利用DELPHI編寫WINDOWS外殼 (轉)Windows
- 關於Delphi中預編譯指令的使用方法 (轉)編譯
- 在 Linux 中如何編寫基本的 udev 規則Linuxdev
- 用Delphi編寫安裝程式(1) (轉)
- 利用Delphi編寫IE擴充套件 (轉)套件
- Delphi編寫網路程式的安全措施 (轉)
- 排除Delphi5中編寫COM+程式的一個錯誤 (轉)
- 使用Delphi,SDK編寫Windows簡單程式 (轉)Windows
- 在DELPHI中圖片轉換
- 用 Delphi 編寫 VxD 裝置驅動程式(轉) (轉)
- 利用Delphi編寫Windows外殼擴充套件 (轉)Windows套件
- 用Delphi編寫塗鴉桌面的小程式 (轉)
- 在Delphi中操作快捷方式 (轉)
- 在Delphi中巧用WINDOWS 的API函式 (轉)WindowsAPI函式
- 編寫在瀏覽器中不彈出警告的ActiveX控制元件瀏覽器控制元件
- 初學 Delphi 嵌入彙編[26] - 大小寫字母轉換
- 對Delphi控制元件的一點改良 (轉)控制元件
- 使用Delphi呼叫C++編寫的DLLC++
- 在DELPHI程式中撥號上網 (轉)
- 改良控制元件-Delphi自帶控制元件Bug的消除 (轉)控制元件
- 在Delphi中實現圖片的旋轉、縮放 (轉)
- 用Delphi編寫點對點傳檔案程式(1) (轉)
- 用Delphi編寫點對點傳檔案程式(2) (轉)
- Delphi 6.0中屬性編輯器的解決方案 (轉)
- 對Delphi控制元件的一點改良(二) (轉)控制元件
- delphi 控制元件的拿來主義(一) (轉)控制元件
- 相當於delphi的日曆控制元件 (轉)控制元件
- Delphi控制元件的拿來主義(二) (轉)控制元件
- 對Delphi控制元件的一點改良(三) (轉)控制元件
- Delphi控制元件的拿來主義(三) (轉)控制元件
- Delphi(BCB)中編譯器版本宏定義 (轉)編譯
- 在Delphi中實現任意形狀的窗體 (轉)
- 在Delphi中捕獲控制檯程式的輸出 (轉)