




文檔簡介
Delphi控件開發(fā)淺入深出(一)<轉>2007-10-25下午04:05有人說過“不會開發(fā)控件的Delphi程序員不是真正的程序員”。Delphi正是由于高度的可擴展性和大量的第三方控件的支持才能吸引無數(shù)程序員挑剔的目光。即使是由于工作需要使用其他開發(fā)工具的開發(fā)者也常常懷念和Delphi度過的日日夜夜。接觸Delphi已經一年多了,從當初對著Delphi組件面板上上百個控件不知所措,到現(xiàn)在已經可以根據(jù)需要開發(fā)一些有一定難度的控件,其中走過的路是十分艱辛的,所以特此寫下這篇文章,將自己的經驗留給后來者,也算是獻給“同門師弟”的一份厚禮吧!
需要說明的一點是:在寫這篇文章之前我假設讀者已經對面向對象的基本知識有一定的了解,所以對于文章中面向對象相關的概念將不再展開講述。一、牛刀小試-TURLLabel控件我們從一個能夠添加超鏈接的標簽控件開始我們的控件開發(fā)之旅吧!既然是Label我們就從Tlabel派生這個控件吧(其實從TcustomLabel派生最好,不過出于簡單的目的我們這里先從Tlabel派生)!1、選擇“File”->“New”->“Component”,將彈出如下的對話框:在Ancestortype中選擇Tlabel,ClassName中填入TURLLabel(名字可以任意取,但是要以T開頭,否則的話會出現(xiàn)注冊控件時候的問題)。這里Ancestortype代表控件的基類,TURLLabel代表控件的名稱。2、超鏈接的視覺效果是帶下劃線的文字,所以我們覆蓋父類的構造函數(shù),在構造函數(shù)里修改控件的字體屬性。constructorTUrlLabel.Create(AOwner:TComponent);begin
inheritedCreate(AOwner);
Cursor:=crHandPoint;
Font.Style:=[fsUnderline];
end;代碼解釋:(1)
inheritedCreate(AOwner);這句的意思是執(zhí)行父類的構造函數(shù)。我們制作控件的時候,如果覆蓋了父類的構造函數(shù),那么在新的構造函數(shù)中一定要首先調用父類的構造函數(shù),否則會引起錯誤。這是很多初學控件開發(fā)的人常常遇到的問題。當您把自己開發(fā)的控件從面板上拖放到窗體時,如果跳出一個“AccessViolent”的錯誤對話框的話,那么十有八九是因為您忘了調用父類的構造函數(shù)。
(2)Cursor:=crHandPoint;Font.Style:=[fsUnderline];
這三句的意思是修改標簽的視覺效果。Cursor:=crHandPoint;是設定當鼠
標移動到控件上時鼠標的形狀為“手型”;Font.Style:=[fsUnderline];
是設定文字的下劃線效果。3、既然是超鏈接控件,那么我們肯定要能使用戶在使用控件的時候能在“ObjectInspector”中對超鏈接的URL進行修改,所以我們應該為控件增加一個Url屬性。
屬性是訪問控件字段的接口。通過屬性,控件使用者可以間接讀或者寫控件的內部字段改變控件的狀態(tài)。組件屬性的聲明需要以下幾部分:屬性名、屬性類型、讀方法(或讀字段)、寫方法(或寫字段。如果沒有寫方法或寫字段,則該屬性為只讀屬性)。屬性在控件類聲明的Published部分聲明。在Published中聲明的屬性可以在設計期通過“ObjectInspector”對屬性值進行修改。如果聲明在Public部分則不可以在設計期通過“ObjectInspector”對屬性值進行修改,但是可以在運行時通過代碼進行讀寫。在類聲明的Private訪問區(qū)域中添加如下字段聲明:
FUrl:String;
在類聲明中添加Published訪問區(qū)域,并添加如下代碼propertyUrl:StringreadFUrlwriteFUrl;這段聲明的意思是為控件添加一個Url屬性,屬性的類型是string,在讀Url屬性時返回Furl的值,在寫Url屬性時設定Furl的值。4、超鏈接的視覺效果有了,下面使它點擊時調用瀏覽器打開Url指定的網(wǎng)址。在Delphi控件的事件處理中很多事件都有對應的一個調度方法(這是設計模式中模板模式的典型應用)。比如在鼠標點擊控件時,控件會首先調用Click方法,由Click方法進行相應的處理,而絕大多數(shù)調度方法都會引發(fā)一個事件句柄(關于事件句柄我們后邊有深入的介紹)。比如Tlabel控件中在用戶用點擊Label時會首先調用控件的Click方法(被聲明為Protected級別),Click方法再觸發(fā)OnClick事件。所以我們只要覆蓋Tlabel的Click方法進行我們自己的處理就可以了。在Protected部分添加如下的聲明:procedureClick;override;
在實現(xiàn)部分為Click方法寫如下的代碼:procedureTUrlLabel.Click;begin
ShellExecute(Application.Handle,nil,PChar(Url),nil,nil,SW_NORMAL);
inherited;end;代碼解釋:(1)
ShellExecute的作用是用默認的程序打開第三個參數(shù)指定的文件。所以當?shù)谌齻€參數(shù)為一個URL時,則用瀏覽器打開這個網(wǎng)址。關于ShellExecute其他參數(shù)的使用方法可以查閱MSDN或其他相關資料。(2)
Inherited;的作用是調用父類的Click方法來由父類來對鼠標單擊事件做其他的處理。5、源代碼。下面給出這個控件的全部源代碼:unitUrlLabel;
interface
uses
Windows,Messages,SysUtils,Classes,Controls,StdCtrls,Shellapi,
Graphics,Forms;
type
TUrlLabel=class(TLabel)
private
FUrl:AnsiString;
protected
procedureClick;override;
public
constructorCreate(AOwner:TComponent);override;
published
propertyUrl:AnsiStringreadFUrlwriteFUrl;
end;
procedureRegister;
implementation
constructorTUrlLabel.Create(AOwner:TComponent);
begin
inheritedCreate(AOwner);
Cursor:=crHandPoint;
Font.Style:=[fsUnderline];
end;
procedureTUrlLabel.Click;
begin
ShellExecute(Application.Handle,nil,PChar(Url),nil,nil,SW_NORMAL);
inherited;
end;
procedureRegister;
begin
RegisterComponents('Linco',[TUrlLabel]);//控件生成向導生成的注冊控件用代碼
end;
end.6、為控件添加圖標。如果沒有給自定義的控件定義圖標,出現(xiàn)在控件面板上的自定義圖標的圖標是默認的圖標,很沒有“個性”,也不容易被用戶與其他控件區(qū)別開來,所以我們需要給組件指定一個圖標。首先利用Delphi的ImageEditor創(chuàng)建一個24*24的位圖,并把它保存到一個DCR文件中。創(chuàng)建了一個位圖后,就需要給位圖命名了。位圖的名稱必須和控件的類名相同,且為大寫,而DCR文件的名字則必須與控件所在單元的單元名相同。如我們上邊定義的控件,位圖的名字應該為TURLLABEL,DCR文件的名字應該是UrlLabel.dcr,此DCR文件應該與組件的單元文件放在同一個目錄下。打開ImageEditor,選擇”File”->“New”->“ComponentResourceFile(.dcr)”,如下圖:在“Contents”上單擊鼠標右鍵,選擇“New”->“BitMap”:在Width,Height中都填入24,點“OK”即可??梢栽贐itmap1上點右鍵選擇“Rename”為位圖重命名為TURLLABEL,然后雙擊TURLLABEL,就可以像使用“畫圖”一樣為您的控件設計圖標了。7、注冊組件。點擊Componet->InstallComponet進行自定義組件安裝,此時將出現(xiàn)組件安裝對話框。在Uni
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年秋季開學升旗演講稿范文(6篇)
- 房屋承包租賃合同(18篇)
- 幼兒園班主任工作計劃總結(32篇)
- 施工項目變更管理協(xié)議
- 正規(guī)裝修官方合同協(xié)議
- 德國大棚買賣合同協(xié)議
- 恒企教育培訓合同協(xié)議
- 品牌化妝品代銷合同協(xié)議
- 武漢市解聘合同協(xié)議
- 商店裝修出租合同協(xié)議
- 2023年小型水庫雨水情測報和大壩安全監(jiān)測設施項目-實施方案
- (2024年)面神經炎課件完整版
- 減鹽減油健康教育教案反思
- 特斯拉國產供應鏈研究報告
- 如何進行醫(yī)療垃圾的安全運輸
- 公共停車場建設項目可行性研究報告
- 保安服務標準及工作流程
- 2024年中考數(shù)學幾何模型歸納(全國通用):18 全等與相似模型之十字模型(學生版)
- 外科疾病分級目錄
- 國家級教學成果的培育提煉與申報
- 海南師范大學《高等數(shù)學》2020-2021期末試卷B
評論
0/150
提交評論