Delphi開發(fā)代碼規(guī)范(修改).doc_第1頁
Delphi開發(fā)代碼規(guī)范(修改).doc_第2頁
Delphi開發(fā)代碼規(guī)范(修改).doc_第3頁
Delphi開發(fā)代碼規(guī)范(修改).doc_第4頁
Delphi開發(fā)代碼規(guī)范(修改).doc_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

一、源程序書寫規(guī)范1.1.通用源代碼格式規(guī)則1).縮進(jìn)縮進(jìn)就是每級間有兩個空格。不要在源代碼中放置制表符。通過使用Tools|Environment 菜單,在Environment Options 對話框的General頁上,不要選中Use Tab Character 和Optional Fill 復(fù)選框,這樣,制表符就不會被保存。2).邊距邊距設(shè)置為80個字符。只要可能,長度超過一行的語句應(yīng)當(dāng)用逗號或運算符換行。換行后,應(yīng)縮進(jìn)兩個字符。代碼行上字符串的長度不要超過255個字符,如果超過換行縮短,否則出現(xiàn)編譯錯誤。3).begin.end 語句begin 語句必須單獨占一行。例如:for i:=0 to 10 do begin / 錯, begin 與f o r 在同一行for i:=0 to 10 do / 對, begin 在另外一行中begin本規(guī)則的一個特殊情況是,當(dāng)begin 為else 語句的一部分時,例如:if some statement = thenbegin . . .endelse begin Some Other Statement;end;注意:end 語句總單獨一行。當(dāng)begin 不為else 語句的一部分時,相應(yīng)的end 語句與begin 語句的縮進(jìn)量相同。1.2.Object Pascal語句格式語句書寫規(guī)范與用法1). 括號在左括號與下一字符之間沒有空格。同樣,右括號與前一字符也沒有空格。下面的例子演示了正確與不正確的空格。CallProc( Aparameter ); / 錯!CallProc(Aparameter); / 正確! 不要在語句中包含多余的括號。在源代碼中,括號只有在確實需要時才使用。下面的例子演示了正確與不正確用法:if (I=42) then / 錯,括號是多余的if (I=42) or (J=42) then / 正確,必須使用括號2). 保留字和關(guān)鍵字 Object Pascal 語言的保留字和關(guān)鍵字總是完全的小寫。3). 過程和函數(shù)(1). 格式 過程名應(yīng)當(dāng)以大寫字母開始,且大小寫交錯以增加可讀性。例如procedure ThisIsMuchMoreReadableRoutineName;(2). 形參1、格式只要可能,同一類型的形參應(yīng)當(dāng)歸并在一起:procedure Foo(Param1,Param2,Param3:Imteger;Param4:string);2、參數(shù)順序 形參的順序主要考慮寄存器調(diào)用規(guī)則。最常用的參數(shù)應(yīng)當(dāng)作為第一個參數(shù),按使用頻率依次從左到右排。輸入?yún)?shù)位于輸出參數(shù)之前。范圍大的參數(shù)應(yīng)當(dāng)放在范圍小的參數(shù)之前。例如:SomeProc(aPlanet, aContinent, aCountry, aState, aCity). 有些則例外。例如,在事件處理過程中,TObject 類型的Sender 參數(shù)往往是第一個要傳遞的參數(shù)。(3). 常量參數(shù) 要使記錄、數(shù)組、短字符串或接口類型的參數(shù)不能被過程修改,就應(yīng)當(dāng)把形參標(biāo)以Const 。4). 變量(1). 局部變量局部變量用于過程內(nèi)部,如果需要的話,應(yīng)當(dāng)在過程的入口處立即初始化變量。局部的AnsiString 類型的變量自動被初始化為空字符串,局部的接口和dispinterface類型的變量自動被初始化為nil,局部的Variant和OleVariant類型的變量自動被初始化為Unassigned。(2). 全局變量 一般不鼓勵使用全局變量。應(yīng)當(dāng)把全局變量限制在需要的環(huán)境中。例如,一個全局變量可能只在單元的實現(xiàn)部分是全局的。 全局?jǐn)?shù)據(jù)如果將由許多單元使用,就應(yīng)移動到一個公用單元里被所有對象使用。全局?jǐn)?shù)據(jù)可在聲明時直接初始化為一個值。注意,所有全局變量自動進(jìn)行零初始化,因此,不要將全局變量初始化為諸如0 、nil、或Unassigned等空值。零初始化的全局變量在.EXE文件中不占空間。零初始化的數(shù)據(jù)保存在虛擬的數(shù)據(jù)段中,而虛擬數(shù)據(jù)段只在應(yīng)用程序啟動時才分配內(nèi)存。5). 類型(1). 大小寫規(guī)則 類型標(biāo)識符是保留字,應(yīng)當(dāng)全部小寫。Win32 API 類型常常全部大寫,并且遵循諸如Windows.pas或其他API單元中關(guān)于特定類型名的規(guī)則。對于其他變量名,第一個字母應(yīng)大寫,其他字母則大小寫交錯。下面是一些例子:var MyString: string; / 保留字 WindowsHandle: HWND; / Win32 API 類型 I: Integer; /在System單元中引入的類型標(biāo)識(2). 浮點型 不鼓勵使用Real類型,因為它只是為了與老的Pascal代碼兼容而保留的。通常情況下,對于浮點數(shù)應(yīng)當(dāng)使用Double。 (3).Variant和OleVariant 一般不建議使用Variant和OleVariant。但是,當(dāng)數(shù)據(jù)類型只有在運行期才知道時(常常是在COM和數(shù)據(jù)庫應(yīng)用的程序中),這兩個類型對編程就有必要。當(dāng)進(jìn)行諸如自動化ActiveX控件的COM編程時,應(yīng)當(dāng)使用OleVariant;而對于非COM編程,則應(yīng)當(dāng)使用Variant。這是因為,Variant能夠有效地保存Delphi的原生字符串,而OleVariant則將所有字符串轉(zhuǎn)換為OLE字符串(即WideChar字符串),且沒有引用計數(shù)功能。6). 語句(1). If 語句 在if/then/else語句中,最有可能執(zhí)行的情況應(yīng)放在then子句中,不太可能的情況放在else子句中。為了避免出現(xiàn)許多if語句,可以使用case語句代替。 如果在if語句中有多個條件要測試,應(yīng)按照計算的復(fù)雜程度從右向左排。這樣,可以使代碼充分利用編譯器的短路估算邏輯。例如,如果Condition1比Condition2快,Condition2比Condition3快,則if語句一般應(yīng)這樣構(gòu)造:if Condition1 and Condition2 and Condition3 then 如果Condition3為False的機會很大,利用短路估算邏輯,我們也可以將Condition3放在最前面:if Condition3 and Condition1 and Condition2 then(2). case 語句(1) 概述 case語句中每種情況的常量應(yīng)當(dāng)按數(shù)字或字母的順序排列。每種情況的動作語句應(yīng)當(dāng)簡短且通常不超過4 - 5 行代碼。如果動作太復(fù)雜,應(yīng)將代碼單獨放在一個過程或函數(shù)中。Case語句的else子句只用于默認(rèn)情況或錯誤檢測。(2) 格式 case語句遵循一般的縮進(jìn)和命名規(guī)則。(3). while 語句 建議不要使用Exit過程來退出while循環(huán)。如果需要的話,應(yīng)當(dāng)使用循環(huán)條件退出循環(huán)。所有對while循環(huán)進(jìn)行初始化的代碼應(yīng)當(dāng)位于while入口前,且不要被無關(guān)的語句隔開。任何業(yè)務(wù)的輔助工作都應(yīng)在循環(huán)后立即進(jìn)行。(4). for 語句 如果循環(huán)次數(shù)是確定的,應(yīng)當(dāng)用for語句代替while語句。(5). repeat 語句 repeat語句類似于while循環(huán),且遵循同樣的規(guī)則。(6). with 語句(1) 概述 with語句應(yīng)小心使用。要避免過度使用with語句,尤其是在with語句中使用多個對象或記錄。例如:with Record1,Record2 do 這些情況很容易迷惑編程人員,且導(dǎo)致調(diào)試?yán)щy。(2) 格式 with語句也遵循本章關(guān)于命名和縮進(jìn)的規(guī)則。7). 結(jié)構(gòu)化異常處理(1). 概述凡是分配資源的地方,都必須使用try.finally來保證資源得到釋放。不過,如果是在單元的初始/結(jié)束部分或者對象的構(gòu)造器/析構(gòu)器中來分配/釋放資源則例外。(2). try.finally的用法 在可能的情況下,每個資源分配應(yīng)當(dāng)與try.finally結(jié)構(gòu)匹配,但有時如果有許多類都需要同時創(chuàng)建,建議使用下述的一個安全方案:SomeClass1 := nil;SomeClass2 := nil;try SomeClass1 := TSomeClass.Create;SomeClass2 := TSomeClass.Create; do some code finally FreeAndNil(SomeClass1); FreeAndNil(SomeClass2);end;(3). try.except的用法 如果你希望在發(fā)生異常時執(zhí)行一些任務(wù),可以使用try.except。通常,沒有必要為了簡單地顯示一個錯誤信息而使用try.except,因為Application對象能夠自動根據(jù)上下文做到這一點。如果要在子句中激活默認(rèn)的異常處理,可以再次觸發(fā)異常。(4). try.except.else的用法 不鼓勵使用帶else子句的try.except,因為這將阻塞所有的異常,包括你沒有準(zhǔn)備處理的異常。二、命名規(guī)范首先,命名要有一定的意義,表示一定的用途。2.1.過程(Procedure)與函數(shù)(Function)1).命名進(jìn)行一個動作的過程最好在名稱前加上表示動作的動詞為前綴。函數(shù)或過程體由與函數(shù)或過程含義相同或相近的英文單詞或其縮寫組成,但只允許使用其中一種方式(英文/拼音),每個單詞的首字符要大寫,縮寫的要全部大寫。例如:procedure FormatHardDrive; 設(shè)置輸入?yún)?shù)值的過程名應(yīng)當(dāng)以Set 為其前綴,例如:procedure SetUserName; 獲取數(shù)值的過程名應(yīng)當(dāng)以Get 為其前綴,例如:function GetUserName:string;2).形參如果合適的話,形參的名稱最好以字母A 為前綴,輸入變量名(參數(shù))的定義使用與此變量相同或相近的英文單詞或英文縮寫,如果沒有可用的英文可使用漢語拼音,當(dāng)使用單詞時單詞的首字符要大寫,使用縮寫或漢語拼音時要全部大寫。例如:procedure SomeProc(AUserName:string; AUserAge:integer);當(dāng)參數(shù)名與類的特性或字段同名時,前綴A 就有必要了。3).命名沖突 當(dāng)兩個單元中含有相同名稱的過程時,如果調(diào)用該過程,實際被調(diào)用的是Uses 子句中較后出現(xiàn)的那個單元中的過程。為避免這種情況,可在方法名前加想要的單元名,例如:SysUtils.FindClose(SR);或Windows.FindClose(Handle);4).注釋說明在函數(shù)或過程定義時要簡單說明函數(shù)或過程的作用;在實現(xiàn)部分前面要以以下格式加注釋: -名稱:(寫此函數(shù)名)作者:(寫程序員名字)時間:(寫函數(shù)建立時間)功能:(較詳細(xì)地描述此函數(shù)的功能)輸入:(列出每一變量的名稱、類型及其含義或作用如果一個變量有多個固定的值代表不同作用要分別列出每個值的意義)輸出:(要說明輸出變量的類型、含義,如果輸出是一系列固定的值時要說明每個輸出值的含義)日志:(此為修改日志,在開發(fā)時無需書寫任何內(nèi)容,在開發(fā)結(jié)束后進(jìn)行修改時要以以下格式書寫:序號、修改人;修改時間;修改內(nèi)容;修改原因)-2.2.變量(Variable)循環(huán)控制變量常常為單個字母,諸如I 、J 或K 。也可以使用更有意義的名稱,例如UserIndex。布爾變量名必須能清楚表示出True 和False 值的意義。1). 局部變量 局部變量遵循其他變量的命名規(guī)則,除i,j,k外,建議以L開頭。2). 全局變量 建議以G開頭。全局變量使用前應(yīng)做好初使化工作。2.3.類型(Type)1).一般類型1). 枚舉型 枚舉類型名必須代表枚舉的用途。名稱前要加T字符作為前綴,表示這是個數(shù)據(jù)類型。枚舉類型的標(biāo)識符列表的前綴應(yīng)包含2 - 3 個小寫字符,來彼此關(guān)聯(lián)。例如:TSongType=(stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB); 枚舉類型的變量實例的名稱與類型相同,但沒有前綴T ,也可以給變量一個更加特殊名稱,諸如:FavoriteSongTypel、FavoriteSongType2等等。2).構(gòu)造類型1). 數(shù)組類型類型名必須加字母“T”為前綴。如果要聲明一個指向數(shù)組類型的指針,則必須加字母P 為前綴,且聲明在類型聲明之前。例如:type PCycleArray = TCycleArray; TCycleArray=array1.100 of integer;實際上,數(shù)組類型的變量實例與類型名稱相同,但沒有“T”前綴。2). 記錄類型 記錄類型名應(yīng)表達(dá)出記錄的用途。類型名必須加字母T為前綴。如果要聲明一個指向記錄類型的指計,則必須加字母P為前綴,且其聲明在類型聲明之前。例如:type PEmployee = TEmployee; TEmployee = record EmployeeName: string; EmployeeRate: Double; end;3).類類型(Class)1). 命名與格式一般的類名前要加字母“T”,如果是接口類那么類名前要加“I”,錯誤異常類的類名前要加“E”,而類引用類型(Class-reference type)則要在類名后加“Class”,抽象類一般是在類名前還要加“Custom”。例如:type TCustomCipher = class(TObject); TCipher = class(TCustomCipher); ICipher = interface; TCipherClass = class of TCustomer ECipherException = class(Exception); 類的實例名稱通常與類名相同,只不過沒有前綴“T”。var Customer: TCustomer;2).字段 字段的命名遵循與變量相同的規(guī)則,只不過要加前綴F ,表示這是字段。 所有字段必須為私有。如果要在類的作用域之外訪問字段,可借助于類的屬性來實現(xiàn)。3).方法(1) 命名與格式 方法的命名遵循與過程和函數(shù)相同的規(guī)則。(2) 靜態(tài)方法 當(dāng)你不希望一個方法被派生類覆蓋時,應(yīng)當(dāng)使用靜態(tài)方法。(3) 虛擬方法(virtual)與動態(tài)方法(dynamic) 當(dāng)你希望一個方法能被派生類覆蓋,應(yīng)當(dāng)使用虛擬方法(virtual)。如果類的方法要被多個派生類直接或間接地使用,則應(yīng)當(dāng)用動態(tài)方法(dynamic)。例如,某一個類含有一個被頻繁覆蓋的方法,并有100個派生類,則應(yīng)將方法定義為動態(tài)的,這樣可以減少內(nèi)存的開銷。(4) 抽象方法(abstract) 如果一個類要創(chuàng)建實例,則不要使用抽象方法。抽象方法只能在那些從不創(chuàng)建實例的基類中使用。(5) 屬性訪問方法 所有屬性訪問方法應(yīng)當(dāng)定義在類的私有或保護(hù)部分。屬性訪問方法遵循與過程和函數(shù)相同的規(guī)則。用于讀的方法應(yīng)當(dāng)加“Get”前綴,用于寫的方法應(yīng)當(dāng)加“Set”前綴,并且有一個叫Value的參數(shù),其類型與屬性的類型相同。例如:TSomeClass = class(TObject)privateFSomeField: Integer;protectedfunction GetSomeField: Integer;procedure SetSomeField(Value: Integer);publicproperty SomeField: Integer read GetSomeField write SetSomeField;end; 盡管不是必須,但還是建議你使用寫訪問方法來訪問代表私有字段屬性。4).屬性 屬性作為私有字段的訪問器,遵循與字段相同的命名規(guī)則,只不過沒有F前綴。屬性名應(yīng)為名詞,而不是動詞。屬性是數(shù)據(jù),而方法是動作。數(shù)組屬性名應(yīng)當(dāng)是復(fù)數(shù),而一般的屬性應(yīng)當(dāng)是單數(shù)。4).元件類型1). 元件類型的命名標(biāo)準(zhǔn) 元件的命名與類的命名類似,只不過當(dāng)它與其它元件名稱沖突時,你可以加上3個字符的前綴,用以標(biāo)識公司、個人或其他實體。例如,一個時鐘元件可以這樣聲明:TddgClock = class(TComponent)注意,作為前綴的3 個字符要小寫。2). 元件實例的命名規(guī)則元件實例名包括兩個部分:前綴和性質(zhì)標(biāo)識名。(1). 元件的前綴 元件的前綴多是表現(xiàn)元件類型的字母縮寫。參見下面表中的元件前綴:元件類名元件前綴TActionList, TAction表示動作的列表項actTButton, TSpeedButton, TBitBtn等所有的按鈕類btnTCheckBox, TDBCheckBox等所有的檢查框chkTRadioButton單選按鈕類rdoTToolBar工具條tbTMainMenu所有的主菜單類mmTMainMenuItem所有的菜單項類miTPopupMenu所有的彈出式菜單類pmTPopupMenuItem所有的彈出式菜單項類pmiTLabel, TStaticText等所有用來顯示的標(biāo)簽類lblTPanel等所有的面板類pnlTPageControl等所有的頁式控件類pgcTEdit, TMaskEdit等所有的單行編輯框類edtTMemo, TRichEdit等所有的多行編輯框類mmoTDrawGrid, TStringGrid等所有的網(wǎng)格類grdTAnimate等所有的動畫類aniTImageList等所有的圖片列表類ilTImage等圖片類imgTChart圖表類chtTComboBox, TDBComboBox等所有的下拉式列表框類cboTListBox, TDBList等所有的列表框類lstTTreeViewtvTListViewlvTHotKeyhkTSplitter等所有的分隔符類sptTOpenDialog等所有的對話框元件類dlgTTable等所有的數(shù)據(jù)表類tblTQuery等所有的SQL查詢類元件qryTClientDataSet所有的客戶數(shù)據(jù)集元件cdsTDataSourcedsTDatabasedbTSockConnection,TDCOMConnection等連接元件類conTQuickRep, TFastReport等所有的報表元件類rptTDDEClientConv,TDDEClientItem等所有的DDE元件類ddeTMonthCalendar等所有的日歷類calTGroupBox等控件類grp 如上所示,元件類型前綴是從分析描述元件的類型性質(zhì)而來的。通常情況下,下面的規(guī)則描述如何定義一個元件類型前綴:從元件類型名中移去T前綴。例如TButton變成Button。 除了第一個元音,刪去所有元音字母。例如,Button變成bttn,Edit變成edt。 壓縮雙字母。例如,bttn變成btn。 如發(fā)生沖突,則在某一元件前綴中加入一個元音。例如在TBatton元件的前綴中加入元音變?yōu)閎atn,以區(qū)別TButton的前綴。 不過,上述規(guī)則首先得保證前綴名稱必須符合習(xí)慣,做到見名知意,如:TDDEClientConv控件的前綴就是一個例外。 注意:元件的前綴是為了表示出元件的類型,是按鈕,還是標(biāo)簽等等,因此沒有必要為每一個特別元件類建立一個元件前綴,如: TMyButton的元件前綴仍為btn。(2). 元件性質(zhì)標(biāo)識名 元件性質(zhì)標(biāo)識名是元件意圖的描述。例如,一個用于關(guān)閉窗體的TButton元件實例可命名為btnClose。一個編輯姓名的元件實例可命名為edtName。5).窗體與對話框類型1). 窗體類型的命名標(biāo)準(zhǔn) 如果是窗體要加“Tfrm”前綴,如果是對話框要加“Tdlg”,后跟描述性名。例如,About窗體類型名稱為:TfrmAbout = class(TForm)主窗體的類型名稱為:TfrmMain = class(TForm)客戶登錄窗體的類型名稱為:TfrmCustomerEntry = class(TForm)登陸對話框的類型名稱為:TdlgLogin = class(TForm)2). 窗體實例的命名標(biāo)準(zhǔn) 窗體實例的名稱與相應(yīng)的類型名稱相同,但沒有前綴T 。例如,前面提到的窗體類型與實例的名稱為:類型名實例名TfrmAboutfrmAboutTfrmMainfrmMainTfrmCustomerEntryfrmCustomerEntryTdlgLogindlgLogin3). 自動創(chuàng)建的窗體 除非特別原因,只有主窗體才自動生成。其他所有窗體必須從Project Options對話框的自動生成列表中刪除。更進(jìn)一步信息,請參閱后面幾節(jié)。4). 模式窗體實例化函數(shù) 所有窗體單元都應(yīng)當(dāng)含有實例化函數(shù),用于創(chuàng)建、設(shè)置、模式顯示和釋放窗體。這個函數(shù)將返回由窗體返回的模式結(jié)果。傳遞給這個函數(shù)的參數(shù)遵循參數(shù)傳遞的規(guī)則。之所以要這樣封裝,是為了便于代碼的重用和維護(hù)。 窗體的變量應(yīng)當(dāng)從單元中移走,改在窗體實例化函數(shù)中作為局部變量定義(注意,要求從Project Options對話框的自動生成列表中移走該窗體。請看前面的內(nèi)容。例如,下面的單元文件演示了GetUserData的實例化函數(shù)。Unit uFrmUserData;InterfaceUses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;Type TfrmUserData = class(TForm) edtUserName: TEdit; edtUserID: TEdit; private Private declarations public Public declarations end;function GetUserData(var aUserName: String;var aUserID: Integer): Word;implementation$R *.DFMfunction GetUserData(var aUserName: String;var aUserID: Integer): Word;var frmUserData: TfrmUserData;begin frmUserData := TfrmUserData.Create(Application); frmUserData.Caption:=Getting User Data ; Result : = frmUserData.ShowModal; if Result=mrOK then begin aUserName := frmUserData.edtUserName.Text; aUserID := StrToInt(frmUserData.edtUserID.Text); end; finally frmUserData.Free; end;end;End.5).窗體框架與復(fù)合窗體 如果一個窗體結(jié)構(gòu)過于復(fù)雜,就必須將其分化成為一個主窗體框架以及嵌入到主窗體框架的若干子窗體框架。如:TfrmMainFrame: TfrmInfoFrame,TfrmEditorFrame6).數(shù)據(jù)模塊類型1). 數(shù)據(jù)模塊的命名標(biāo)準(zhǔn)前綴“Tdm”,后跟描述性名稱。例如,Customer數(shù)據(jù)模塊的類型名稱為:TdmCustomer = class(TDataModule)Orders 數(shù)據(jù)模塊的類型名稱為:TdmOrder = class(TDataModule)2). 數(shù)據(jù)模塊實例的命名標(biāo)準(zhǔn) 數(shù)據(jù)模塊實例的名稱應(yīng)當(dāng)與相應(yīng)的類型名稱相同,但沒有前綴T 。例如,前面的數(shù)據(jù)模塊類型、實例名稱如下:類型名稱實例名TdmCustomerdmCustomerTdmOrderdmOrder2.4.文件 建議在所有源文件、項目文件和單元文件使用結(jié)構(gòu)化的文件頭信息。每個單元在最開始部分要加注釋,其格式如下:-名稱:項目名稱名稱:(寫單元名稱)作者:(寫開發(fā)人員名字)時間:(寫此單元建立時間)功能:(描述此單元的功能)修改日志:(此項為維護(hù)時使用,當(dāng)單元內(nèi)代碼更改時要按以下內(nèi)容書寫修改日志:序號、修改人員名字;修改時間;修改的函數(shù)及過程名稱;修改內(nèi)容;修改原因)-1).項目文件 項目文件的名稱應(yīng)當(dāng)具有描述意義。例如,“The Delphi 5 Developers Guide Bug Manager ”的項目名稱為DDGBugs.dpr,一個系統(tǒng)信息程序的名稱為SysInfo.dpr。2).窗體文件 窗體文件的名稱應(yīng)當(dāng)表達(dá)出窗體的用途,且具有uFrm前綴。例如,About窗體的文件名叫uFrmAbout.dfm,主窗體的文件名叫uFrmMain.dfm。3).數(shù)據(jù)模塊文件 數(shù)據(jù)模塊文件的名稱應(yīng)當(dāng)表達(dá)出數(shù)據(jù)模塊的作用,且具有uDm前綴。例如,Customers數(shù)據(jù)模塊的文件名叫uDmCustomers.dfm。4).遠(yuǎn)程數(shù)據(jù)模塊文件 遠(yuǎn)程數(shù)據(jù)模塊文件的名稱應(yīng)當(dāng)表達(dá)出遠(yuǎn)程數(shù)據(jù)模塊的用途。名稱后要加RDM前綴。例如,Customers遠(yuǎn)程數(shù)據(jù)模塊的文件叫uRDMCustomers.dfm。5).單元文件1). 普通單元(1) 單元名 單元的名稱應(yīng)當(dāng)有描述性。例如,應(yīng)用程序的主窗體單元叫uFrmMaim.pas。(2) Uses 子句 Interface部分的Uses子句應(yīng)當(dāng)只包含該部分需要的單元。不要包含可能由Delphi自動添加的單元名。Implementation部分的Uses子句應(yīng)當(dāng)只包含該部分需要的單元,不要有多余的單元。(3) Interface 部分 Interface部分應(yīng)當(dāng)只包含需要被外部單元訪問的類型、變量、過程與函數(shù)的聲明。而且,這些聲明應(yīng)當(dāng)在Implementation部分之前。(4) Implementation 部分 Implementation部分包括本單元私有的類型、變量、過程與函數(shù)的實現(xiàn)。(5) Initialization 部分 不要在Initialization部分放置花費時間很多的代碼。否則,將導(dǎo)致應(yīng)用程序啟動時顯得很慢。(6) Finalization 部分 確保釋放所有在Initialization部分中分配的資源。2).窗體單元 窗體單元文件的名稱與相應(yīng)的窗體名稱相同,只是要將前綴變成后綴。例如,About窗體的單元名稱叫uFrmAbout.pas。主窗體的單元文件名稱叫uFrmMain.pas。3).數(shù)據(jù)模塊單元 數(shù)據(jù)模塊單元文件的名稱與相應(yīng)的數(shù)據(jù)模塊名稱相同。例如,數(shù)據(jù)模塊單元的名稱叫uDmCustomers.pas。4).通用單元 通用單元是用于存放函數(shù)庫,一般類型,或常量而非元件的單元。通用單元的名稱應(yīng)當(dāng)表達(dá)出它的用途,名稱前要加“u”前綴。例如,一個實用調(diào)試工具單元的名稱叫uDebugUtilities.pas,包含全局變量的單元名稱叫uCustomerGlobals.pas(uPublic.pas)。注意,一個項目中單元名稱必須是唯一的。通用單元名不能重名。5).元件單元(1). 命名 元件單元應(yīng)放在單獨的路徑中,以表明它們是定義元件的單元。它們一般與項目不放在同一路徑下。單元文件名稱應(yīng)表達(dá)出其內(nèi)容。 元件單元只能含有一個主要元件,這是指出現(xiàn)在元件選項板上的元件。其他輔助性的元件或?qū)ο笠部梢园谕粏卧小?2). 注冊單元 元件的注冊過程應(yīng)當(dāng)從元件單元中移走,放在一個單獨的單元中。這個注冊單元用于注冊所有元件、屬性編輯器、元件編輯器、向?qū)У取?元件注冊應(yīng)當(dāng)在設(shè)計期包中進(jìn)行。因此,注冊單元應(yīng)當(dāng)包含在設(shè)計期包而不是運行期包中。建議注冊單元這樣命名:xxxReg.pas其中,xxx字符前綴,以標(biāo)識元件包名稱。例如,注冊單元命名為xxxReg.pas。6)報表單元報表單元文件的名稱與相應(yīng)的報表名稱相同。例如,報表單元的名稱叫uRptCustomers.pas。6).項目目錄結(jié)構(gòu)程序使用目錄名稱定義含義應(yīng)明確,易理解。程序主目錄 -Source應(yīng)用程序源代碼所在目錄-DataBase 本地數(shù)據(jù)庫目錄-DOC 說明文檔所在目錄-HELP 幫助文件所在目錄-BACKUP 備份數(shù)據(jù)所在目錄-TEMP 臨時文件所在目錄-Run 系統(tǒng)發(fā)布文件所在目錄-TEMP 臨時文件所在目錄-PICTURE 圖形文件所在目錄-MEDIA 媒體文件所在目錄-DLL 動態(tài)鏈接庫所在目錄,動態(tài)鏈接庫也可放在發(fā)布文件目錄下。-DATA 數(shù)據(jù)文件目錄-REPORT 報表目錄-Setup 安裝文件目錄程序參數(shù)配置文件應(yīng)同主程序在同一目錄。三、注意事項3.1.其他1) 任何地方的注釋嚴(yán)禁單獨使用“?”,如確實有疑問,使用漢字注明,建議添加至To-Do列表中。2) 在修改代碼時如果有較大一段用不到,不要用注釋的方式來屏蔽,要刪除此段代碼;如果確實需要用注釋來屏蔽的話,一定要在被注釋代碼起始與結(jié)束處標(biāo)明。3) 每個函數(shù)(過程)的代碼行數(shù)最大不超過100行,如果代碼量大,可拆分為若干函數(shù)。4) 如果一段代碼在若干地方都可用,那么這段代碼應(yīng)該寫成公用函數(shù)。3.2.補充一、提示對話框Application.MessageBox(const Text, Caption: PChar; Flags: Longint = MB_OK): Integer;其中:Text為顯示的提示內(nèi)容,用單引號擴起來。Caption 為對話框標(biāo)題條標(biāo)題。Flags 為對話框顯示按鈕方式,包括: MB_ABORTRETRYIGNOR 終止,重試,忽略MB_OK 確定 MB_OKCANCEL 確定取消MB_RETRYCANCEL 重試,取消MB_YESNO 是,否MB_YESNOCANCEL 是,否,取消可以和下列圖標(biāo)標(biāo)識聯(lián)合使用MB_ICONWARNING 警告信息圖標(biāo)MB_ICONINFORMATION 提示信息圖標(biāo)MB_ICONQUESTION 詢問信息圖標(biāo)MB_ICONSTOP 停止信息圖標(biāo)MB_ICONERROR 錯誤信息圖標(biāo)提示對話框幾種常用方式1、提示對話框: Application.MessageBox(修改成功!,提示,MB_OK+MB_ICONINFORMATION);2、詢問對話框: if Application.Messa

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論