<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    如鵬網 大學生計算機學習社區

    CowNew開源團隊

    http://www.cownew.com 郵件請聯系 about521 at 163.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      363 隨筆 :: 2 文章 :: 808 評論 :: 0 Trackbacks
    ?

    ? 有人說過“不會開發控件的Delphi程序員不是真正的程序員”。Delphi正是由于高度的可擴展性和大量的第三方控件的支持才能吸引無數程序員挑剔的目光。即使是由于工作需要使用其他開發工具的開發者也常常懷念和Delphi度過的日日夜夜。接觸Delphi已經一年多了,從當初對著Delphi組件面板上上百個控件不知所措,到現在已經可以根據需要開發一些有一定難度的控件,其中走過的路是十分艱辛的,所以特此寫下這篇文章,將自己的經驗留給后來者,也算是獻給“同門師弟”的一份厚禮吧!

    ??? 需要說明的一點是:在寫這篇文章之前我假設讀者已經對面向對象的基本知識有一定的了解,所以對于文章中面向對象相關的概念將不再展開講述。

    一、牛刀小試-TURLLabel控件

    我們從一個能夠添加超鏈接的標簽控件開始我們的控件開發之旅吧!

    既然是Label我們就從Tlabel派生這個控件吧(其實從TcustomLabel派生最好,不過出于簡單的目的我們這里先從Tlabel派生)!

    1、選擇“File”->New”->Component,將彈出如下的對話框:

    o_1.jpg

    Ancestor type中選擇Tlabel,ClassName中填入TURLLabel(名字可以任意取,但是要以T開頭,否則的話會出現注冊控件時候的問題)。這里Ancestor type代表控件的基類,TURLLabel代表控件的名稱。

    2、超鏈接的視覺效果是帶下劃線的文字,所以我們覆蓋父類的構造函數,在構造函數里修改控件的字體屬性。

    constructor TUrlLabel.Create(AOwner:TComponent);

    begin

    ? inherited Create(AOwner);

    ? Cursor:=crHandPoint;

    ? Font.Style:= [fsUnderline];

    ? end;

    代碼解釋:

    (1)??? inherited Create(AOwner);這句的意思是執行父類的構造函數。我們制作控件的時候,如果覆蓋了父類的構造函數,那么在新的構造函數中一定要首先調用父類的構造函數,否則會引起錯誤。這是很多初學控件開發的人常常遇到的問題。當您把自己開發的控件從面板上拖放到窗體時,如果跳出一個“Access Violent”的錯誤對話框的話,那么十有八九是因為您忘了調用父類的構造函數。

    ??? 2 Cursor:=crHandPoint;

    Font.Style:= [fsUnderline];?

    這三句的意思是修改標簽的視覺效果。Cursor:=crHandPoint;是設定當鼠??????? 標移動到控件上時鼠標的形狀為“手型”;Font.Style:= [fsUnderline];? 是設定文字的下劃線效果。

    3、既然是超鏈接控件,那么我們肯定要能使用戶在使用控件的時候能在“Object Inspector”中對超鏈接的URL進行修改,所以我們應該為控件增加一個Url屬性。

    ?? 屬性是訪問控件字段的接口。通過屬性,控件使用者可以間接讀或者寫控件的內部字段改變控件的狀態。組件屬性的聲明需要以下幾部分:屬性名、屬性類型、讀方法(或讀字段)、寫方法(或寫字段。如果沒有寫方法或寫字段,則該屬性為只讀屬性)。屬性在控件類聲明的Published部分聲明。在Published中聲明的屬性可以在設計期通過“Object Inspector”對屬性值進行修改。如果聲明在Public部分則不可以在設計期通過“Object Inspector”對屬性值進行修改,但是可以在運行時通過代碼進行讀寫。

    ?在類聲明的Private訪問區域中添加如下字段聲明:

    ? FUrl: String;

    ? 在類聲明中添加Published訪問區域,并添加如下代碼

    property Url: String read FUrl write FUrl;

    這段聲明的意思是為控件添加一個Url屬性,屬性的類型是string,在讀Url屬性時返回Furl的值,在寫 Url屬性時設定Furl的值。

    4、超鏈接的視覺效果有了,下面使它點擊時調用瀏覽器打開Url指定的網址。

    Delphi控件的事件處理中很多事件都有對應的一個調度方法(這是設計模式中模板模式的典型應用)。比如在鼠標點擊控件時,控件會首先調用Click方法,由Click方法進行相應的處理,而絕大多數調度方法都會引發一個事件句柄(關于事件句柄我們后邊有深入的介紹)。比如Tlabel控件中在用戶用點擊Label時會首先調用控件的Click方法(被聲明為Protected級別),Click方法再觸發OnClick事件。所以我們只要覆蓋TlabelClick方法進行我們自己的處理就可以了。

    Protected部分添加如下的聲明:

    procedure Click;override;

    ? 在實現部分為Click方法寫如下的代碼:

    procedure TUrlLabel.Click;

    begin

    ? ShellExecute(Application.Handle, nil, PChar(Url), nil, nil,SW_NORMAL);

    ? inherited;

    end;

    代碼解釋:

    (1)??? ShellExecute的作用是用默認的程序打開第三個參數指定的文件。所以當第三個參數為一個URL時,則用瀏覽器打開這個網址。關于ShellExecute其他參數的使用方法可以查閱MSDN或其他相關資料。

    (2)??? Inherited;的作用是調用父類的Click方法來由父類來對鼠標單擊事件做其他的處理。

    5、源代碼。

    下面給出這個控件的全部源代碼:

    unit UrlLabel;

    interface

    uses

    ? Windows, Messages, SysUtils, Classes, Controls, StdCtrls,Shellapi,

    ? Graphics, Forms;

    type

    ? TUrlLabel = class(TLabel)

    ? private

    ??? FUrl:AnsiString;

    ? protected

    ??? procedure Click;override;

    ? public

    ??? constructor Create(AOwner:TComponent);override;

    ? published

    ??? property Url:AnsiString read FUrl write FUrl;

    ? end;

    ?

    procedure Register;

    implementation

    constructor TUrlLabel.Create(AOwner:TComponent);

    begin

    ? inherited Create(AOwner);

    ? Cursor:=crHandPoint;

    ? Font.Style:=[fsUnderline];

    end;

    procedure TUrlLabel.Click;

    begin

    ? ShellExecute(Application.Handle, nil, PChar(Url), nil, nil,SW_NORMAL);

    ? inherited;

    end;

    ?

    procedure Register;

    begin

    ? RegisterComponents('Linco', [TUrlLabel]);//控件生成向導生成的注冊控件用代碼

    end;

    ?

    end.

    6、為控件添加圖標。

    如果沒有給自定義的控件定義圖標,出現在控件面板上的自定義圖標的圖標是默認的圖標,很沒有“個性”,也不容易被用戶與其他控件區別開來,所以我們需要給組件指定一個圖標。

    首先利用DelphiImage Editor創建一個24*24的位圖,并把它保存到一個DCR文件中。創建了一個位圖后,就需要給位圖命名了。位圖的名稱必須和控件的類名相同,且為大寫,而DCR文件的名字則必須與控件所在單元的單元名相同。如我們上邊定義的控件,位圖的名字應該為TURLLABEL,DCR文件的名字應該是UrlLabel.dcr,此DCR文件應該與組件的單元文件放在同一個目錄下。

    打開Image Editor,選擇”File”>New >Component Resource File(.dcr)”,如下圖:

    o_2.jpgo_2.jpg

    在“Contents”上單擊鼠標右鍵,選擇“New”->BitMap”:

    o_3.jpg

    Width,Height中都填入24,點“OK”即可。

    o_4.jpg

    可以在Bitmap1上點右鍵選擇“Rename”為位圖重命名為TURLLABEL,然后雙擊TURLLABEL,就可以像使用“畫圖”一樣為您的控件設計圖標了。

    7、注冊組件。

    點擊Componet>Install Componet進行自定義組件安裝,此時將出現組件安裝對話框。

    Unit FilName 中輸入控件單元文件的文件名(包括路徑),點擊“OK,在彈出的Package Editor 中按下Install按鈕。如果安裝成功系統就會提示安裝成功。關閉Package Editor時,會提示您是否保存修改,點擊Yes即可。

    安裝成功,建立一個測試程序。將URLLabel控件放到窗體上,設定Url屬性為http://www.sohu.com 運行程序,點擊此Label,就會彈出瀏覽器打開http://www.sohu.com這個網址。

    思考題:

    1、如何為控件添加一個圖標?

    2、Delphi中的控件的共同基類是哪個類?

    3、請做一個編輯框控件,當控件中輸入的字符串是網址(以http://開頭)且用戶在編輯框上按回車時,用瀏覽器打開此網址。

    posted on 2005-10-21 23:16 CowNew開源團隊 閱讀(7280) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 性xxxx黑人与亚洲| 亚洲成A∨人片在线观看无码| 久久久久亚洲精品中文字幕| 亚洲综合AV在线在线播放| 亚洲an天堂an在线观看| 亚洲国产av美女网站| 国产精品亚洲а∨天堂2021| 一级特黄录像免费播放中文版| 最好免费观看高清在线| 永久免费av无码不卡在线观看| 免费国产高清视频| 亚洲va国产va天堂va久久| 亚洲乱码中文论理电影| 特级毛片免费播放| 午夜免费福利视频| 日韩免费a级在线观看| 亚洲一区二区三区偷拍女厕| 亚洲第一页中文字幕| 亚洲av成人一区二区三区在线播放| 伊人免费在线观看| 永久免费AV无码国产网站| 国产亚洲精品精品国产亚洲综合| 91亚洲va在线天线va天堂va国产 | 一级一级一级毛片免费毛片| 国产精品视频白浆免费视频| 免费理论片51人人看电影| 亚洲中文字幕无码不卡电影| 精品日韩99亚洲的在线发布| 美女的胸又黄又www网站免费| 一级毛片成人免费看免费不卡| 免费理论片51人人看电影| 亚洲成AV人片天堂网无码| 亚洲精品美女网站| 免费看少妇高潮成人片| 性色av免费观看| 亚洲va在线va天堂va四虎 | 亚洲第一se情网站| 免费a级毛片无码a∨免费软件| 成人影片麻豆国产影片免费观看| 亚洲成AV人在线观看天堂无码| 国产AV无码专区亚洲AV蜜芽|