版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
TOT培訓(xùn)課程2014年3月7
日Delphi編程(IDE)與工具Delphi開(kāi)發(fā)工具介紹Delphi簡(jiǎn)介
1、Delphi:特爾斐--古希臘城市,是世界聞名的著名古跡,
古希臘人認(rèn)為:特爾斐是地球的中心,是“地球的肚臍”。2、Delphi,是Windows平臺(tái)下著名的快速應(yīng)用程序開(kāi)發(fā)工具 (RapidApplicationDevelopment,簡(jiǎn)稱(chēng)RAD)。Delphi發(fā)展史
1、Hejlsberg丹麥為MS-DOS和CP/M設(shè)計(jì)了一個(gè)Pascal編譯器。
2、美國(guó)Borland(寶蘭)公司于1995年開(kāi)發(fā)TurboPascal。3、20049.0正式名稱(chēng):Delphi2005。
4、20088.25Embarcadero發(fā)布CodeGearDelphi2009Pre-release。
5、2010.8.30Embarcadero發(fā)布DelphiXE。課程模塊目標(biāo)經(jīng)過(guò)本課程模塊的培訓(xùn),學(xué)員能夠熟悉Delphi集成開(kāi)發(fā)環(huán)境掌握IDE相關(guān)設(shè)置使用Delphi編寫(xiě)和調(diào)試應(yīng)用程序不可能一下完全掌握所有內(nèi)容,需要在以后工作中提高自己的應(yīng)用能力單元1:DELPHIIDE環(huán)境單元目標(biāo)本單元結(jié)束后,你將能夠熟悉Delphi各界面功能掌握IDE界面的相關(guān)設(shè)置結(jié)合實(shí)際應(yīng)用的需要對(duì)IDE進(jìn)行個(gè)性化定制1.1什么是IDE(Integrated
Development
Environment)
IDE就是“集成開(kāi)發(fā)環(huán)境”IDE的歷史Borland的Turbo系列開(kāi)先河集成開(kāi)發(fā)環(huán)境高效代碼編寫(xiě)支撐環(huán)境對(duì)RAD的支撐集成軟件工程思想,開(kāi)發(fā)平臺(tái)sun、microsoft、ibm、borland等等的ide都有…1.2DELPHIIDE界面的熟悉使用新軟的路子(認(rèn)識(shí)人的過(guò)程)望:遍歷所有的菜單、界面聞:具體功能在IDE上的體現(xiàn)、掛接問(wèn):實(shí)在不知到的,看幫助切:自己動(dòng)手,搗鼓搗鼓動(dòng)手(編碼)實(shí)踐很重要…1.3IDE常用快捷鍵IDE常用快捷鍵代碼瀏覽:ctrl+mouse、ctrl+enter定義、實(shí)現(xiàn)切換:ctrl+shift+上下鍵視圖切換:F12運(yùn)行、調(diào)試的快捷鍵:F9、F8(單步)、F7(跟蹤)…據(jù)說(shuō)大蝦們都是只用鍵盤(pán)…1.3IDE常用快捷鍵IDE常用快捷鍵類(lèi)自動(dòng)生成:ctrl+shift+c單元引用快捷鍵:alt+shift+u代碼即時(shí)提示(輸入法沖突問(wèn)題):ctrl+space快速移動(dòng)光標(biāo),刪除行,注釋行其他:如TodoList、自動(dòng)生成GUID、項(xiàng)目管理器等等
TodoList:任務(wù)列表GUID:
一種由算法生成的二進(jìn)制長(zhǎng)度為128位的數(shù)字標(biāo)識(shí)符。
1.4
IDE編輯器設(shè)置一些常用的編輯器設(shè)置使用DeskTop:存儲(chǔ)用戶(hù)對(duì)IDE的個(gè)性設(shè)置;支持后悔:Undoaftersave個(gè)性化的:ColorKeyMapping:熱鍵1.5
IDE環(huán)境設(shè)置需要重點(diǎn)關(guān)注LibraryBPL(BorlandPackageLibraries)(dll)DCP(DelphiCompiledPackage)1.6項(xiàng)目的屬性設(shè)置每個(gè)項(xiàng)目有自己的相關(guān)配置生成文件的輸出路徑(dcu/bpl/dcp/exe/…)項(xiàng)目的條件編譯帶包編譯編譯器優(yōu)化、調(diào)試(如輸出調(diào)試信息,供AQTime等使用)版本信息(特別是build號(hào)),發(fā)版的識(shí)別注意:這些屬性保存在當(dāng)前工程項(xiàng)目文件中相關(guān)文件中(配置文件)1.7小結(jié)個(gè)性化自己的IDE界面軟件是用出來(lái)的!Gogogo…提示:想快速啟動(dòng)Delphi?使用/ns、/np等…1.8親自動(dòng)手初步搞定自己的IDE設(shè)置進(jìn)入delphi
IDE的主界面:(望)1.8親自動(dòng)手點(diǎn)擊“NewProject”界面:(聞)1.8親自動(dòng)手點(diǎn)擊“Help”界面:(問(wèn))1.8親自動(dòng)手點(diǎn)擊“OpenProject”界面:(切)單元2:DELPHI開(kāi)發(fā)環(huán)境單元目標(biāo)本單元結(jié)束后,你將能夠掌握IDE控件的安裝了解IDE常用插件/專(zhuān)家的使用根據(jù)個(gè)人需要配置IDE的控件、插件/專(zhuān)家2.1控件安裝IDE內(nèi)在的機(jī)制,支持更加豐富的RAD開(kāi)發(fā)第三方控件toolbar2000+tbx/…Toolbar2000是一套給BorlandDelphi及C++Builder專(zhuān)用的編程組件,可以用來(lái)仿制Office2000的菜單及工具條,支持Delphi4.0-7.0版及C++Builder4.0-6.0版。
TBX
基于
ISO
術(shù)語(yǔ)數(shù)據(jù)表示的
XML
標(biāo)準(zhǔn),采用
TBX
,用戶(hù)可以很方便的在不同格式的術(shù)語(yǔ)庫(kù)之間交換術(shù)語(yǔ)庫(kù)數(shù)據(jù)。公司相關(guān)控件GrandResource/GSP/GRP/…2.1控件安裝DELPHI通過(guò)注冊(cè)表保存相關(guān)的設(shè)置(regedit)第一次安裝并成功運(yùn)行后,備份:HKEY_LOCAL_MACHINE\SOFTWARE\BorlandHKEY_CURRENT_USER\Software\Borland注冊(cè)表幾個(gè)關(guān)鍵鍵控件包、專(zhuān)家包老生常談:注冊(cè)表操作要非常小心2.2按需加載控件為什么要按需加載控件八輩子用不著的控件降低IDE內(nèi)存的占用提高IDE的穩(wěn)定性如何要按需加載控件了解你的需求Component->InstallPackages直接注冊(cè)表2.2按需加載控件小提示:不常用的控件ActionBar:動(dòng)作條ControlPanel:控制面板BDE、InterBase、DBX、SQLExplorerUIDataSnap、WebSnapTeeChart等等如何保存我們個(gè)性化的設(shè)置?快速設(shè)置?2.3IDE的插件/專(zhuān)家插件/專(zhuān)家:IDE的擴(kuò)展(eclipse、vs等)快速查找/編寫(xiě)/理解代碼功能性支撐(如重構(gòu):項(xiàng)目重構(gòu)&代碼重構(gòu))其他功能的擴(kuò)展2.3IDE的插件/專(zhuān)家Gexpert(DelphiIDE輔助免費(fèi)工具)開(kāi)源、OTA范例(OpenToolsAPI)ModelMakerCodeExplorer吐血推薦的refactor工具重構(gòu):Delphi程序員的日常工作,MMX可以大大提高效率/code-explorer/download.html公欲善其事,必先利其器2.3IDE的插件/專(zhuān)家GExpertsModelMakerCodeExplorer(MMX)2.3.1GExpertsGExpertsisafreesetoftoolsbuilttoincreasetheproductivityofDelphiandC++BuilderprogrammersbyaddingseveralfeaturestotheIDE.2.3.1GExperts查找類(lèi)搜索、替換編輯菜單添加注釋空間批量替換文本排序清除目錄查看PE結(jié)構(gòu)……2.3.2MMX取代IDE原有的CodeExplorer代碼瀏覽器類(lèi)、方法、屬性編輯器代碼重構(gòu)實(shí)時(shí)的文檔提示……2.3.3其他CnWizards開(kāi)源,功能齊全Castalia調(diào)試?yán)鳎ㄖ灰峭ㄟ^(guò)發(fā)消息,記錄狀態(tài)等)2.5親自動(dòng)手安裝OutLook控件單元3:DELPHI應(yīng)用程序框架單元目標(biāo)理解DELPHI應(yīng)用程序框架掌握DELPHI開(kāi)發(fā)的一般步驟使用DELPHI進(jìn)行應(yīng)用程序的編寫(xiě)學(xué)會(huì)簡(jiǎn)單的調(diào)試新建一個(gè)單文檔應(yīng)用程序3.1第一個(gè)應(yīng)用程序運(yùn)行如下3.1第一個(gè)應(yīng)用程序3.1第一個(gè)應(yīng)用程序文件類(lèi)型dpr:項(xiàng)目文件dfm:窗體文件dps:?jiǎn)卧募cu:中間文件res:資源文件cfg:配置文件……這么多的項(xiàng)目文件,都需要么?drc、dsk、map不需要掌握3.1第一個(gè)應(yīng)用程序IDE多項(xiàng)目管理功能項(xiàng)目添加設(shè)置啟動(dòng)項(xiàng)目3.1第一個(gè)應(yīng)用程序IDE多項(xiàng)目管理功能依賴(lài)關(guān)系管理3.1第一個(gè)應(yīng)用程序建議:良好的文件結(jié)構(gòu)獨(dú)立一個(gè)目錄:Bin、Source……3.2單元內(nèi)容單元結(jié)構(gòu)unitinterfaceusestypeimplementationinitialization(不一定有)finalization(不一定有)3.2單元內(nèi)容引用規(guī)則uses和dpr、searchpath解決單元循環(huán)引用定義全局變量3.3應(yīng)用程序框架初步Application全局變量應(yīng)用程序的骨架(VCL)通過(guò)VCL框架封裝傳統(tǒng)的Win32消息派發(fā)機(jī)制Application的秘密(不可見(jiàn)窗體)3.3應(yīng)用程序框架初步Application的一些重要屬性/方法CreateFormExeName獲取當(dāng)前執(zhí)行程序的名字ProcessMessagesVCL偷偷摸摸的在后臺(tái)都干了什么?源碼的幸福:ctrl+mouse通過(guò)debug追蹤3.4應(yīng)用程序調(diào)試方法斷點(diǎn)增加刪除斷點(diǎn)條件斷點(diǎn)運(yùn)行到光標(biāo)位置跟蹤:F7單步:F8、shift+F8WatchListCallStack謝謝前言大而全會(huì)用,知道,不深究基礎(chǔ)語(yǔ)法----注釋花括號(hào)注解圓括號(hào)/星號(hào)注解C++風(fēng)格的雙斜杠注解{Copyright(c)1994-2004GrandSoftCorporation
}(*Privatedeclarations*)//Admin帳號(hào)
基礎(chǔ)語(yǔ)法----變量先聲明,后使用大小寫(xiě)不敏感可以對(duì)全局變量賦初值例如:varValue:Integer=10;Correct:Boolean=True;這種初始化方法只能用于全程變量,不能用于過(guò)程或方法的變量。
基礎(chǔ)語(yǔ)法----常量定義常量不用指定類(lèi)型,但也允許指定
聲明常量不必特定數(shù)據(jù)類(lèi)型,但需要賦一個(gè)初值。編譯器會(huì)根據(jù)所賦初值自動(dòng)選用合適的數(shù)據(jù)類(lèi)型。不指定類(lèi)型constThousand=1000;Pi=3.14;指定類(lèi)型constThousand:Integer=1000;基礎(chǔ)語(yǔ)法----運(yùn)算符
賦值運(yùn)算符比較運(yùn)算符邏輯表達(dá)式算術(shù)運(yùn)算符按位運(yùn)算符加減運(yùn)算過(guò)程:==><<>>=<=andornot+-*/divmodandornotxorshlshrInc()dec()加減運(yùn)算過(guò)程inc自增函數(shù)1.inc(i,n);//i,n:integer;n為自增量相當(dāng)于i:=i+n;2.inc(i);//i:integer;相當(dāng)于i:=i+1;-----------------------------------------------dec自減函數(shù)1.dec(i,n);//i,n:integer;n為自減量相當(dāng)于i:=i-n;2.dec(i);//i:integer;相當(dāng)于i:=i-1;
基礎(chǔ)語(yǔ)法----數(shù)據(jù)類(lèi)型Delphi中的基本數(shù)據(jù)類(lèi)型包括整型、實(shí)型、字符型、布爾型、枚舉型和子界型字符基礎(chǔ)語(yǔ)法----數(shù)據(jù)類(lèi)型整型類(lèi)型
基礎(chǔ)語(yǔ)法----數(shù)據(jù)類(lèi)型實(shí)型基礎(chǔ)語(yǔ)法----數(shù)據(jù)類(lèi)型布爾型枚舉類(lèi)型枚舉類(lèi)型1.枚舉類(lèi)型是一種自定義有序類(lèi)型,在枚舉類(lèi)型中,列出所有該類(lèi)型可能取的值,而不是指定現(xiàn)有類(lèi)型的范圍。例如:TypeColors=(Red,Yellow,Green,Blue);序列中的每個(gè)值都對(duì)應(yīng)一個(gè)序號(hào),序號(hào)從0開(kāi)始計(jì)數(shù)子界類(lèi)型子界類(lèi)型1.子界類(lèi)型定義了某種類(lèi)型的取值范圍;2.必須是一種有序類(lèi)型;例子:typeNum=1..10;Varn:Num;如果定義一個(gè)子界變量,那么賦給該變量的值必須是子界范圍內(nèi)的值例如:n:=11;//error基礎(chǔ)語(yǔ)法----RecordrecordTPoint=recordX:integer;Y:integer;end通過(guò).來(lái)訪問(wèn)他的域我在C/C++中叫Struct基礎(chǔ)語(yǔ)法----數(shù)據(jù)類(lèi)型變體類(lèi)型(Variant類(lèi)型)基礎(chǔ)語(yǔ)法----數(shù)組
靜態(tài)數(shù)組A:array[2..10]ofinteger數(shù)組下標(biāo)不一定從0或1開(kāi)始,遍歷數(shù)組元素時(shí)請(qǐng)使用Low()和High()定義多維數(shù)組,使用逗號(hào)隔開(kāi)編譯期已確定其元素個(gè)數(shù)如下例:TypeMonthTemps=array[1..24]ofInteger //一維數(shù)組TypeMonthTemps=array[1..24,1..31]ofInteger //二維數(shù)組強(qiáng)烈建議使用Low和High操作數(shù)組,特別是在循環(huán)中,因?yàn)檫@樣能使代碼與數(shù)組范圍無(wú)關(guān),如果你改變數(shù)組下標(biāo)的范圍聲明,Low和High代碼不會(huì)受影響;a:Array[1..24]ofInteger;
Low(a)//返回?cái)?shù)組a的第一個(gè)元素的下標(biāo)High(a)//返回?cái)?shù)組a的最后一個(gè)元素的下標(biāo)基礎(chǔ)語(yǔ)法----數(shù)組動(dòng)態(tài)數(shù)組運(yùn)行時(shí)動(dòng)態(tài)分配元素個(gè)數(shù)A:arrayofintegerA2:arrayofarrayofInteger下標(biāo)一般從0開(kāi)始使用SetLength分配內(nèi)存.只有使用SetLength為動(dòng)態(tài)數(shù)組分配內(nèi)存空間后才能使用動(dòng)態(tài)數(shù)組生存期自管理,置為nil即回收使用Copy函數(shù)進(jìn)行復(fù)制例如:
StrArr:arrayofString;SetLength(StrArr,6);基礎(chǔ)語(yǔ)法開(kāi)放數(shù)組面向?qū)ο驪ascal有一個(gè)開(kāi)放數(shù)組的概念允許向一個(gè)方法傳遞未指定大小的數(shù)組。function
Mean(Data:
array
of
Double):
Extended;
//Pascal調(diào)用
Result
:=
Mean([3.1,
4.4,
5.6]);
基礎(chǔ)語(yǔ)法----語(yǔ)句if語(yǔ)句格式:If…thenElse…End例子:Ifa=1thenShowMessage(‘1’)//注意沒(méi)有分號(hào)ElseShowMessage(‘2’);caseCase基本格式:基礎(chǔ)語(yǔ)法----語(yǔ)句舉例:Functionfun(i:Integer):Integer;BeginCaseIof1:ShowMessage(‘1’);2:ShowMessage(‘2’);ElseShowMessage(‘3’);endEnd;基礎(chǔ)語(yǔ)法----語(yǔ)句for循環(huán)while循環(huán)repeat循環(huán)基礎(chǔ)語(yǔ)法----語(yǔ)句for循環(huán)For<循環(huán)變量>:=<初值>{To|DownTo}<終值>Do循環(huán)體舉例:求1..100的和VarI,sum:Integer;Beginsum:=0;Fori:=1to100dosum:=sum+i;End;基礎(chǔ)語(yǔ)法----語(yǔ)句while循環(huán)While<條件>Do循環(huán)體基礎(chǔ)語(yǔ)法----語(yǔ)句repeat循環(huán)(相當(dāng)與C++中的do…while語(yǔ)句)Repeat循環(huán)體Until<條件>基礎(chǔ)語(yǔ)法----語(yǔ)句Break()過(guò)程Continue()過(guò)程forin循環(huán)For變量in值stringExpr='HuangJacky';forcinstringExprdo
ShowMessage(C);With當(dāng)代碼很復(fù)雜時(shí),with語(yǔ)句很有用,可以省去一些臨時(shí)變量,但是這樣做會(huì)使代碼的可讀性比較差。基礎(chǔ)語(yǔ)法----過(guò)程與函數(shù)過(guò)程和函數(shù)每一個(gè)Objectpascal函數(shù)都有一個(gè)隱含的本地變量Result,它包含了函數(shù)的返回值給Result賦值后函數(shù)并不會(huì)結(jié)束
值參數(shù)引用參數(shù)常量參數(shù)傳值與傳址的區(qū)別const保護(hù)不希望被修改的參數(shù)不會(huì)被意外修改,而且對(duì)于字符串、記錄參數(shù)能產(chǎn)生更優(yōu)化的代碼聲明函數(shù)欲聲明一個(gè)過(guò)程或函數(shù),而且只給出它的名字和參數(shù),不列出其實(shí)現(xiàn)代碼,需要在句尾加forward關(guān)鍵字:procedureHello;forward;基礎(chǔ)語(yǔ)法缺省值參數(shù)缺省參數(shù)的使用規(guī)則包括:1.帶缺省值的參數(shù)必須放在參數(shù)表的最后面;2.缺省值必須是常量;functionMyFun(a:Integer;b:Integer=1; c:Integer=2):Integer;
begin
Result:=a+b+c;
end;基礎(chǔ)語(yǔ)法----作用域
全局—所有單元均可以訪問(wèn)單元內(nèi)全局—在單元內(nèi)的所有函數(shù)、過(guò)程均可以訪問(wèn)局部—函數(shù)內(nèi)部可以訪問(wèn)老大,貢獻(xiàn)一些美女圖片吧?不給,氣死你!基礎(chǔ)語(yǔ)法----單元unit—單元名稱(chēng)與文件名稱(chēng)必須匹配interface—在interface與Implementation語(yǔ)句之間是能被其他單元所共享的信息。包括類(lèi)型、常量、變量、過(guò)程、函數(shù)等implementation—包括過(guò)程、函數(shù)的實(shí)現(xiàn)代碼,同時(shí)也可以聲明不被其他單元共享的類(lèi)型,常量,變量initialization—單元初始化代碼,在主程序之前運(yùn)行,且只運(yùn)行一次finalization—單元被釋放時(shí)執(zhí)行循環(huán)引用了!基礎(chǔ)語(yǔ)法方法的覆蓋通過(guò)覆蓋方法可以在不同的實(shí)現(xiàn)類(lèi)中有不同的行為,即多態(tài)。Type
T1=class
procedureAB;Virtual;end;T2=class(T1)
procedureAB;end;基礎(chǔ)語(yǔ)法方法的重載概念:重載函數(shù)就是指函數(shù)名相同,參數(shù)的個(gè)數(shù)或參數(shù)的數(shù)據(jù)類(lèi)型不同的函數(shù)functionsum(n1,n2:Integer):Integer;overload;
functionsum(n1,n2,n3:Integer):Integer;overload;
基礎(chǔ)語(yǔ)法重新引入方法名稱(chēng)有時(shí)候,需要在派生類(lèi)中增加一個(gè)方法,而這個(gè)方法的名稱(chēng)與祖先類(lèi)中的某個(gè)方法名稱(chēng)相同。編譯時(shí)會(huì)發(fā)出警告,告訴你派生類(lèi)的方法將隱藏父類(lèi)的同名方法.要解決這個(gè)問(wèn)題,可以在派生類(lèi)中使用reintroduce指示符type
TSomeBase
=
class
procedure
Cooper;
end;
TSomeClass
=
class(TSomeBase)
procedure
Cooper;
reintroduce;
end;
基礎(chǔ)語(yǔ)法----RTTI運(yùn)行期類(lèi)型信息(RTTI)是一種語(yǔ)言特征,能使應(yīng)用程序在運(yùn)行時(shí)得到關(guān)于對(duì)象的信息as和isObjectisclass如果Object是類(lèi)class的一個(gè)實(shí)例,則返回true;否則返回false;Objectisclass返回值為Object的引用,類(lèi)型為class類(lèi)型.基礎(chǔ)語(yǔ)法----接口背景:為什么要有接口COM接口面向?qū)ο蟮脑O(shè)計(jì)(解決多繼承問(wèn)題)基礎(chǔ)語(yǔ)法----接口Delphi接口機(jī)制介紹通用接口IUnknown有三個(gè)函數(shù)FunctionQueryInterface,_AddRef,_ReleaseQueryInterface函數(shù)返回控件是否支持接口_AddRef函數(shù)給接口指針加1_Release函數(shù)給接口指針減一,為0釋放IUnknownAddRef_ReleaseQueryInterface基礎(chǔ)語(yǔ)法----接口(1)接口中只有方法、屬性,沒(méi)有字段。所以接口中的屬性存取都必須通過(guò)方法。
(2)接口中的方法只有聲明,沒(méi)有實(shí)現(xiàn)。實(shí)現(xiàn)在類(lèi)中完。
(3)接口中的方法沒(méi)有作用域。都是公開(kāi)的,但是在類(lèi)中則放到不同作用域。
(4)接口中的方法沒(méi)有修飾字??梢哉J(rèn)為它們都是抽象。
(5)不能創(chuàng)建接口實(shí)例,要使用接口,必須在類(lèi)中實(shí)現(xiàn),通過(guò)類(lèi)調(diào)用接口的方法。
(6)在類(lèi)中必須聲明和實(shí)現(xiàn)接口的所有方法。不像類(lèi)繼承中可以選擇。
(7)接口中的方法在類(lèi)中實(shí)現(xiàn)時(shí),可以加virtual/dynamic、abstract修飾,從而在子類(lèi)中可以實(shí)現(xiàn)覆蓋?;A(chǔ)語(yǔ)法----接口GUID:GUID是全局唯一標(biāo)識(shí)符,是一個(gè)128位的整數(shù)!
一般用來(lái)在COM中唯一的標(biāo)識(shí)一個(gè)接口.
同時(shí)由于GUID無(wú)法被任何語(yǔ)言支持表達(dá),因?yàn)闆](méi)有一種語(yǔ)言能夠表達(dá)128位的數(shù)據(jù),所以O(shè)P中使用一個(gè)叫TGUID的記錄來(lái)代表GUID。TGUID格式:
{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
面向?qū)ο蠡A(chǔ)類(lèi)(Class):面向?qū)ο笳Z(yǔ)言的基礎(chǔ)就是類(lèi),ObjectPascal的基礎(chǔ)也是類(lèi)。從類(lèi)和對(duì)象入手介紹ObjectPascal的面向?qū)ο筇匦浴n?lèi)的定義:類(lèi)是用戶(hù)創(chuàng)建的數(shù)據(jù)類(lèi)型,包括狀態(tài)、表達(dá)式和一些操作。有3個(gè)組成部分,即字段、方法和屬性。字段是類(lèi)的內(nèi)部數(shù)據(jù)變量,方法就是類(lèi)中定義的函數(shù)和過(guò)程,屬性是類(lèi)提供給外部使用的數(shù)據(jù)變量。面向?qū)ο蠡A(chǔ)對(duì)象的定義:對(duì)象就是類(lèi)的實(shí)例。對(duì)象是實(shí)體,在程序運(yùn)行時(shí)將為其內(nèi)部表達(dá)式開(kāi)辟內(nèi)存。對(duì)象的創(chuàng)建對(duì)象的撤銷(xiāo)面向?qū)ο蠡A(chǔ)類(lèi)的特征:封裝性。類(lèi)把數(shù)據(jù)和方法封裝在一起,同時(shí)隱藏了實(shí)現(xiàn)的細(xì)節(jié),這樣有利于程序的模塊化,減少被其他代碼干擾的機(jī)會(huì)。繼承性。一個(gè)對(duì)象能夠從它的祖先那里獲取已有的成員和行為。被繼承的類(lèi)稱(chēng)為基類(lèi),繼承下來(lái)的類(lèi)稱(chēng)為派生類(lèi),基類(lèi)的成員自動(dòng)成為派生類(lèi)的成員。類(lèi)的繼承具有傳遞性。注意:ObjectPascal不支持多繼承。多態(tài)性。多態(tài)性意味著某種動(dòng)作可以由特定的方式來(lái)表現(xiàn),具體方式取決于執(zhí)行該對(duì)象的動(dòng)作。面向?qū)ο蠡A(chǔ)----類(lèi)的特征封裝性:在ObjectPascal中,通過(guò)保留字Private、Protected、Public、Published、Automated來(lái)實(shí)現(xiàn)類(lèi)的封裝,通常稱(chēng)為存取控制符。Private
:私有成員不能被類(lèi)以外的程序訪問(wèn)。Protected:Protected與Private相似,所不同的是保護(hù)成員可以被該類(lèi)的所有派生類(lèi)訪問(wèn),并且成為派生類(lèi)的私有成員。Public:字段和方法公有,外部程序可以訪問(wèn)。Published:公共成員可以被外部程序訪問(wèn),與Public區(qū)別在于Published成員可以在設(shè)計(jì)期間和運(yùn)行期間可以訪問(wèn),而Public成員只能在運(yùn)行期間訪問(wèn)。Automated:Automated聲明的方法和屬性將生成OLE(對(duì)象鏈接與嵌入)自動(dòng)化操作的類(lèi)型信息。面向?qū)ο蠡A(chǔ)----類(lèi)的特征繼承性:typeTHuman=ClassprivateID:Interger;end;typeTStudent=Class(THuman);privateStudentID:Interger;end;Tstudent類(lèi)繼承了Thuman類(lèi),包含了字段ID,StudentID面向?qū)ο蠡A(chǔ)函數(shù)構(gòu)造和析構(gòu)函數(shù)類(lèi)函數(shù)虛函數(shù)抽象函數(shù)動(dòng)態(tài)函數(shù)覆蓋和重載消息函數(shù)面向?qū)ο蠡A(chǔ)----函數(shù)typePersonal=ClassName:String;Age:Interger;functionGetName:String;endfunctionPersonal.GetName:String;beginGetName:=Name;end;面向?qū)ο蠡A(chǔ)----函數(shù)構(gòu)造函數(shù):構(gòu)造函數(shù)是用來(lái)創(chuàng)建和初始化新對(duì)象的,通常使用構(gòu)造函數(shù)的參數(shù)進(jìn)行初始化。構(gòu)造函數(shù)使用保留字Constructor來(lái)定義。TypeTClass=ClassName:String;ConstructorCreate(s:String);end;ConstructorTClass.Create(s:String);beginName:=s;end;面向?qū)ο蠡A(chǔ)----函數(shù)析構(gòu)函數(shù):當(dāng)不需要一個(gè)對(duì)象時(shí),在類(lèi)的實(shí)例中調(diào)用類(lèi)的析構(gòu)函數(shù)來(lái)刪除它。析構(gòu)函數(shù)的關(guān)鍵字destructor。destructordestroy;destructordelete;面向?qū)ο蠡A(chǔ)----函數(shù)靜態(tài)函數(shù):編譯器可以確定函數(shù)的確切地址。在函數(shù)前添加class關(guān)鍵字。TMy=Class
ClassfunctionName(s:String):String;
end;靜態(tài)函數(shù)不能在private和protected區(qū);
靜態(tài)函數(shù)不能是虛方法;
靜態(tài)函數(shù)只能使用類(lèi)中的、在對(duì)象實(shí)例化以前的數(shù)據(jù);靜態(tài)函數(shù)可以直接使用;靜態(tài)函數(shù)不能覆蓋。
面向?qū)ο蠡A(chǔ)----函數(shù)虛擬函數(shù):使用保留字virtual將函數(shù)定義為虛擬的。編譯器通過(guò)建立虛擬方法表(VMT)來(lái)查找在運(yùn)行時(shí)的函數(shù)地址。TypeCMyClass=ClassfunctionMethod:String;virtual;end虛函數(shù)犧牲空間,提高效率。面向?qū)ο蠡A(chǔ)----函數(shù)動(dòng)態(tài)函數(shù):使用保留字dynamic,與虛擬函數(shù)語(yǔ)法相同,使用結(jié)果相同,但編譯器實(shí)現(xiàn)的機(jī)制不同。編譯器通過(guò)建立動(dòng)態(tài)方法表(DMT)來(lái)查找在運(yùn)行時(shí)的函數(shù)地址。TypeCMyClass=ClassfunctionMethod:String;dynamic;end動(dòng)態(tài)函數(shù)犧牲效率節(jié)省空間。面向?qū)ο蠡A(chǔ)----函數(shù)抽象函數(shù):用保留字abstract說(shuō)明。類(lèi)中有抽象函數(shù)時(shí)該類(lèi)成為抽象類(lèi)。抽象類(lèi)不能創(chuàng)建對(duì)象。當(dāng)繼承抽象類(lèi)時(shí),在派生類(lèi)中必須重新聲明和實(shí)現(xiàn)抽象函數(shù)。TypeCMyClass=ClassfunctionMethod:String;virtual;abstract;endvirtual或dynamic必須在abstract之前。面向?qū)ο蠡A(chǔ)----函數(shù)覆蓋:如果子類(lèi)重新定義父類(lèi)的函數(shù)即為覆蓋,用override關(guān)鍵字。被覆蓋的函數(shù)必須是虛擬函數(shù)或者是動(dòng)態(tài)函數(shù)。TypeCMyClass=ClassprocedureMethod;virtual;end;CMySubClass=Class(CMyClass)procedureMethod;override;end面向?qū)ο蠡A(chǔ)----函數(shù)重載:在同一個(gè)類(lèi)中,出現(xiàn)多個(gè)同名的方法的現(xiàn)象就是重載。有相同的方法名,不同的參數(shù)。用保留字overload關(guān)鍵字。Type
Ta=class
procedureMethod(a,b:Integer);overload;
procedureMethod(a,b:String);overload;
end
面向?qū)ο蠡A(chǔ)----函數(shù)Inherited關(guān)鍵字:在子類(lèi)中可以執(zhí)行父類(lèi)中同名的方法。TypeThuman=Class
procedure
showinfo;virtual;
end;
TStudent=Class(Thuman)
procedure
showinfo;override;
end;endprocedure
TStudent.showinfo
;
begin
inherited;
//調(diào)用父類(lèi)中的同名函數(shù)
end;
面向?qū)ο蠡A(chǔ)----屬性
屬性(Property):用Property
關(guān)鍵字被用來(lái)定義一個(gè)類(lèi)的屬性。Read是限定“只讀”Write是限定“只寫(xiě)”Stored是限定布爾表達(dá)式propertyField:StringreadGetFieldwriteSetField;其中定義了一個(gè)Field屬性,此屬性讀值是通過(guò)調(diào)用GetField來(lái)獲取并返回的,此屬性設(shè)置值是通過(guò)SetField來(lái)進(jìn)行的。此外,Read和Write關(guān)鍵字可以不必同時(shí)出現(xiàn)。常用類(lèi),常用函數(shù)字符處理數(shù)值與字符串轉(zhuǎn)換數(shù)值處理文件管理常用類(lèi),常用函數(shù)----字符串(Ansi)CompareStr、(Ansi)CompareText(Ansi)SameStr、(Ansi)SameText(Ansi)LowerCase/(Ansi)UpperCaseLength、SetLengthCopy、Delete、Insert、ConcatTrim、TrimLeft、TrimRightStringOfCharStringReplaceFormat常用類(lèi),常用函數(shù)----字符串(Ansi)SameStr、(Ansi)SameTextfunction(Ansi)SameStr(constS1,S2:string):Boolean;功能返回兩個(gè)字符串是否相等說(shuō)明區(qū)分大小寫(xiě)CheckBox1.Checked:=SameStr(Edit1.Text,Edit2.Text);(Ansi)SameText不區(qū)分大小寫(xiě)。
常用類(lèi),常用函數(shù)----字符串常用類(lèi),常用函數(shù)----字符串常用類(lèi),常用函數(shù)----字符串常用類(lèi),常用函數(shù)----字符串Trim(s:String):String;
功能說(shuō)明:刪除字符串空格
S:=Trim('Delphi');TrimLeft(s:String):String;
功能說(shuō)明:刪除字符串左邊空格
S:=TrimLeft('Delphi');TrimRight(s:String):String;
功能說(shuō)明:刪除字符串右邊空格
S:=TrimRight('Delphi');
常用類(lèi),常用函數(shù)----字符串StringOfChar函數(shù):反復(fù)字符函數(shù)function
StringOfChar(c:Char;Length:Integer):
string例子:vars:string;s:=StringOfChar('G',5);//s='GGGGG';StringReplace函數(shù):替換字符函數(shù)functionStringReplace(constS,OldPattern,NewPattern:string;Flags:TReplaceFlags):string;VaraStr:String;
begin
aStr:='Thisisabook,notapen!';
ShowMessage(StringReplace(aStr,'a','two',[]));//Thisistwobook,notapen!只替換了第一個(gè)符合的字
常用類(lèi),常用函數(shù)----數(shù)值處理常用類(lèi),常用函數(shù)----數(shù)值處理常用類(lèi)數(shù)據(jù)結(jié)構(gòu)支持TListTStrings/TStringListTObjectListTInterfaceList數(shù)據(jù)結(jié)構(gòu)類(lèi)TList指針列表,可以存儲(chǔ)任意類(lèi)的對(duì)象Capacityvs.CountAdd/Insert/Delete/Remove/ClearSort TInterfaceList接口列表,用于存儲(chǔ)接口TInterfaceList=class(TInterfacedObject,IInterfaceList)數(shù)據(jù)結(jié)構(gòu)類(lèi)TStrings/TStringList字符串列表TStrings是抽象類(lèi)Text/CommaText(自動(dòng)分割逗號(hào))/DelimitedText(Delimited,QuoteChar屬性)Strings/ObjectsLoadFromFile/SaveToFileNames/Values(Names只讀,Valus可寫(xiě))數(shù)據(jù)結(jié)構(gòu)類(lèi)TObjectList對(duì)象列表,可以存儲(chǔ)任意類(lèi)的對(duì)象OwnsObjects(銷(xiāo)毀刪除的類(lèi),Delete,Remove無(wú)需再添加銷(xiāo)毀)TQueue/TStackPop/Push第三章VCL和常用控件3.1可視化組件庫(kù)VCL3.2窗體設(shè)計(jì)3.3常用組件3.4其他組件3.5輸入與輸出
3.1VCL基礎(chǔ)
Delphi提供了豐富的組件(component,也稱(chēng)為構(gòu)件)。這些組件都是由TComponent類(lèi)派生而來(lái),封裝在可視化組件庫(kù)(VCL)中。這里所說(shuō)的可視化是指在窗體設(shè)計(jì)時(shí)所有組件的可視性。組件依據(jù)程序運(yùn)行時(shí)是否可見(jiàn)而分為可視組件和非可視組件,可視組件如標(biāo)簽(Label)、編輯框(Edit)、按鈕(Button)等;非可視組件,如計(jì)時(shí)器(Timer)、圖像列表(ImageList)等。通常,使用可視組件來(lái)設(shè)計(jì)用戶(hù)界面,用非可視組件來(lái)實(shí)現(xiàn)特殊的功能。
一、VCL的層次結(jié)構(gòu)TObject(所有Delphi類(lèi)的祖先)│TPersistent(持久性對(duì)象)│TComponent(組件對(duì)象)┌─────┴─────────┐非可視組件TControl(所有可視組件的祖先)┌───────┴─────┐TGraphicControl(圖形類(lèi)對(duì)象)TWinControl等(窗口控件)
二、VCL組件的屬性、方法和事件
VCL組件的屬性
VCL組件的方法
VCL組件的事件
3.2窗體設(shè)計(jì)
窗體是程序界面的框架,菜單和組件置于其上。窗體是一種對(duì)象,類(lèi)名是TForm。窗體對(duì)象有屬性、方法和事件。可以只設(shè)計(jì)一個(gè)窗體的界面,也可以設(shè)計(jì)多個(gè)窗體的界面,甚至可以是多文檔窗體。
窗體常見(jiàn)事件
窗體事件是窗體可以識(shí)別的外部動(dòng)作,事件可以由用戶(hù)操作觸發(fā),也可以由操作系統(tǒng)、其他應(yīng)用程序、應(yīng)用程序本身觸發(fā),例如程序運(yùn)行時(shí)用戶(hù)單擊一下窗體將觸發(fā)窗體的OnClick事件。在程序源代碼中添加窗體的事件,可以打開(kāi)對(duì)象監(jiān)視器窗口的Events選項(xiàng)頁(yè)。從對(duì)象列表中選擇窗體對(duì)象,然后雙擊事件名右邊的空白區(qū)域,添加窗口事件程序代碼。
窗體常見(jiàn)事件(1)OnCreate:窗體創(chuàng)建時(shí)觸發(fā)。該事件中通??蓪?shí)現(xiàn)程序的初始化工作。(2)OnDestroy:窗體從內(nèi)存中刪除時(shí)觸發(fā)。該事件通常可以加入資源釋放的程序代碼。(3)OnShow:窗體顯示時(shí)觸發(fā)。當(dāng)窗體的Visible屬性為T(mén)rue時(shí)窗體被顯示。(4)OnHide:窗體隱藏時(shí)觸發(fā)。當(dāng)窗體的Visible屬性為False時(shí),窗體被隱藏。(5)OnClose和OnCloseQuery:當(dāng)關(guān)閉窗體時(shí),先觸發(fā)OnCloseQuery事件,處理程序當(dāng)前的狀態(tài),然后觸發(fā)OnClose事件,關(guān)閉窗口。(6)OnClick:?jiǎn)螕粢幌麓绑w將觸發(fā)該事件。(7)OnDblClick:?jiǎn)螕舸绑w將觸發(fā)該事件。(8)OnPaint:窗體重畫(huà)時(shí)將觸發(fā)該事件。三、多窗體設(shè)計(jì)1.靜態(tài)創(chuàng)建靜態(tài)創(chuàng)建窗體是在界面設(shè)計(jì)階段完成的。具體方法如下:執(zhí)行【File】→【New】→【Form】菜單項(xiàng),添加一個(gè)新的窗體,默認(rèn)名稱(chēng)是Form2。然后在主窗體Form1的Uses單元中加入新窗體的單元名,這樣在主窗體的事件中可以調(diào)用Form2。
2.動(dòng)態(tài)創(chuàng)建
動(dòng)態(tài)創(chuàng)建窗體是在程序運(yùn)行階段完成的。在程序代碼中調(diào)用窗體的Create方法。靜態(tài)創(chuàng)建的子窗體在程序剛運(yùn)行時(shí)就全部裝人內(nèi)存當(dāng)中,如果一個(gè)應(yīng)用程序的子窗體數(shù)目很多,將占用過(guò)多的內(nèi)存資源。動(dòng)態(tài)創(chuàng)建的子窗體,在程序剛運(yùn)行時(shí)并沒(méi)有裝入內(nèi)存中,當(dāng)使用到該子窗體時(shí)才裝入內(nèi)存,使用完后立即將其從內(nèi)存中釋放,以節(jié)省內(nèi)存資源。
(1)執(zhí)行【File】→【New】→【Form】菜單項(xiàng)命令一次,添加一個(gè)新的窗體,默認(rèn)名稱(chēng)是Form3[在已有的窗體對(duì)象名FormN(N=1,2,...)中把N值加1]。然后在主窗體Form1的uses單元中加入新窗體的單元名,這樣在主窗體的事件中可以調(diào)用Form3。(2)執(zhí)行【Project】→【Options】菜單項(xiàng),打開(kāi)“ProjectOptions”(工程選項(xiàng))對(duì)話框。對(duì)話框的“Auto-createforms(自動(dòng)創(chuàng)建窗體)”框中列出了在程序運(yùn)行時(shí)加載到內(nèi)存中的窗體。選擇Form3,單擊中間向右的箭頭按鈕,將其移動(dòng)到“Availableforms(可用窗體)”框中。這樣程序運(yùn)行時(shí),F(xiàn)orm3窗體不會(huì)自動(dòng)加載到內(nèi)存。
(3)程序代碼中,要使用Form3窗體時(shí),添加如下代碼:Form3:=Tform3.Create(self);//創(chuàng)建子窗體Form3,將Form3加載入內(nèi)存Form3.Show;//顯示窗體Form3(4)要從內(nèi)存中釋放Form3窗體時(shí),添加如下代碼:Form3.Free;//將Form3從內(nèi)存中釋放掉四、MDI多文檔窗體
一個(gè)單文檔應(yīng)用程序只能打開(kāi)一個(gè)文檔,而一個(gè)多文檔(MDI)應(yīng)用程序可以同時(shí)打開(kāi)不同類(lèi)型的多個(gè)文檔。MDI應(yīng)用程序提供了一種方便的方式,使得用戶(hù)在同一工作區(qū)域內(nèi)可以對(duì)多個(gè)文檔進(jìn)行觀察和交換數(shù)據(jù)。MDI窗口部分由一個(gè)主窗口(也稱(chēng)為父窗口)和多個(gè)子窗口組成,每個(gè)文檔對(duì)應(yīng)一個(gè)子窗口。子窗口位于主窗口的工作區(qū)內(nèi),激活子窗口后主窗口的菜單自動(dòng)被當(dāng)前子窗口的菜單所代替。在主窗口的工作區(qū)內(nèi)可以對(duì)子窗口進(jìn)行層疊、平鋪、定位、最大化和最小化、改變大小等各種操作,若最大化子窗口,將占滿(mǎn)MDI主窗口的全部工作區(qū)。
執(zhí)行【File】→【New】→【Other】菜單項(xiàng),打開(kāi)NewItems(新建項(xiàng)目)對(duì)話框。這個(gè)對(duì)話框提供了多個(gè)向?qū)Ш湍0?,可以生成多種不同用途的應(yīng)用程序。選擇“Projects”選項(xiàng)頁(yè),單擊“MDIApplication”,然后單擊“OK”按鈕,生成一個(gè)多文檔應(yīng)用程序。系統(tǒng)自動(dòng)為應(yīng)用程序生成了三個(gè)窗體:主窗體(MainForm)、子窗體(MDIChild)、對(duì)話框(AboutBox)。
五、窗體中組件的操作
1.組件的添加2.選定組件3.改變組件的大小
4.對(duì)齊組件5.移動(dòng)和刪除組件6.組件的復(fù)制與粘貼
7.組件的Tab鍵次序設(shè)定
3.3常用組件一、Standard頁(yè)上的常用組件
1.Label標(biāo)簽組件標(biāo)簽組件用于在窗體上顯示文字,通常用它為其他組件加上一些標(biāo)注和說(shuō)明文字,以便讓使用者了解那些組件的用途。特別是有些組件本身沒(méi)有Caption屬性,添加一個(gè)標(biāo)簽組件作為提示文字就很有必要。可將標(biāo)簽組件的焦點(diǎn)轉(zhuǎn)移給Form上的另一個(gè)對(duì)象,方法是設(shè)置標(biāo)簽組件的FocusControl屬性。在值段中,選用與它關(guān)聯(lián)對(duì)象的對(duì)象名。然后在標(biāo)簽中設(shè)置熱鍵,即在Caption屬性值段中輸入含有“&”的字串,緊接“&”之后的字母稱(chēng)為熱鍵字母,當(dāng)用戶(hù)使用“Alt+熱鍵字母”時(shí),將焦點(diǎn)選中它所指向的對(duì)象。
2.Edit編輯框組件
編輯框組件常用于文本輸入輸出,不僅可以顯示用戶(hù)的字符串文本,還允許用戶(hù)輸入和編輯文本。在人機(jī)交互界面中,使用Edit對(duì)象最主要的目的就是接收用戶(hù)信息,通常用Edit對(duì)象輸入數(shù)據(jù),如輸入用戶(hù)姓名、通信地址等。編輯框組件的常用事件
:①OnChange:當(dāng)編輯框組件中的文本發(fā)生改變時(shí)觸發(fā)此事件。②OnKeyPress:當(dāng)編輯框接收到鍵盤(pán)字符時(shí)觸發(fā)。
3.Memo多行編輯框組件
多行編輯框組件Memo與Edit組件很相像,都是提供給用戶(hù)在程序中輸入數(shù)據(jù)或顯示文字用的對(duì)象。與編輯框組件不同的是,多行編輯框組件可以顯示和編輯多行文本,而編輯框組件只能顯示和編輯一行文本。多行編輯框組件的屬性和方法與編輯框組件有很多相同之處,如Text、MaxLength、ReadOnly等屬性。
4.Button基本按鈕組件
按鈕是人機(jī)交互界面最常見(jiàn)的一個(gè)組件,通常用于用戶(hù)選取執(zhí)行某項(xiàng)命令。Delphi提供的按鈕有基本按鈕、位圖按鈕、復(fù)選框、單選按鈕、加速按鈕等?;景粹oButton是最簡(jiǎn)單的一種按鈕。5.Panel面板組件
Panel組件內(nèi),起分組作用。另外,Panel組件提供了優(yōu)化視覺(jué)效果的屬性,因此Panel組件也常作為某些組件的背景,使程序界面更協(xié)調(diào)、優(yōu)美。面板組件Panel還常用于制作信息欄或狀態(tài)欄。
6.CheckBox復(fù)選框組件
復(fù)選框有一小方框,旁邊帶有文本說(shuō)明,一般具有選中和未選中兩種狀態(tài),鼠標(biāo)單擊復(fù)選框可以在這兩種狀態(tài)之間切換。選中復(fù)選框時(shí),小方框內(nèi)有√標(biāo)記。
復(fù)選框組件通常由多個(gè)復(fù)選框組件形成一組,在這一組中用戶(hù)可同時(shí)選中多個(gè)組件,選項(xiàng)彼此之間是不具有“互斥性”的,不會(huì)影響其他選項(xiàng)的行為,適用于要進(jìn)行多項(xiàng)選擇的情況。組件可以識(shí)別OnClick事件。
7.單選按鈕組件
單選按鈕是旁邊帶有文本說(shuō)明的小圓圈,具有選中和未選中兩種狀態(tài)。組件的Checked屬性值為T(mén)rue時(shí),組件處于選中狀態(tài),小圓圈的內(nèi)部有黑色的小點(diǎn);為False時(shí),組件處于未選中狀態(tài),小圓圈是空心的。在一組單選按鈕中,只允許一個(gè)單選按鈕處于選中狀態(tài),也就是說(shuō),在同一群組中的選項(xiàng)彼此之間是具有“互斥性”。單選按鈕適用于在多個(gè)選項(xiàng)中選擇一項(xiàng)的情況。8.ListBox列表框組件
列表框中可以顯示出所有可能的數(shù)據(jù)供用戶(hù)選擇,用戶(hù)可以選擇其中的一項(xiàng)或多項(xiàng),因此用戶(hù)輸入數(shù)據(jù)可以不必使用鍵盤(pán)。列表框組件常用于選項(xiàng)較多的情況。9.ComboBox組合框組件
組合框組把Edit編輯框和ListBox列表框兩者功能合二為一,用戶(hù)可以直接輸入內(nèi)容,也可以單擊向下的箭頭后拉出一個(gè)列表框,從中選擇某個(gè)列表項(xiàng)。在組合框中選項(xiàng)數(shù)據(jù)的新增、刪除、移動(dòng)、選取等等,也是利用Items對(duì)象的Add、Delete、Clear、Insert、Exchange、Move等方法完成。
10.ActionList行為列表組件應(yīng)用程序通常要完成多項(xiàng)指定的任務(wù),Delphi中可以把某項(xiàng)任務(wù)指定為一個(gè)“行為”。一個(gè)應(yīng)用程序的所有的“行為”常常用ActionList行為列表組件進(jìn)行管理。設(shè)置ActionList的Images屬性,就能為ActionList指定一個(gè)圖像列表(ImageList)對(duì)象。
利用“行為”列表編輯器可以添加、刪除、修改“行為”。每個(gè)“行為”都是一個(gè)對(duì)象,雙擊某個(gè)“行為”可在該“行為”的OnExecute事件中編寫(xiě)相應(yīng)的執(zhí)行程序代碼。11.MainMenu主菜單組件
菜單可分為兩類(lèi):主菜單和彈出式菜單。主菜單又稱(chēng)下拉菜單,由MainMenu組件實(shí)現(xiàn);彈出式菜單由PopupMenu組件實(shí)現(xiàn)。
MainMenu主菜單組件有兩個(gè)常用屬性:Items(添加菜單項(xiàng))及Images(指定圖形組件用于建立圖形菜單)。
Delphi中使用MainMenu組件創(chuàng)建主菜單的步驟如下:(1)生成主菜單將MainMenu組件放入應(yīng)用程序的某一窗體中,就在該窗體對(duì)象上建立了主菜單對(duì)象,默認(rèn)的名稱(chēng)是MainMenu1。該窗體的Menu屬性值也自動(dòng)設(shè)置為MainMenu1。(2)使用菜單編輯器添加菜單項(xiàng)直接雙擊窗體上的主菜單對(duì)象打開(kāi)菜單編輯器。進(jìn)人菜單編輯器后,單擊空菜單項(xiàng)。每一個(gè)菜單項(xiàng)都是一個(gè)MenuItem對(duì)象,都有自己的屬性和方法。(3)指定菜單加速鍵和熱鍵鼠標(biāo)可以操作菜單,還應(yīng)該允許鍵盤(pán)操作菜單。輸入菜單項(xiàng)的Caption屬性時(shí),若輸入“&+字母”,“&”符號(hào)后邊的那個(gè)字母稱(chēng)為加速字母,運(yùn)行時(shí)加速字母顯示成下劃線字母,按Alt+加速字母鍵就執(zhí)行此菜單項(xiàng)。加速鍵必須在上層菜單項(xiàng)被激活后才能使用。設(shè)置菜單項(xiàng)的ShortCut屬性:從其下拉列表中選擇一熱鍵組合,程序運(yùn)行時(shí)使用這一熱鍵組合可以直接執(zhí)行菜單項(xiàng)。(4)編寫(xiě)菜單項(xiàng)事件代碼雙擊菜單項(xiàng),進(jìn)人該菜單項(xiàng)的OnClick事件程序代碼中,添加相應(yīng)的代碼,實(shí)現(xiàn)菜單的功能。如果應(yīng)用程序窗體上有ActionList行為列表組件,可以設(shè)置菜單項(xiàng)的Action屬性。為菜單項(xiàng)指定行為,同樣也能實(shí)現(xiàn)菜單的功能。
要在菜單中加入一個(gè)分隔條,可設(shè)置菜單項(xiàng)的Caption屬性為“-”。要在某個(gè)菜單項(xiàng)的前面插入一個(gè)新的菜單項(xiàng),可先選擇此菜單項(xiàng),然后按Insert鍵。刪除菜單項(xiàng),可先選擇要?jiǎng)h除的菜單項(xiàng),按Delete鍵。用鼠標(biāo)拖動(dòng)菜單項(xiàng)可以調(diào)整菜單項(xiàng)的位置。另外,Delphi系統(tǒng)提供菜單模板,右擊菜單項(xiàng),從快捷菜單中選擇從模板插入(InsertFromTemplate)可以將菜單模板加入到菜單項(xiàng)。12.PopupMenu彈出式菜單組件
PopupMenu組件用來(lái)制作彈出式菜單,即在窗口的某個(gè)位置右擊鼠標(biāo),便會(huì)在該位置上出現(xiàn)一個(gè)菜單——彈出式菜單。
一個(gè)窗體中,彈出式菜單可以有多個(gè),使用時(shí)在某個(gè)組件(如Panel)的PopupMenu屬性指定彈出式菜單的名稱(chēng),運(yùn)行時(shí)右擊這個(gè)組件,就可以打開(kāi)設(shè)定的彈出式菜單。不同的組件可指定不同的彈出式菜單,也可指定同一個(gè)彈出式菜單。
彈出式菜單制作過(guò)程與主菜單基本相同,所不同的是可以設(shè)置彈出式菜單的位置。PopupMenu的屬性Alignment用于設(shè)置彈出式菜單的位置,其取值說(shuō)明如下:paCenter:菜單彈出時(shí)頂部中點(diǎn)位于鼠標(biāo)右擊點(diǎn)上paLeft:菜單彈出時(shí)左上角位于鼠標(biāo)右擊點(diǎn)上paRight:菜單彈出時(shí)右上角點(diǎn)位于鼠標(biāo)右擊點(diǎn)上二.Additional頁(yè)上的常用組件
1.BitBtn位圖按鈕組件位圖按鈕與基本按鈕的作用相同?;景粹o上只能顯示文字,而位圖按鈕上不僅可以顯示文字,還可以顯示位圖,使界面更加美觀。
2.SpeedButton加速按鈕組件
加速按鈕上也可以顯示圖形和文字,用法與位圖按鈕非常相似。其他的按鈕如普通按鈕、位圖按鈕在按下后立即彈起,而加速按鈕可以在按下后仍保持按下的狀態(tài)。通常多個(gè)加速按鈕形成一組,在這一組中只能有一個(gè)按鈕處于按下?tīng)顟B(tài)。因此,加速按鈕多用于生成工具欄按鈕。
三、Win32頁(yè)上的常用組件
1.ImageList圖形列表組件
ImageLlist組件用于管理一組(icons)圖標(biāo)或(bitmaps)位圖。同一個(gè)ImageList組件中的圖形大小相同,默認(rèn)大小為16╳16像素,因此這些圖形適合于作圖標(biāo)。如果ImageList組件中有n個(gè)圖形,則每個(gè)圖形都編一個(gè)號(hào),編號(hào)從0到n-1,通過(guò)編號(hào)可以訪問(wèn)對(duì)應(yīng)的圖形。
2.ToolBar工具欄組件
工具欄把常用的菜單項(xiàng)對(duì)應(yīng)成按鈕,并把多個(gè)按鈕以列表的形式排列成行,用戶(hù)單擊工具欄某個(gè)按鈕就執(zhí)行該菜單項(xiàng)的功能,不要到菜單中去找相應(yīng)的菜單項(xiàng)。工具欄中可以添加按鈕(Button)、圖形按鈕(BitBtn)、加速按鈕(SpeedButton)、組合框(ComboBox)、編輯框(Edit)等。工具欄可以放在標(biāo)題欄或菜單的下面,也可以放在窗口工作區(qū)的下面或左邊。
3.ProgressBar進(jìn)度條組件
進(jìn)度條組件用來(lái)指示一項(xiàng)任務(wù)的執(zhí)行進(jìn)度,隨著任務(wù)的進(jìn)行,在進(jìn)度條的矩形區(qū)域內(nèi)從左向右填充上小方塊,當(dāng)方塊充滿(mǎn)整個(gè)矩形區(qū)域時(shí),表示任務(wù)的完成。
4.StatusBar狀態(tài)欄組件
狀態(tài)欄一般位于窗體的底部,用于顯示當(dāng)前狀態(tài)信息。
狀態(tài)欄組件初始是個(gè)空白的狀態(tài)欄,常常要在狀態(tài)欄上添加多個(gè)狀態(tài)面
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 指紋鎖招標(biāo)文件交換解讀3篇
- 教育機(jī)構(gòu)認(rèn)證合同3篇
- 文明市民停車(chē)文明的不亂停3篇
- 安徽餐飲業(yè)勞動(dòng)合同模板3篇
- 推廣用品選購(gòu)合同3篇
- 出行業(yè)合同管理策略
- 醫(yī)療科研合作合同準(zhǔn)則
- 制造業(yè)合同存檔查閱指南
- 城市公園給水設(shè)施建設(shè)工程合同
- 建材生產(chǎn)鋼板租賃協(xié)議
- TRIZ-2003矛盾矩陣表(重新整理)
- 安全生產(chǎn)規(guī)章制度和崗位操作規(guī)程的目錄清單及內(nèi)容(無(wú)倉(cāng)儲(chǔ)經(jīng)營(yíng)單位)
- 大樹(shù)的故事 單元作業(yè)設(shè)計(jì)
- 2023-2024學(xué)年涼山彝族自治州六年級(jí)數(shù)學(xué)第一學(xué)期期末質(zhì)量跟蹤監(jiān)視試題含答案
- 3~6歲兒童學(xué)習(xí)與發(fā)展指南(表格形式)
- 2023~2023年壓縮空氣系統(tǒng)質(zhì)量回顧
- 新版三體系管理手冊(cè)(過(guò)程方法)
- 學(xué)校巡課查課記錄總結(jié)(13篇)
- 2023年高考地理浙江卷試題及答案
- 污水處理廠電氣工程通用技術(shù)要求
- 達(dá)克效應(yīng):需要警惕的48種錯(cuò)誤思維
評(píng)論
0/150
提交評(píng)論