




delphi控件的寫(xiě)法方式.doc 免費(fèi)下載
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Delphi控件開(kāi)發(fā)淺入深出(一)<轉(zhuǎn)>2007-10-25下午04:05有人說(shuō)過(guò)“不會(huì)開(kāi)發(fā)控件的Delphi程序員不是真正的程序員”。Delphi正是由于高度的可擴(kuò)展性和大量的第三方控件的支持才能吸引無(wú)數(shù)程序員挑剔的目光。即使是由于工作需要使用其他開(kāi)發(fā)工具的開(kāi)發(fā)者也常常懷念和Delphi度過(guò)的日日夜夜。接觸Delphi已經(jīng)一年多了,從當(dāng)初對(duì)著Delphi組件面板上上百個(gè)控件不知所措,到現(xiàn)在已經(jīng)可以根據(jù)需要開(kāi)發(fā)一些有一定難度的控件,其中走過(guò)的路是十分艱辛的,所以特此寫(xiě)下這篇文章,將自己的經(jīng)驗(yàn)留給后來(lái)者,也算是獻(xiàn)給“同門(mén)師弟”的一份厚禮吧!
需要說(shuō)明的一點(diǎn)是:在寫(xiě)這篇文章之前我假設(shè)讀者已經(jīng)對(duì)面向?qū)ο蟮幕局R(shí)有一定的了解,所以對(duì)于文章中面向?qū)ο笙嚓P(guān)的概念將不再展開(kāi)講述。一、牛刀小試-TURLLabel控件我們從一個(gè)能夠添加超鏈接的標(biāo)簽控件開(kāi)始我們的控件開(kāi)發(fā)之旅吧!既然是Label我們就從Tlabel派生這個(gè)控件吧(其實(shí)從TcustomLabel派生最好,不過(guò)出于簡(jiǎn)單的目的我們這里先從Tlabel派生)!1、選擇“File”->“New”->“Component”,將彈出如下的對(duì)話框:在Ancestortype中選擇Tlabel,ClassName中填入TURLLabel(名字可以任意取,但是要以T開(kāi)頭,否則的話會(huì)出現(xiàn)注冊(cè)控件時(shí)候的問(wèn)題)。這里Ancestortype代表控件的基類(lèi),TURLLabel代表控件的名稱(chēng)。2、超鏈接的視覺(jué)效果是帶下劃線的文字,所以我們覆蓋父類(lèi)的構(gòu)造函數(shù),在構(gòu)造函數(shù)里修改控件的字體屬性。constructorTUrlLabel.Create(AOwner:TComponent);begin
inheritedCreate(AOwner);
Cursor:=crHandPoint;
Font.Style:=[fsUnderline];
end;代碼解釋?zhuān)海?)
inheritedCreate(AOwner);這句的意思是執(zhí)行父類(lèi)的構(gòu)造函數(shù)。我們制作控件的時(shí)候,如果覆蓋了父類(lèi)的構(gòu)造函數(shù),那么在新的構(gòu)造函數(shù)中一定要首先調(diào)用父類(lèi)的構(gòu)造函數(shù),否則會(huì)引起錯(cuò)誤。這是很多初學(xué)控件開(kāi)發(fā)的人常常遇到的問(wèn)題。當(dāng)您把自己開(kāi)發(fā)的控件從面板上拖放到窗體時(shí),如果跳出一個(gè)“AccessViolent”的錯(cuò)誤對(duì)話框的話,那么十有八九是因?yàn)槟苏{(diào)用父類(lèi)的構(gòu)造函數(shù)。
(2)Cursor:=crHandPoint;Font.Style:=[fsUnderline];
這三句的意思是修改標(biāo)簽的視覺(jué)效果。Cursor:=crHandPoint;是設(shè)定當(dāng)鼠
標(biāo)移動(dòng)到控件上時(shí)鼠標(biāo)的形狀為“手型”;Font.Style:=[fsUnderline];
是設(shè)定文字的下劃線效果。3、既然是超鏈接控件,那么我們肯定要能使用戶(hù)在使用控件的時(shí)候能在“ObjectInspector”中對(duì)超鏈接的URL進(jìn)行修改,所以我們應(yīng)該為控件增加一個(gè)Url屬性。
屬性是訪問(wèn)控件字段的接口。通過(guò)屬性,控件使用者可以間接讀或者寫(xiě)控件的內(nèi)部字段改變控件的狀態(tài)。組件屬性的聲明需要以下幾部分:屬性名、屬性類(lèi)型、讀方法(或讀字段)、寫(xiě)方法(或?qū)懽侄巍H绻麤](méi)有寫(xiě)方法或?qū)懽侄危瑒t該屬性為只讀屬性)。屬性在控件類(lèi)聲明的Published部分聲明。在Published中聲明的屬性可以在設(shè)計(jì)期通過(guò)“ObjectInspector”對(duì)屬性值進(jìn)行修改。如果聲明在Public部分則不可以在設(shè)計(jì)期通過(guò)“ObjectInspector”對(duì)屬性值進(jìn)行修改,但是可以在運(yùn)行時(shí)通過(guò)代碼進(jìn)行讀寫(xiě)。在類(lèi)聲明的Private訪問(wèn)區(qū)域中添加如下字段聲明:
FUrl:String;
在類(lèi)聲明中添加Published訪問(wèn)區(qū)域,并添加如下代碼propertyUrl:StringreadFUrlwriteFUrl;這段聲明的意思是為控件添加一個(gè)Url屬性,屬性的類(lèi)型是string,在讀Url屬性時(shí)返回Furl的值,在寫(xiě)Url屬性時(shí)設(shè)定Furl的值。4、超鏈接的視覺(jué)效果有了,下面使它點(diǎn)擊時(shí)調(diào)用瀏覽器打開(kāi)Url指定的網(wǎng)址。在Delphi控件的事件處理中很多事件都有對(duì)應(yīng)的一個(gè)調(diào)度方法(這是設(shè)計(jì)模式中模板模式的典型應(yīng)用)。比如在鼠標(biāo)點(diǎn)擊控件時(shí),控件會(huì)首先調(diào)用Click方法,由Click方法進(jìn)行相應(yīng)的處理,而絕大多數(shù)調(diào)度方法都會(huì)引發(fā)一個(gè)事件句柄(關(guān)于事件句柄我們后邊有深入的介紹)。比如Tlabel控件中在用戶(hù)用點(diǎn)擊Label時(shí)會(huì)首先調(diào)用控件的Click方法(被聲明為Protected級(jí)別),Click方法再觸發(fā)OnClick事件。所以我們只要覆蓋Tlabel的Click方法進(jìn)行我們自己的處理就可以了。在Protected部分添加如下的聲明:procedureClick;override;
在實(shí)現(xiàn)部分為Click方法寫(xiě)如下的代碼:procedureTUrlLabel.Click;begin
ShellExecute(Application.Handle,nil,PChar(Url),nil,nil,SW_NORMAL);
inherited;end;代碼解釋?zhuān)海?)
ShellExecute的作用是用默認(rèn)的程序打開(kāi)第三個(gè)參數(shù)指定的文件。所以當(dāng)?shù)谌齻€(gè)參數(shù)為一個(gè)URL時(shí),則用瀏覽器打開(kāi)這個(gè)網(wǎng)址。關(guān)于ShellExecute其他參數(shù)的使用方法可以查閱MSDN或其他相關(guān)資料。(2)
Inherited;的作用是調(diào)用父類(lèi)的Click方法來(lái)由父類(lèi)來(lái)對(duì)鼠標(biāo)單擊事件做其他的處理。5、源代碼。下面給出這個(gè)控件的全部源代碼: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]);//控件生成向?qū)傻淖?cè)控件用代碼
end;
end.6、為控件添加圖標(biāo)。如果沒(méi)有給自定義的控件定義圖標(biāo),出現(xiàn)在控件面板上的自定義圖標(biāo)的圖標(biāo)是默認(rèn)的圖標(biāo),很沒(méi)有“個(gè)性”,也不容易被用戶(hù)與其他控件區(qū)別開(kāi)來(lái),所以我們需要給組件指定一個(gè)圖標(biāo)。首先利用Delphi的ImageEditor創(chuàng)建一個(gè)24*24的位圖,并把它保存到一個(gè)DCR文件中。創(chuàng)建了一個(gè)位圖后,就需要給位圖命名了。位圖的名稱(chēng)必須和控件的類(lèi)名相同,且為大寫(xiě),而DCR文件的名字則必須與控件所在單元的單元名相同。如我們上邊定義的控件,位圖的名字應(yīng)該為T(mén)URLLABEL,DCR文件的名字應(yīng)該是UrlLabel.dcr,此DCR文件應(yīng)該與組件的單元文件放在同一個(gè)目錄下。打開(kāi)ImageEditor,選擇”File”->“New”->“ComponentResourceFile(.dcr)”,如下圖:在“Contents”上單擊鼠標(biāo)右鍵,選擇“New”->“BitMap”:在Width,Height中都填入24,點(diǎn)“OK”即可。可以在Bitmap1上點(diǎn)右鍵選擇“Rename”為位圖重命名為T(mén)URLLABEL,然后雙擊TURLLABEL,就可以像使用“畫(huà)圖”一樣為您的控件設(shè)計(jì)圖標(biāo)了。7、注冊(cè)組件。點(diǎn)擊Componet->InstallComponet進(jìn)行自定義組件安裝,此時(shí)將出現(xiàn)組件安裝對(duì)話框。在Uni
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東省深圳市六年級(jí)英語(yǔ)下學(xué)期期中考試真題重組卷(滬教牛津版深圳)
- 三年級(jí)英語(yǔ)下冊(cè) Unit 1 How are you第2課時(shí)教學(xué)設(shè)計(jì) 湘少版
- 初中英語(yǔ)Unit 1 Whats the matterSection A教案
- 九年級(jí)化學(xué)上冊(cè) 第四章 生命之源-水 4.2 水的組成教學(xué)設(shè)計(jì) (新版)粵教版
- 人音版 七年級(jí)下冊(cè)第三單元 我的金色阿勒泰 教學(xué)設(shè)計(jì)
- 人教部編版歷史七年級(jí)下冊(cè)第9課 宋代經(jīng)濟(jì)的發(fā)展 教學(xué)設(shè)計(jì)
- 二年級(jí)上冊(cè)美術(shù)教學(xué)設(shè)計(jì)-04 賀卡(二)-蘇少版
- (二模)晉城市2025年高三第二次模擬考試地理試卷(含答案解析)
- 發(fā)生火災(zāi)應(yīng)急預(yù)案培訓(xùn)
- 振東制藥:2022年年度財(cái)務(wù)報(bào)告
- 2025工程監(jiān)理聘用合同范例
- 自媒體運(yùn)營(yíng)創(chuàng)業(yè)計(jì)劃書(shū)
- 2025年鄭州電力職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)考試題庫(kù)及答案1套
- 過(guò)賬合同協(xié)議范文
- 門(mén)牌安裝施工方案
- 2025年起重機(jī)指揮Q1特種作業(yè)考試復(fù)習(xí)(重點(diǎn))題庫(kù)(濃縮300題)
- 職業(yè)能力測(cè)驗(yàn)考試試卷含答案
- 基于區(qū)塊鏈的數(shù)據(jù)共享與存儲(chǔ)機(jī)制-全面剖析
- 2025年上半年山東青島西海岸新區(qū)“優(yōu)才”專(zhuān)業(yè)化干部選聘40人重點(diǎn)基礎(chǔ)提升(共500題)附帶答案詳解
- GB/T 45355-2025無(wú)壓埋地排污、排水用聚乙烯(PE)管道系統(tǒng)
- MOOC 創(chuàng)業(yè)基礎(chǔ)-暨南大學(xué) 中國(guó)大學(xué)慕課答案
評(píng)論
0/150
提交評(píng)論