Delphi開發(fā)基礎(chǔ)知識講解_第1頁
Delphi開發(fā)基礎(chǔ)知識講解_第2頁
Delphi開發(fā)基礎(chǔ)知識講解_第3頁
Delphi開發(fā)基礎(chǔ)知識講解_第4頁
Delphi開發(fā)基礎(chǔ)知識講解_第5頁
已閱讀5頁,還剩157頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

TOT培訓(xùn)課程2014年3月7

日Delphi編程(IDE)與工具Delphi開發(fā)工具介紹Delphi簡介

1、Delphi:特爾斐--古希臘城市,是世界聞名的著名古跡,

古希臘人認為:特爾斐是地球的中心,是“地球的肚臍”。2、Delphi,是Windows平臺下著名的快速應(yīng)用程序開發(fā)工具 (RapidApplicationDevelopment,簡稱RAD)。Delphi發(fā)展史

1、Hejlsberg丹麥為MS-DOS和CP/M設(shè)計了一個Pascal編譯器。

2、美國Borland(寶蘭)公司于1995年開發(fā)TurboPascal。3、20049.0正式名稱:Delphi2005。

4、20088.25Embarcadero發(fā)布CodeGearDelphi2009Pre-release。

5、2010.8.30Embarcadero發(fā)布DelphiXE。課程模塊目標經(jīng)過本課程模塊的培訓(xùn),學(xué)員能夠熟悉Delphi集成開發(fā)環(huán)境掌握IDE相關(guān)設(shè)置使用Delphi編寫和調(diào)試應(yīng)用程序不可能一下完全掌握所有內(nèi)容,需要在以后工作中提高自己的應(yīng)用能力單元1:DELPHIIDE環(huán)境單元目標本單元結(jié)束后,你將能夠熟悉Delphi各界面功能掌握IDE界面的相關(guān)設(shè)置結(jié)合實際應(yīng)用的需要對IDE進行個性化定制1.1什么是IDE(Integrated

Development

Environment)

IDE就是“集成開發(fā)環(huán)境”IDE的歷史Borland的Turbo系列開先河集成開發(fā)環(huán)境高效代碼編寫支撐環(huán)境對RAD的支撐集成軟件工程思想,開發(fā)平臺sun、microsoft、ibm、borland等等的ide都有…1.2DELPHIIDE界面的熟悉使用新軟的路子(認識人的過程)望:遍歷所有的菜單、界面聞:具體功能在IDE上的體現(xiàn)、掛接問:實在不知到的,看幫助切:自己動手,搗鼓搗鼓動手(編碼)實踐很重要…1.3IDE常用快捷鍵IDE常用快捷鍵代碼瀏覽:ctrl+mouse、ctrl+enter定義、實現(xiàn)切換:ctrl+shift+上下鍵視圖切換:F12運行、調(diào)試的快捷鍵:F9、F8(單步)、F7(跟蹤)…據(jù)說大蝦們都是只用鍵盤…1.3IDE常用快捷鍵IDE常用快捷鍵類自動生成:ctrl+shift+c單元引用快捷鍵:alt+shift+u代碼即時提示(輸入法沖突問題):ctrl+space快速移動光標,刪除行,注釋行其他:如TodoList、自動生成GUID、項目管理器等等

TodoList:任務(wù)列表GUID:

一種由算法生成的二進制長度為128位的數(shù)字標識符。

1.4

IDE編輯器設(shè)置一些常用的編輯器設(shè)置使用DeskTop:存儲用戶對IDE的個性設(shè)置;支持后悔:Undoaftersave個性化的:ColorKeyMapping:熱鍵1.5

IDE環(huán)境設(shè)置需要重點關(guān)注LibraryBPL(BorlandPackageLibraries)(dll)DCP(DelphiCompiledPackage)1.6項目的屬性設(shè)置每個項目有自己的相關(guān)配置生成文件的輸出路徑(dcu/bpl/dcp/exe/…)項目的條件編譯帶包編譯編譯器優(yōu)化、調(diào)試(如輸出調(diào)試信息,供AQTime等使用)版本信息(特別是build號),發(fā)版的識別注意:這些屬性保存在當前工程項目文件中相關(guān)文件中(配置文件)1.7小結(jié)個性化自己的IDE界面軟件是用出來的!Gogogo…提示:想快速啟動Delphi?使用/ns、/np等…1.8親自動手初步搞定自己的IDE設(shè)置進入delphi

IDE的主界面:(望)1.8親自動手點擊“NewProject”界面:(聞)1.8親自動手點擊“Help”界面:(問)1.8親自動手點擊“OpenProject”界面:(切)單元2:DELPHI開發(fā)環(huán)境單元目標本單元結(jié)束后,你將能夠掌握IDE控件的安裝了解IDE常用插件/專家的使用根據(jù)個人需要配置IDE的控件、插件/專家2.1控件安裝IDE內(nèi)在的機制,支持更加豐富的RAD開發(fā)第三方控件toolbar2000+tbx/…Toolbar2000是一套給BorlandDelphi及C++Builder專用的編程組件,可以用來仿制Office2000的菜單及工具條,支持Delphi4.0-7.0版及C++Builder4.0-6.0版。

TBX

基于

ISO

術(shù)語數(shù)據(jù)表示的

XML

標準,采用

TBX

,用戶可以很方便的在不同格式的術(shù)語庫之間交換術(shù)語庫數(shù)據(jù)。公司相關(guān)控件GrandResource/GSP/GRP/…2.1控件安裝DELPHI通過注冊表保存相關(guān)的設(shè)置(regedit)第一次安裝并成功運行后,備份:HKEY_LOCAL_MACHINE\SOFTWARE\BorlandHKEY_CURRENT_USER\Software\Borland注冊表幾個關(guān)鍵鍵控件包、專家包老生常談:注冊表操作要非常小心2.2按需加載控件為什么要按需加載控件八輩子用不著的控件降低IDE內(nèi)存的占用提高IDE的穩(wěn)定性如何要按需加載控件了解你的需求Component->InstallPackages直接注冊表2.2按需加載控件小提示:不常用的控件ActionBar:動作條ControlPanel:控制面板BDE、InterBase、DBX、SQLExplorerUIDataSnap、WebSnapTeeChart等等如何保存我們個性化的設(shè)置?快速設(shè)置?2.3IDE的插件/專家插件/專家:IDE的擴展(eclipse、vs等)快速查找/編寫/理解代碼功能性支撐(如重構(gòu):項目重構(gòu)&代碼重構(gòu))其他功能的擴展2.3IDE的插件/專家Gexpert(DelphiIDE輔助免費工具)開源、OTA范例(OpenToolsAPI)ModelMakerCodeExplorer吐血推薦的refactor工具重構(gòu):Delphi程序員的日常工作,MMX可以大大提高效率/code-explorer/download.html公欲善其事,必先利其器2.3IDE的插件/專家GExpertsModelMakerCodeExplorer(MMX)2.3.1GExpertsGExpertsisafreesetoftoolsbuilttoincreasetheproductivityofDelphiandC++BuilderprogrammersbyaddingseveralfeaturestotheIDE.2.3.1GExperts查找類搜索、替換編輯菜單添加注釋空間批量替換文本排序清除目錄查看PE結(jié)構(gòu)……2.3.2MMX取代IDE原有的CodeExplorer代碼瀏覽器類、方法、屬性編輯器代碼重構(gòu)實時的文檔提示……2.3.3其他CnWizards開源,功能齊全Castalia調(diào)試利器(只要是通過發(fā)消息,記錄狀態(tài)等)2.5親自動手安裝OutLook控件單元3:DELPHI應(yīng)用程序框架單元目標理解DELPHI應(yīng)用程序框架掌握DELPHI開發(fā)的一般步驟使用DELPHI進行應(yīng)用程序的編寫學(xué)會簡單的調(diào)試新建一個單文檔應(yīng)用程序3.1第一個應(yīng)用程序運行如下3.1第一個應(yīng)用程序3.1第一個應(yīng)用程序文件類型dpr:項目文件dfm:窗體文件dps:單元文件dcu:中間文件res:資源文件cfg:配置文件……這么多的項目文件,都需要么?drc、dsk、map不需要掌握3.1第一個應(yīng)用程序IDE多項目管理功能項目添加設(shè)置啟動項目3.1第一個應(yīng)用程序IDE多項目管理功能依賴關(guān)系管理3.1第一個應(yīng)用程序建議:良好的文件結(jié)構(gòu)獨立一個目錄: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)通過VCL框架封裝傳統(tǒng)的Win32消息派發(fā)機制Application的秘密(不可見窗體)3.3應(yīng)用程序框架初步Application的一些重要屬性/方法CreateFormExeName獲取當前執(zhí)行程序的名字ProcessMessagesVCL偷偷摸摸的在后臺都干了什么?源碼的幸福:ctrl+mouse通過debug追蹤3.4應(yīng)用程序調(diào)試方法斷點增加刪除斷點條件斷點運行到光標位置跟蹤:F7單步:F8、shift+F8WatchListCallStack謝謝前言大而全會用,知道,不深究基礎(chǔ)語法----注釋花括號注解圓括號/星號注解C++風(fēng)格的雙斜杠注解{Copyright(c)1994-2004GrandSoftCorporation

}(*Privatedeclarations*)//Admin帳號

基礎(chǔ)語法----變量先聲明,后使用大小寫不敏感可以對全局變量賦初值例如:varValue:Integer=10;Correct:Boolean=True;這種初始化方法只能用于全程變量,不能用于過程或方法的變量。

基礎(chǔ)語法----常量定義常量不用指定類型,但也允許指定

聲明常量不必特定數(shù)據(jù)類型,但需要賦一個初值。編譯器會根據(jù)所賦初值自動選用合適的數(shù)據(jù)類型。不指定類型constThousand=1000;Pi=3.14;指定類型constThousand:Integer=1000;基礎(chǔ)語法----運算符

賦值運算符比較運算符邏輯表達式算術(shù)運算符按位運算符加減運算過程:==><<>>=<=andornot+-*/divmodandornotxorshlshrInc()dec()加減運算過程inc自增函數(shù)1.inc(i,n);//i,n:integer;n為自增量相當于i:=i+n;2.inc(i);//i:integer;相當于i:=i+1;-----------------------------------------------dec自減函數(shù)1.dec(i,n);//i,n:integer;n為自減量相當于i:=i-n;2.dec(i);//i:integer;相當于i:=i-1;

基礎(chǔ)語法----數(shù)據(jù)類型Delphi中的基本數(shù)據(jù)類型包括整型、實型、字符型、布爾型、枚舉型和子界型字符基礎(chǔ)語法----數(shù)據(jù)類型整型類型

基礎(chǔ)語法----數(shù)據(jù)類型實型基礎(chǔ)語法----數(shù)據(jù)類型布爾型枚舉類型枚舉類型1.枚舉類型是一種自定義有序類型,在枚舉類型中,列出所有該類型可能取的值,而不是指定現(xiàn)有類型的范圍。例如:TypeColors=(Red,Yellow,Green,Blue);序列中的每個值都對應(yīng)一個序號,序號從0開始計數(shù)子界類型子界類型1.子界類型定義了某種類型的取值范圍;2.必須是一種有序類型;例子:typeNum=1..10;Varn:Num;如果定義一個子界變量,那么賦給該變量的值必須是子界范圍內(nèi)的值例如:n:=11;//error基礎(chǔ)語法----RecordrecordTPoint=recordX:integer;Y:integer;end通過.來訪問他的域我在C/C++中叫Struct基礎(chǔ)語法----數(shù)據(jù)類型變體類型(Variant類型)基礎(chǔ)語法----數(shù)組

靜態(tài)數(shù)組A:array[2..10]ofinteger數(shù)組下標不一定從0或1開始,遍歷數(shù)組元素時請使用Low()和High()定義多維數(shù)組,使用逗號隔開編譯期已確定其元素個數(shù)如下例:TypeMonthTemps=array[1..24]ofInteger //一維數(shù)組TypeMonthTemps=array[1..24,1..31]ofInteger //二維數(shù)組強烈建議使用Low和High操作數(shù)組,特別是在循環(huán)中,因為這樣能使代碼與數(shù)組范圍無關(guān),如果你改變數(shù)組下標的范圍聲明,Low和High代碼不會受影響;a:Array[1..24]ofInteger;

Low(a)//返回數(shù)組a的第一個元素的下標High(a)//返回數(shù)組a的最后一個元素的下標基礎(chǔ)語法----數(shù)組動態(tài)數(shù)組運行時動態(tài)分配元素個數(shù)A:arrayofintegerA2:arrayofarrayofInteger下標一般從0開始使用SetLength分配內(nèi)存.只有使用SetLength為動態(tài)數(shù)組分配內(nèi)存空間后才能使用動態(tài)數(shù)組生存期自管理,置為nil即回收使用Copy函數(shù)進行復(fù)制例如:

StrArr:arrayofString;SetLength(StrArr,6);基礎(chǔ)語法開放數(shù)組面向?qū)ο驪ascal有一個開放數(shù)組的概念允許向一個方法傳遞未指定大小的數(shù)組。function

Mean(Data:

array

of

Double):

Extended;

//Pascal調(diào)用

Result

:=

Mean([3.1,

4.4,

5.6]);

基礎(chǔ)語法----語句if語句格式:If…thenElse…End例子:Ifa=1thenShowMessage(‘1’)//注意沒有分號ElseShowMessage(‘2’);caseCase基本格式:基礎(chǔ)語法----語句舉例:Functionfun(i:Integer):Integer;BeginCaseIof1:ShowMessage(‘1’);2:ShowMessage(‘2’);ElseShowMessage(‘3’);endEnd;基礎(chǔ)語法----語句for循環(huán)while循環(huán)repeat循環(huán)基礎(chǔ)語法----語句for循環(huán)For<循環(huán)變量>:=<初值>{To|DownTo}<終值>Do循環(huán)體舉例:求1..100的和VarI,sum:Integer;Beginsum:=0;Fori:=1to100dosum:=sum+i;End;基礎(chǔ)語法----語句while循環(huán)While<條件>Do循環(huán)體基礎(chǔ)語法----語句repeat循環(huán)(相當與C++中的do…while語句)Repeat循環(huán)體Until<條件>基礎(chǔ)語法----語句Break()過程Continue()過程forin循環(huán)For變量in值stringExpr='HuangJacky';forcinstringExprdo

ShowMessage(C);With當代碼很復(fù)雜時,with語句很有用,可以省去一些臨時變量,但是這樣做會使代碼的可讀性比較差。基礎(chǔ)語法----過程與函數(shù)過程和函數(shù)每一個Objectpascal函數(shù)都有一個隱含的本地變量Result,它包含了函數(shù)的返回值給Result賦值后函數(shù)并不會結(jié)束

值參數(shù)引用參數(shù)常量參數(shù)傳值與傳址的區(qū)別const保護不希望被修改的參數(shù)不會被意外修改,而且對于字符串、記錄參數(shù)能產(chǎn)生更優(yōu)化的代碼聲明函數(shù)欲聲明一個過程或函數(shù),而且只給出它的名字和參數(shù),不列出其實現(xiàn)代碼,需要在句尾加forward關(guān)鍵字:procedureHello;forward;基礎(chǔ)語法缺省值參數(shù)缺省參數(shù)的使用規(guī)則包括:1.帶缺省值的參數(shù)必須放在參數(shù)表的最后面;2.缺省值必須是常量;functionMyFun(a:Integer;b:Integer=1; c:Integer=2):Integer;

begin

Result:=a+b+c;

end;基礎(chǔ)語法----作用域

全局—所有單元均可以訪問單元內(nèi)全局—在單元內(nèi)的所有函數(shù)、過程均可以訪問局部—函數(shù)內(nèi)部可以訪問老大,貢獻一些美女圖片吧?不給,氣死你!基礎(chǔ)語法----單元unit—單元名稱與文件名稱必須匹配interface—在interface與Implementation語句之間是能被其他單元所共享的信息。包括類型、常量、變量、過程、函數(shù)等implementation—包括過程、函數(shù)的實現(xiàn)代碼,同時也可以聲明不被其他單元共享的類型,常量,變量initialization—單元初始化代碼,在主程序之前運行,且只運行一次finalization—單元被釋放時執(zhí)行循環(huán)引用了!基礎(chǔ)語法方法的覆蓋通過覆蓋方法可以在不同的實現(xiàn)類中有不同的行為,即多態(tài)。Type

T1=class

procedureAB;Virtual;end;T2=class(T1)

procedureAB;end;基礎(chǔ)語法方法的重載概念:重載函數(shù)就是指函數(shù)名相同,參數(shù)的個數(shù)或參數(shù)的數(shù)據(jù)類型不同的函數(shù)functionsum(n1,n2:Integer):Integer;overload;

functionsum(n1,n2,n3:Integer):Integer;overload;

基礎(chǔ)語法重新引入方法名稱有時候,需要在派生類中增加一個方法,而這個方法的名稱與祖先類中的某個方法名稱相同。編譯時會發(fā)出警告,告訴你派生類的方法將隱藏父類的同名方法.要解決這個問題,可以在派生類中使用reintroduce指示符type

TSomeBase

=

class

procedure

Cooper;

end;

TSomeClass

=

class(TSomeBase)

procedure

Cooper;

reintroduce;

end;

基礎(chǔ)語法----RTTI運行期類型信息(RTTI)是一種語言特征,能使應(yīng)用程序在運行時得到關(guān)于對象的信息as和isObjectisclass如果Object是類class的一個實例,則返回true;否則返回false;Objectisclass返回值為Object的引用,類型為class類型.基礎(chǔ)語法----接口背景:為什么要有接口COM接口面向?qū)ο蟮脑O(shè)計(解決多繼承問題)基礎(chǔ)語法----接口Delphi接口機制介紹通用接口IUnknown有三個函數(shù)FunctionQueryInterface,_AddRef,_ReleaseQueryInterface函數(shù)返回控件是否支持接口_AddRef函數(shù)給接口指針加1_Release函數(shù)給接口指針減一,為0釋放IUnknownAddRef_ReleaseQueryInterface基礎(chǔ)語法----接口(1)接口中只有方法、屬性,沒有字段。所以接口中的屬性存取都必須通過方法。

(2)接口中的方法只有聲明,沒有實現(xiàn)。實現(xiàn)在類中完。

(3)接口中的方法沒有作用域。都是公開的,但是在類中則放到不同作用域。

(4)接口中的方法沒有修飾字。可以認為它們都是抽象。

(5)不能創(chuàng)建接口實例,要使用接口,必須在類中實現(xiàn),通過類調(diào)用接口的方法。

(6)在類中必須聲明和實現(xiàn)接口的所有方法。不像類繼承中可以選擇。

(7)接口中的方法在類中實現(xiàn)時,可以加virtual/dynamic、abstract修飾,從而在子類中可以實現(xiàn)覆蓋?;A(chǔ)語法----接口GUID:GUID是全局唯一標識符,是一個128位的整數(shù)!

一般用來在COM中唯一的標識一個接口.

同時由于GUID無法被任何語言支持表達,因為沒有一種語言能夠表達128位的數(shù)據(jù),所以O(shè)P中使用一個叫TGUID的記錄來代表GUID。TGUID格式:

{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

面向?qū)ο蠡A(chǔ)類(Class):面向?qū)ο笳Z言的基礎(chǔ)就是類,ObjectPascal的基礎(chǔ)也是類。從類和對象入手介紹ObjectPascal的面向?qū)ο筇匦?。類的定義:類是用戶創(chuàng)建的數(shù)據(jù)類型,包括狀態(tài)、表達式和一些操作。有3個組成部分,即字段、方法和屬性。字段是類的內(nèi)部數(shù)據(jù)變量,方法就是類中定義的函數(shù)和過程,屬性是類提供給外部使用的數(shù)據(jù)變量。面向?qū)ο蠡A(chǔ)對象的定義:對象就是類的實例。對象是實體,在程序運行時將為其內(nèi)部表達式開辟內(nèi)存。對象的創(chuàng)建對象的撤銷面向?qū)ο蠡A(chǔ)類的特征:封裝性。類把數(shù)據(jù)和方法封裝在一起,同時隱藏了實現(xiàn)的細節(jié),這樣有利于程序的模塊化,減少被其他代碼干擾的機會。繼承性。一個對象能夠從它的祖先那里獲取已有的成員和行為。被繼承的類稱為基類,繼承下來的類稱為派生類,基類的成員自動成為派生類的成員。類的繼承具有傳遞性。注意:ObjectPascal不支持多繼承。多態(tài)性。多態(tài)性意味著某種動作可以由特定的方式來表現(xiàn),具體方式取決于執(zhí)行該對象的動作。面向?qū)ο蠡A(chǔ)----類的特征封裝性:在ObjectPascal中,通過保留字Private、Protected、Public、Published、Automated來實現(xiàn)類的封裝,通常稱為存取控制符。Private

:私有成員不能被類以外的程序訪問。Protected:Protected與Private相似,所不同的是保護成員可以被該類的所有派生類訪問,并且成為派生類的私有成員。Public:字段和方法公有,外部程序可以訪問。Published:公共成員可以被外部程序訪問,與Public區(qū)別在于Published成員可以在設(shè)計期間和運行期間可以訪問,而Public成員只能在運行期間訪問。Automated:Automated聲明的方法和屬性將生成OLE(對象鏈接與嵌入)自動化操作的類型信息。面向?qū)ο蠡A(chǔ)----類的特征繼承性:typeTHuman=ClassprivateID:Interger;end;typeTStudent=Class(THuman);privateStudentID:Interger;end;Tstudent類繼承了Thuman類,包含了字段ID,StudentID面向?qū)ο蠡A(chǔ)函數(shù)構(gòu)造和析構(gòu)函數(shù)類函數(shù)虛函數(shù)抽象函數(shù)動態(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ù)是用來創(chuàng)建和初始化新對象的,通常使用構(gòu)造函數(shù)的參數(shù)進行初始化。構(gòu)造函數(shù)使用保留字Constructor來定義。TypeTClass=ClassName:String;ConstructorCreate(s:String);end;ConstructorTClass.Create(s:String);beginName:=s;end;面向?qū)ο蠡A(chǔ)----函數(shù)析構(gòu)函數(shù):當不需要一個對象時,在類的實例中調(diào)用類的析構(gòu)函數(shù)來刪除它。析構(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ù)只能使用類中的、在對象實例化以前的數(shù)據(jù);靜態(tài)函數(shù)可以直接使用;靜態(tài)函數(shù)不能覆蓋。

面向?qū)ο蠡A(chǔ)----函數(shù)虛擬函數(shù):使用保留字virtual將函數(shù)定義為虛擬的。編譯器通過建立虛擬方法表(VMT)來查找在運行時的函數(shù)地址。TypeCMyClass=ClassfunctionMethod:String;virtual;end虛函數(shù)犧牲空間,提高效率。面向?qū)ο蠡A(chǔ)----函數(shù)動態(tài)函數(shù):使用保留字dynamic,與虛擬函數(shù)語法相同,使用結(jié)果相同,但編譯器實現(xiàn)的機制不同。編譯器通過建立動態(tài)方法表(DMT)來查找在運行時的函數(shù)地址。TypeCMyClass=ClassfunctionMethod:String;dynamic;end動態(tài)函數(shù)犧牲效率節(jié)省空間。面向?qū)ο蠡A(chǔ)----函數(shù)抽象函數(shù):用保留字abstract說明。類中有抽象函數(shù)時該類成為抽象類。抽象類不能創(chuàng)建對象。當繼承抽象類時,在派生類中必須重新聲明和實現(xiàn)抽象函數(shù)。TypeCMyClass=ClassfunctionMethod:String;virtual;abstract;endvirtual或dynamic必須在abstract之前。面向?qū)ο蠡A(chǔ)----函數(shù)覆蓋:如果子類重新定義父類的函數(shù)即為覆蓋,用override關(guān)鍵字。被覆蓋的函數(shù)必須是虛擬函數(shù)或者是動態(tài)函數(shù)。TypeCMyClass=ClassprocedureMethod;virtual;end;CMySubClass=Class(CMyClass)procedureMethod;override;end面向?qū)ο蠡A(chǔ)----函數(shù)重載:在同一個類中,出現(xiàn)多個同名的方法的現(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)鍵字:在子類中可以執(zhí)行父類中同名的方法。TypeThuman=Class

procedure

showinfo;virtual;

end;

TStudent=Class(Thuman)

procedure

showinfo;override;

end;endprocedure

TStudent.showinfo

;

begin

inherited;

//調(diào)用父類中的同名函數(shù)

end;

面向?qū)ο蠡A(chǔ)----屬性

屬性(Property):用Property

關(guān)鍵字被用來定義一個類的屬性。Read是限定“只讀”Write是限定“只寫”Stored是限定布爾表達式propertyField:StringreadGetFieldwriteSetField;其中定義了一個Field屬性,此屬性讀值是通過調(diào)用GetField來獲取并返回的,此屬性設(shè)置值是通過SetField來進行的。此外,Read和Write關(guān)鍵字可以不必同時出現(xiàn)。常用類,常用函數(shù)字符處理數(shù)值與字符串轉(zhuǎn)換數(shù)值處理文件管理常用類,常用函數(shù)----字符串(Ansi)CompareStr、(Ansi)CompareText(Ansi)SameStr、(Ansi)SameText(Ansi)LowerCase/(Ansi)UpperCaseLength、SetLengthCopy、Delete、Insert、ConcatTrim、TrimLeft、TrimRightStringOfCharStringReplaceFormat常用類,常用函數(shù)----字符串(Ansi)SameStr、(Ansi)SameTextfunction(Ansi)SameStr(constS1,S2:string):Boolean;功能返回兩個字符串是否相等說明區(qū)分大小寫CheckBox1.Checked:=SameStr(Edit1.Text,Edit2.Text);(Ansi)SameText不區(qū)分大小寫。

常用類,常用函數(shù)----字符串常用類,常用函數(shù)----字符串常用類,常用函數(shù)----字符串常用類,常用函數(shù)----字符串Trim(s:String):String;

功能說明:刪除字符串空格

S:=Trim('Delphi');TrimLeft(s:String):String;

功能說明:刪除字符串左邊空格

S:=TrimLeft('Delphi');TrimRight(s:String):String;

功能說明:刪除字符串右邊空格

S:=TrimRight('Delphi');

常用類,常用函數(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!只替換了第一個符合的字

常用類,常用函數(shù)----數(shù)值處理常用類,常用函數(shù)----數(shù)值處理常用類數(shù)據(jù)結(jié)構(gòu)支持TListTStrings/TStringListTObjectListTInterfaceList數(shù)據(jù)結(jié)構(gòu)類TList指針列表,可以存儲任意類的對象Capacityvs.CountAdd/Insert/Delete/Remove/ClearSort TInterfaceList接口列表,用于存儲接口TInterfaceList=class(TInterfacedObject,IInterfaceList)數(shù)據(jù)結(jié)構(gòu)類TStrings/TStringList字符串列表TStrings是抽象類Text/CommaText(自動分割逗號)/DelimitedText(Delimited,QuoteChar屬性)Strings/ObjectsLoadFromFile/SaveToFileNames/Values(Names只讀,Valus可寫)數(shù)據(jù)結(jié)構(gòu)類TObjectList對象列表,可以存儲任意類的對象OwnsObjects(銷毀刪除的類,Delete,Remove無需再添加銷毀)TQueue/TStackPop/Push第三章VCL和常用控件3.1可視化組件庫VCL3.2窗體設(shè)計3.3常用組件3.4其他組件3.5輸入與輸出

3.1VCL基礎(chǔ)

Delphi提供了豐富的組件(component,也稱為構(gòu)件)。這些組件都是由TComponent類派生而來,封裝在可視化組件庫(VCL)中。這里所說的可視化是指在窗體設(shè)計時所有組件的可視性。組件依據(jù)程序運行時是否可見而分為可視組件和非可視組件,可視組件如標簽(Label)、編輯框(Edit)、按鈕(Button)等;非可視組件,如計時器(Timer)、圖像列表(ImageList)等。通常,使用可視組件來設(shè)計用戶界面,用非可視組件來實現(xiàn)特殊的功能。

一、VCL的層次結(jié)構(gòu)TObject(所有Delphi類的祖先)│TPersistent(持久性對象)│TComponent(組件對象)┌─────┴─────────┐非可視組件TControl(所有可視組件的祖先)┌───────┴─────┐TGraphicControl(圖形類對象)TWinControl等(窗口控件)

二、VCL組件的屬性、方法和事件

VCL組件的屬性

VCL組件的方法

VCL組件的事件

3.2窗體設(shè)計

窗體是程序界面的框架,菜單和組件置于其上。窗體是一種對象,類名是TForm。窗體對象有屬性、方法和事件??梢灾辉O(shè)計一個窗體的界面,也可以設(shè)計多個窗體的界面,甚至可以是多文檔窗體。

窗體常見事件

窗體事件是窗體可以識別的外部動作,事件可以由用戶操作觸發(fā),也可以由操作系統(tǒng)、其他應(yīng)用程序、應(yīng)用程序本身觸發(fā),例如程序運行時用戶單擊一下窗體將觸發(fā)窗體的OnClick事件。在程序源代碼中添加窗體的事件,可以打開對象監(jiān)視器窗口的Events選項頁。從對象列表中選擇窗體對象,然后雙擊事件名右邊的空白區(qū)域,添加窗口事件程序代碼。

窗體常見事件(1)OnCreate:窗體創(chuàng)建時觸發(fā)。該事件中通??蓪崿F(xiàn)程序的初始化工作。(2)OnDestroy:窗體從內(nèi)存中刪除時觸發(fā)。該事件通常可以加入資源釋放的程序代碼。(3)OnShow:窗體顯示時觸發(fā)。當窗體的Visible屬性為True時窗體被顯示。(4)OnHide:窗體隱藏時觸發(fā)。當窗體的Visible屬性為False時,窗體被隱藏。(5)OnClose和OnCloseQuery:當關(guān)閉窗體時,先觸發(fā)OnCloseQuery事件,處理程序當前的狀態(tài),然后觸發(fā)OnClose事件,關(guān)閉窗口。(6)OnClick:單擊一下窗體將觸發(fā)該事件。(7)OnDblClick:單擊窗體將觸發(fā)該事件。(8)OnPaint:窗體重畫時將觸發(fā)該事件。三、多窗體設(shè)計1.靜態(tài)創(chuàng)建靜態(tài)創(chuàng)建窗體是在界面設(shè)計階段完成的。具體方法如下:執(zhí)行【File】→【New】→【Form】菜單項,添加一個新的窗體,默認名稱是Form2。然后在主窗體Form1的Uses單元中加入新窗體的單元名,這樣在主窗體的事件中可以調(diào)用Form2。

2.動態(tài)創(chuàng)建

動態(tài)創(chuàng)建窗體是在程序運行階段完成的。在程序代碼中調(diào)用窗體的Create方法。靜態(tài)創(chuàng)建的子窗體在程序剛運行時就全部裝人內(nèi)存當中,如果一個應(yīng)用程序的子窗體數(shù)目很多,將占用過多的內(nèi)存資源。動態(tài)創(chuàng)建的子窗體,在程序剛運行時并沒有裝入內(nèi)存中,當使用到該子窗體時才裝入內(nèi)存,使用完后立即將其從內(nèi)存中釋放,以節(jié)省內(nèi)存資源。

(1)執(zhí)行【File】→【New】→【Form】菜單項命令一次,添加一個新的窗體,默認名稱是Form3[在已有的窗體對象名FormN(N=1,2,...)中把N值加1]。然后在主窗體Form1的uses單元中加入新窗體的單元名,這樣在主窗體的事件中可以調(diào)用Form3。(2)執(zhí)行【Project】→【Options】菜單項,打開“ProjectOptions”(工程選項)對話框。對話框的“Auto-createforms(自動創(chuàng)建窗體)”框中列出了在程序運行時加載到內(nèi)存中的窗體。選擇Form3,單擊中間向右的箭頭按鈕,將其移動到“Availableforms(可用窗體)”框中。這樣程序運行時,F(xiàn)orm3窗體不會自動加載到內(nèi)存。

(3)程序代碼中,要使用Form3窗體時,添加如下代碼:Form3:=Tform3.Create(self);//創(chuàng)建子窗體Form3,將Form3加載入內(nèi)存Form3.Show;//顯示窗體Form3(4)要從內(nèi)存中釋放Form3窗體時,添加如下代碼:Form3.Free;//將Form3從內(nèi)存中釋放掉四、MDI多文檔窗體

一個單文檔應(yīng)用程序只能打開一個文檔,而一個多文檔(MDI)應(yīng)用程序可以同時打開不同類型的多個文檔。MDI應(yīng)用程序提供了一種方便的方式,使得用戶在同一工作區(qū)域內(nèi)可以對多個文檔進行觀察和交換數(shù)據(jù)。MDI窗口部分由一個主窗口(也稱為父窗口)和多個子窗口組成,每個文檔對應(yīng)一個子窗口。子窗口位于主窗口的工作區(qū)內(nèi),激活子窗口后主窗口的菜單自動被當前子窗口的菜單所代替。在主窗口的工作區(qū)內(nèi)可以對子窗口進行層疊、平鋪、定位、最大化和最小化、改變大小等各種操作,若最大化子窗口,將占滿MDI主窗口的全部工作區(qū)。

執(zhí)行【File】→【New】→【Other】菜單項,打開NewItems(新建項目)對話框。這個對話框提供了多個向?qū)Ш湍0澹梢陨啥喾N不同用途的應(yīng)用程序。選擇“Projects”選項頁,單擊“MDIApplication”,然后單擊“OK”按鈕,生成一個多文檔應(yīng)用程序。系統(tǒng)自動為應(yīng)用程序生成了三個窗體:主窗體(MainForm)、子窗體(MDIChild)、對話框(AboutBox)。

五、窗體中組件的操作

1.組件的添加2.選定組件3.改變組件的大小

4.對齊組件5.移動和刪除組件6.組件的復(fù)制與粘貼

7.組件的Tab鍵次序設(shè)定

3.3常用組件一、Standard頁上的常用組件

1.Label標簽組件標簽組件用于在窗體上顯示文字,通常用它為其他組件加上一些標注和說明文字,以便讓使用者了解那些組件的用途。特別是有些組件本身沒有Caption屬性,添加一個標簽組件作為提示文字就很有必要??蓪撕灲M件的焦點轉(zhuǎn)移給Form上的另一個對象,方法是設(shè)置標簽組件的FocusControl屬性。在值段中,選用與它關(guān)聯(lián)對象的對象名。然后在標簽中設(shè)置熱鍵,即在Caption屬性值段中輸入含有“&”的字串,緊接“&”之后的字母稱為熱鍵字母,當用戶使用“Alt+熱鍵字母”時,將焦點選中它所指向的對象。

2.Edit編輯框組件

編輯框組件常用于文本輸入輸出,不僅可以顯示用戶的字符串文本,還允許用戶輸入和編輯文本。在人機交互界面中,使用Edit對象最主要的目的就是接收用戶信息,通常用Edit對象輸入數(shù)據(jù),如輸入用戶姓名、通信地址等。編輯框組件的常用事件

:①OnChange:當編輯框組件中的文本發(fā)生改變時觸發(fā)此事件。②OnKeyPress:當編輯框接收到鍵盤字符時觸發(fā)。

3.Memo多行編輯框組件

多行編輯框組件Memo與Edit組件很相像,都是提供給用戶在程序中輸入數(shù)據(jù)或顯示文字用的對象。與編輯框組件不同的是,多行編輯框組件可以顯示和編輯多行文本,而編輯框組件只能顯示和編輯一行文本。多行編輯框組件的屬性和方法與編輯框組件有很多相同之處,如Text、MaxLength、ReadOnly等屬性。

4.Button基本按鈕組件

按鈕是人機交互界面最常見的一個組件,通常用于用戶選取執(zhí)行某項命令。Delphi提供的按鈕有基本按鈕、位圖按鈕、復(fù)選框、單選按鈕、加速按鈕等?;景粹oButton是最簡單的一種按鈕。5.Panel面板組件

Panel組件內(nèi),起分組作用。另外,Panel組件提供了優(yōu)化視覺效果的屬性,因此Panel組件也常作為某些組件的背景,使程序界面更協(xié)調(diào)、優(yōu)美。面板組件Panel還常用于制作信息欄或狀態(tài)欄。

6.CheckBox復(fù)選框組件

復(fù)選框有一小方框,旁邊帶有文本說明,一般具有選中和未選中兩種狀態(tài),鼠標單擊復(fù)選框可以在這兩種狀態(tài)之間切換。選中復(fù)選框時,小方框內(nèi)有√標記。

復(fù)選框組件通常由多個復(fù)選框組件形成一組,在這一組中用戶可同時選中多個組件,選項彼此之間是不具有“互斥性”的,不會影響其他選項的行為,適用于要進行多項選擇的情況。組件可以識別OnClick事件。

7.單選按鈕組件

單選按鈕是旁邊帶有文本說明的小圓圈,具有選中和未選中兩種狀態(tài)。組件的Checked屬性值為True時,組件處于選中狀態(tài),小圓圈的內(nèi)部有黑色的小點;為False時,組件處于未選中狀態(tài),小圓圈是空心的。在一組單選按鈕中,只允許一個單選按鈕處于選中狀態(tài),也就是說,在同一群組中的選項彼此之間是具有“互斥性”。單選按鈕適用于在多個選項中選擇一項的情況。8.ListBox列表框組件

列表框中可以顯示出所有可能的數(shù)據(jù)供用戶選擇,用戶可以選擇其中的一項或多項,因此用戶輸入數(shù)據(jù)可以不必使用鍵盤。列表框組件常用于選項較多的情況。9.ComboBox組合框組件

組合框組把Edit編輯框和ListBox列表框兩者功能合二為一,用戶可以直接輸入內(nèi)容,也可以單擊向下的箭頭后拉出一個列表框,從中選擇某個列表項。在組合框中選項數(shù)據(jù)的新增、刪除、移動、選取等等,也是利用Items對象的Add、Delete、Clear、Insert、Exchange、Move等方法完成。

10.ActionList行為列表組件應(yīng)用程序通常要完成多項指定的任務(wù),Delphi中可以把某項任務(wù)指定為一個“行為”。一個應(yīng)用程序的所有的“行為”常常用ActionList行為列表組件進行管理。設(shè)置ActionList的Images屬性,就能為ActionList指定一個圖像列表(ImageList)對象。

利用“行為”列表編輯器可以添加、刪除、修改“行為”。每個“行為”都是一個對象,雙擊某個“行為”可在該“行為”的OnExecute事件中編寫相應(yīng)的執(zhí)行程序代碼。11.MainMenu主菜單組件

菜單可分為兩類:主菜單和彈出式菜單。主菜單又稱下拉菜單,由MainMenu組件實現(xiàn);彈出式菜單由PopupMenu組件實現(xiàn)。

MainMenu主菜單組件有兩個常用屬性:Items(添加菜單項)及Images(指定圖形組件用于建立圖形菜單)。

Delphi中使用MainMenu組件創(chuàng)建主菜單的步驟如下:(1)生成主菜單將MainMenu組件放入應(yīng)用程序的某一窗體中,就在該窗體對象上建立了主菜單對象,默認的名稱是MainMenu1。該窗體的Menu屬性值也自動設(shè)置為MainMenu1。(2)使用菜單編輯器添加菜單項直接雙擊窗體上的主菜單對象打開菜單編輯器。進人菜單編輯器后,單擊空菜單項。每一個菜單項都是一個MenuItem對象,都有自己的屬性和方法。(3)指定菜單加速鍵和熱鍵鼠標可以操作菜單,還應(yīng)該允許鍵盤操作菜單。輸入菜單項的Caption屬性時,若輸入“&+字母”,“&”符號后邊的那個字母稱為加速字母,運行時加速字母顯示成下劃線字母,按Alt+加速字母鍵就執(zhí)行此菜單項。加速鍵必須在上層菜單項被激活后才能使用。設(shè)置菜單項的ShortCut屬性:從其下拉列表中選擇一熱鍵組合,程序運行時使用這一熱鍵組合可以直接執(zhí)行菜單項。(4)編寫菜單項事件代碼雙擊菜單項,進人該菜單項的OnClick事件程序代碼中,添加相應(yīng)的代碼,實現(xiàn)菜單的功能。如果應(yīng)用程序窗體上有ActionList行為列表組件,可以設(shè)置菜單項的Action屬性。為菜單項指定行為,同樣也能實現(xiàn)菜單的功能。

要在菜單中加入一個分隔條,可設(shè)置菜單項的Caption屬性為“-”。要在某個菜單項的前面插入一個新的菜單項,可先選擇此菜單項,然后按Insert鍵。刪除菜單項,可先選擇要刪除的菜單項,按Delete鍵。用鼠標拖動菜單項可以調(diào)整菜單項的位置。另外,Delphi系統(tǒng)提供菜單模板,右擊菜單項,從快捷菜單中選擇從模板插入(InsertFromTemplate)可以將菜單模板加入到菜單項。12.PopupMenu彈出式菜單組件

PopupMenu組件用來制作彈出式菜單,即在窗口的某個位置右擊鼠標,便會在該位置上出現(xiàn)一個菜單——彈出式菜單。

一個窗體中,彈出式菜單可以有多個,使用時在某個組件(如Panel)的PopupMenu屬性指定彈出式菜單的名稱,運行時右擊這個組件,就可以打開設(shè)定的彈出式菜單。不同的組件可指定不同的彈出式菜單,也可指定同一個彈出式菜單。

彈出式菜單制作過程與主菜單基本相同,所不同的是可以設(shè)置彈出式菜單的位置。PopupMenu的屬性Alignment用于設(shè)置彈出式菜單的位置,其取值說明如下:paCenter:菜單彈出時頂部中點位于鼠標右擊點上paLeft:菜單彈出時左上角位于鼠標右擊點上paRight:菜單彈出時右上角點位于鼠標右擊點上二.Additional頁上的常用組件

1.BitBtn位圖按鈕組件位圖按鈕與基本按鈕的作用相同?;景粹o上只能顯示文字,而位圖按鈕上不僅可以顯示文字,還可以顯示位圖,使界面更加美觀。

2.SpeedButton加速按鈕組件

加速按鈕上也可以顯示圖形和文字,用法與位圖按鈕非常相似。其他的按鈕如普通按鈕、位圖按鈕在按下后立即彈起,而加速按鈕可以在按下后仍保持按下的狀態(tài)。通常多個加速按鈕形成一組,在這一組中只能有一個按鈕處于按下狀態(tài)。因此,加速按鈕多用于生成工具欄按鈕。

三、Win32頁上的常用組件

1.ImageList圖形列表組件

ImageLlist組件用于管理一組(icons)圖標或(bitmaps)位圖。同一個ImageList組件中的圖形大小相同,默認大小為16╳16像素,因此這些圖形適合于作圖標。如果ImageList組件中有n個圖形,則每個圖形都編一個號,編號從0到n-1,通過編號可以訪問對應(yīng)的圖形。

2.ToolBar工具欄組件

工具欄把常用的菜單項對應(yīng)成按鈕,并把多個按鈕以列表的形式排列成行,用戶單擊工具欄某個按鈕就執(zhí)行該菜單項的功能,不要到菜單中去找相應(yīng)的菜單項。工具欄中可以添加按鈕(Button)、圖形按鈕(BitBtn)、加速按鈕(SpeedButton)、組合框(ComboBox)、編輯框(Edit)等。工具欄可以放在標題欄或菜單的下面,也可以放在窗口工作區(qū)的下面或左邊。

3.ProgressBar進度條組件

進度條組件用來指示一項任務(wù)的執(zhí)行進度,隨著任務(wù)的進行,在進度條的矩形區(qū)域內(nèi)從左向右填充上小方塊,當方塊充滿整個矩形區(qū)域時,表示任務(wù)的完成。

4.StatusBar狀態(tài)欄組件

狀態(tài)欄一般位于窗體的底部,用于顯示當前狀態(tài)信息。

狀態(tài)欄組件初始是個空白的狀態(tài)欄,常常要在狀態(tài)欄上添加多個狀態(tài)面

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論