版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 Delphi 程序員代碼編寫標(biāo)準(zhǔn)指南 版權(quán)所有 1998 Xavier Perched和 Steve Teiseira一、序言3二、通用源代碼格式規(guī)則42.1 縮格42.2 頁邊空格42.3 Begin.End 配對4三、Object Pascal53.1 括號53.3 過程和函數(shù)(例程)6命名/格式化6形式參數(shù)6格式化6參數(shù)的排序7常量參數(shù)7名稱的沖突73.4 變量8變量的命名和格式8局部變量8全局變量的使用83.5 類型9大寫約定9浮點指針類型9枚舉類型9變數(shù)和ole變數(shù)類型10結(jié)構(gòu)類型10數(shù)組類型10記錄類型103.6 語句11語句11語句11一般性話題11格式12語句12語句12語句
2、12語句12一般話題12格式133.7 結(jié)構(gòu)異常處理13一般話題13的使用13的使用14的使用143.8 類類型14命名和格式14域15命名/格式15可視化15方法15命名/格式15使用靜態(tài)的方法15使用虛擬/動態(tài)的方法15使用抽象的方法16屬性存取方法16屬性16命名/格式16使用存取的方法17四、文件174.1 工程文件17命名174.2 窗體文件17命名174.3 數(shù)據(jù)模板文件17命名184.4 遠端數(shù)據(jù)模板文件18命名184.5 Unit文件18通用Unit結(jié)構(gòu)18的名字18子句18部分19部分19部分19部分19窗體單元19命名19數(shù)據(jù)模板單元20命名20一般目的單元20命名20構(gòu)件
3、單元20命名204.6 文件頭21五、窗體和數(shù)據(jù)模板215.1 窗體21窗體類型命名標(biāo)準(zhǔn)21窗體實例命名標(biāo)準(zhǔn)21自動創(chuàng)建窗體22模式窗體實例化函數(shù)225.2 數(shù)據(jù)模板23數(shù)據(jù)模板命名標(biāo)準(zhǔn)23數(shù)據(jù)模板實例命名標(biāo)準(zhǔn)23六、包246.1 使用運行包和設(shè)計包的比較246.2 文件命名標(biāo)準(zhǔn)24七、構(gòu)件257.1 用戶自定義構(gòu)件257.2 構(gòu)件單元257.3 使用注冊單元257.4 構(gòu)件實例命名約定257.5 構(gòu)件的前綴267.6 Standard頁267.7 Additional頁267.8 Win32頁277.9 System頁277.10 Internet頁287.11 Data Access頁28
4、7.13 Decision Cube頁297.14 QReport頁297.15 Dialogs頁307.16 Win3.1頁307.17 Samples頁307.18 ActiveX頁317.19 Midas頁31一、序言本文檔詳述了在Delphi 4開發(fā)者指南下進行編程的代碼編寫標(biāo)準(zhǔn)。在通常情況下,本文檔遵循“取消”式格式的指引方針,該方針由Borland國際通過一些例外來使用。在Delphi 4開發(fā)者指南中包含本文檔的目的在于闡述一種方法,通過該方法,開發(fā)小組可以在他們所編寫的代碼中保持一貫的風(fēng)格。這樣做的目的是使在開發(fā)小組中的每一個程序員都可以明白其他程序員的代碼。這有助于提高代碼編寫
5、的可讀性和使用的一貫性。二、通用源代碼格式規(guī)則2.1 縮格縮格是指在每一級有兩個空格。不要在源代碼中保留tab字符,這是因為tab字符會隨著不同用戶的不同設(shè)置和不同的資源管理工具(打印、文檔、版本控制等)而代表不同的寬度。你可以通過關(guān)閉Environment選項對話框中Editor頁上的“Use tab character”和“Optimal fill”檢查框(通過Tools|Environment)來禁止保存tab字符。2.2 頁邊空格頁邊空格會被設(shè)置成80字符寬。通常,源碼不會超出這個邊界,但這個方針會有一些彈性。不管是否有可能,那些超出到另一行的語句會在一個逗號或其他操作符之后與前面的語
6、句相連。當(dāng)一個語句被打斷相連時,它應(yīng)比原來的那一行語句縮進兩個字符。2.3 Begin.End 配對Begin 子句應(yīng)寫在獨立的一行。例如,下面第一行是錯誤的寫法而第二行是正確的。for I := 0 to 10 do begin /錯誤,begin同for在同一行for I := 0 to 10 do /正確,begin出現(xiàn)在獨立的一行begin這個規(guī)則的例外是當(dāng)begin子句的出現(xiàn)是作為一個else子句的一部分參考例子:if some statement thenbegin .endelse begin someOtherStatement;end;end 語句永遠出現(xiàn)在獨立的一行。當(dāng)be
7、gin語句不是一個else子句的一部分時,相應(yīng)的end語句永遠縮進到與begin部分相對應(yīng)的位置。文檔頂端三、Object Pascal3.1 括號永遠不要在括號與括號之間的字符中間留下空格。下面的例子示范了錯誤的與正確地使用括號中的空格: CallProc( Aparameter ); /錯誤 CallProc(Aparameter); /正確永遠不要在一個語句中使用不必要的括號。括號只應(yīng)在源代碼中需要的地方使用。以下的例子示范了錯誤和正確的使用:if (I = 42) then /錯誤 多余的括號if (I = 42) or (J = 42) then /正確 需要括號3.2 保留字和關(guān)鍵
8、字Object Pascal 保留字和關(guān)鍵字永遠是全部小寫。3.3 過程和函數(shù)(例程) 命名/格式化例程的名字永遠應(yīng)該以大寫的字母開頭并且中間錯落分明以便于可讀性。下面是一個不正確格式的過程名稱: procedure thisisapoorlyformattedroutinename;下面是一個合適的大小寫例程名稱的例子: procedure ThisIsMuchMoreReadableRoutineName;例程的名稱應(yīng)該同它的內(nèi)容相符。一個會導(dǎo)致某個行為的例程應(yīng)以動詞開頭。例如: procedure FormatHardDrive;一個用于設(shè)置輸入?yún)?shù)的例程應(yīng)以單詞set作為前綴,例如:
9、procedure SetUserName;一個用來接收某個值的例程應(yīng)以單詞get作為前綴,例如: procedure GetUserName : string; 形式參數(shù).1 格式化如果有的話,相同類型的形參應(yīng)合并在一個語句中: procedure Foo(Param1, Param2, Param3 : Integer; Param4 : string);.2 命名所有形參的名字應(yīng)是十分符合它們所代表的意義,特別是應(yīng)該以傳送到例程中的標(biāo)志符的名稱為基礎(chǔ)。一個好的參數(shù)名稱應(yīng)以字符A為前綴 例如: procedure SomeProc(AuserName : string; AuserAge
10、: integer);“A”前綴按約定表示該參數(shù)的名稱是與類類型中的一個屬性或域的名稱相對應(yīng)的。.3 參數(shù)的排序下面的形參的順序重點說明了注冊者調(diào)用約定調(diào)用的好處。 最常用的參數(shù)應(yīng)放在第一位,其它的參數(shù)應(yīng)按從左到右的順序排列。 輸入?yún)?shù)列表應(yīng)放在輸出參數(shù)列表的左邊。 將通用的參數(shù)放在特殊參數(shù)的左邊,例如: procedure SomeProc(Aplanet, AContinent, Acountry, Astate, Acity) 排序有可能有些例外,比如事件的處理。類型為TObject的Sender參數(shù)經(jīng)常放在第一位。.4 常量參數(shù)當(dāng)一個參數(shù)為記錄型、數(shù)組類型、ShortString、或接
11、口類型并且在例程中不被改變時,這些參數(shù)應(yīng)做上常量標(biāo)記。這樣做會讓編譯器更加有效率的產(chǎn)生有關(guān)這些不改變的參數(shù)的代碼。而例程中另外一些非變參數(shù)也可常量來傳送。盡管這樣做沒有產(chǎn)生任何效果和提高效率,這將會給調(diào)用例程的使用者提供更多的信息。.5 名稱的沖突當(dāng)使用擁有兩個名稱相同的例程的兩個單元時,如果你調(diào)用該例程時,在uses子句中排在后面的單元中的例程將會被調(diào)用。為了解決這種“在uses子句上的模糊”沖突,要在調(diào)用該例程時寫上相關(guān)的單元的前綴,例如: sysUtile.FindClose(SR);或 windows.FindClose(Handle);3.4 變量 變量的命名和格式變量的命名應(yīng)以使用
12、它們的目的相符循環(huán)控制變量應(yīng)采用一個單獨的字符作為名字,比如 I,J,或K,也可以采用更加有意義的名字,比如 UserIndex。邏輯變量的名字應(yīng)能充分表達準(zhǔn)確的真或假的意思。 局部變量一個過程中的局部變量應(yīng)遵循所有其它變量的使用和命名約定。臨時變量的取名應(yīng)合理。如果必須的話,在一進入例程就應(yīng)初始化局部變量。局部的AnsiString變量會自動初始化為一個空的字符串。局部接口和派分接口類型變量將會自動初始化為nil,并且局部變數(shù)和ole變數(shù)類型變量會自動初始化為Unassigned 全局變量的使用使用全局變量是不推薦的。但是,在某些時候還是必須使用,而且它們也只應(yīng)在必須使用的時候才使用。在這種
13、時候,你應(yīng)努力只在一段上下文范圍內(nèi)使用全局變量。例如,一個全局變量只應(yīng)在一個單元的implemntation部分內(nèi)是全局的。如果打算在多個單元類使用全局數(shù)據(jù),你應(yīng)將它們移到一個公共的單元中然后被其它所有單元使用。全局變量可以在var子句中直接初始化為一個值。記住,所有的全局數(shù)據(jù)會自動初始化為0,因此不要將全局變量初始化為一個“空”值比如 0、nil、Unassigned、等等。這樣做的一個理由是因為零初始化的全局數(shù)據(jù)在exe文件中不會占據(jù)任何空間。零初始化數(shù)據(jù)被存儲在一個虛擬的數(shù)據(jù)段,它在應(yīng)用程序啟動后被分配在一段內(nèi)存中。非零初始化的全局數(shù)據(jù)在硬盤的exe文件占用空間。3.5 類型 大寫約定如
14、果類型的名字是保留字,那么它應(yīng)全部小寫。Win32 API類型通常全部大寫,并且你必須遵循在Windows.pas或其他API單元中的詳細類型名稱的約定。對于其他變量名字,地一個字母應(yīng)為大寫,而其他字母應(yīng)錯落有致。下面是一些例子: var MyString : string; /保留字 WindowHandle : HWND; /Win32 API 類型 I : Integer; /在System單元中引進的類型標(biāo)識符.1 浮點指針類型不推薦使用Real類型,因為它的存在只是為了向前兼容早期的Pascal代碼。在通常情況下用Double來實現(xiàn)浮點指針的需要。并且,Double對處理器和總線而言
15、是做了最優(yōu)化處理的,它也是IEEE中定義的標(biāo)準(zhǔn)數(shù)據(jù)格式。只有當(dāng)需要的范圍超出Double所定義的范圍時才使用Extended。Extended是intel定義的類型且在Java中不支持。只有當(dāng)浮點指針變量的實際字節(jié)大小有其意義時才使用Single。(比如當(dāng)使用另一種語言的DLLs時)。.2 枚舉類型枚舉類型的名字需符合使用該類型的目的。該類型的名字需以字符T為前綴,以表明這是一個類型。枚舉類型中的標(biāo)識符列表必須包含兩個或三個字符的前綴來對應(yīng)于該枚舉類型的名字 例如: TsongType = (stRock, stClassical, stCountry, stAlternative, stHe
16、avyMetal, stRB);一個枚舉類型的實例的名字應(yīng)與不要前綴的枚舉類型(SongType)相同,除非有更好的原因來賦予該變量更特殊的名字,比如:FavoriteSongType1,FavoriteSongType2 等等。.3 變數(shù)和ole變數(shù)類型通常不建議使用變數(shù)和Ole變數(shù)類型。但在只有運行時刻才能知道數(shù)據(jù)類型的程序中必須使用該類型,這種情形多出現(xiàn)在COM和數(shù)據(jù)庫開發(fā)中。Ole變數(shù)使用在以COM為基礎(chǔ)的編程中例如自動化和ActiveX控制,而變數(shù)使用在非COM的編程中,這是因為變數(shù)可以十分有效地存儲本地Delphi字符串(同一個字符串變量一樣),但Ole變數(shù)會將所有的字符串轉(zhuǎn)換為O
17、le字符串(WideChar 字符串)并且并不實例運算 它們永遠拷貝。 結(jié)構(gòu)類型.1 數(shù)組類型數(shù)組類型的名字需符合它們使用的目的。該類型的名字必須加以前綴T。如果須聲明該數(shù)組類型的指針,那么該指針需加以前綴P而且應(yīng)立即聲明在該數(shù)組聲明的前面。例如: type PCycleArray = TCycleArray; TCycleArray = array1.100 of integer;在實際應(yīng)用中,數(shù)組的變量實例的名稱應(yīng)是其類型的名字去掉前綴T。.2 記錄類型記錄類型的名字應(yīng)符合使用它們的目的。其類型的聲明應(yīng)加以前綴T。如果要聲明該記錄類型的指針,就應(yīng)加以前綴P并且應(yīng)緊靠在類型聲明的前面聲明。例
18、如: type PEmployee = TEmployee; TEmployee = record EmployeeName : string; EmployeeRate : Double; end;3.6 語句 if 語句在if/then/else語句中最常發(fā)生的行為應(yīng)放在then子句中,而其它發(fā)生可能性較小的行為應(yīng)放在else子句中。盡量避免使用嵌套的if語句,在這種情形下應(yīng)用多個if語句來判斷各種可能。不要使用if嵌套超過五級深度。應(yīng)使代碼編寫得更加清晰、明了。不要在if語句中使用不必要的圓括號。如果在if語句中有多個條件需測試,這些條件應(yīng)按計算強度由少到多的順序從左到右排列。這樣做能使
19、編譯器在編譯代碼時獲得布爾估算邏輯的捷徑,從而使你的代碼獲得最佳的優(yōu)化。舉例來說,如果條件1快過條件2,而條件2快過條件3,那么在if語句中的排列應(yīng)是: if 條件1 and 條件2 and 條件3 then case 語句.1 一般性話題在一個case語句中的各個獨立的單元應(yīng)以數(shù)字或字母順序排列。每一個case單元的動作行為應(yīng)保持簡單而不應(yīng)該超過四到五行代碼。如果所要執(zhí)行的動作過于復(fù)雜應(yīng)采用獨立的過程或函數(shù)。Case語句中的else子句只有當(dāng)需要缺省行為或處理錯誤時才使用。.2 格式case語句應(yīng)遵循其它結(jié)構(gòu)的縮格和命名約定。 while 語句在一個while語句中不建議使用exit過程來跳
20、出循環(huán),盡量僅使用循環(huán)條件來跳出循環(huán)。在一個while循環(huán)中所用的初始化代碼應(yīng)緊靠在進入while循環(huán)前面出現(xiàn)而不要被其它不相關(guān)的語句隔開。任何結(jié)束后的處理應(yīng)在循環(huán)之后立即進行。 for 語句for語句只有當(dāng)循環(huán)次數(shù)已知的情況下才能取代while語句使用。 repeat 語句repeat語句的使用同while語句一樣,并且遵循同樣的通用方針。 with 語句.1 一般話題with語句應(yīng)節(jié)省使用,并且?guī)в写罅康木妗1苊膺^度使用with語句并且在with語句中小心使用多個對象、記錄等等。例如: with Record1, Record2 do這些事情會使程序員感到困惑并難以發(fā)現(xiàn)問題所在。.2 格
21、式with 語句遵循本文檔所說明的命名約定和縮格的格式規(guī)則。3.7 結(jié)構(gòu)異常處理 一般話題異常的處理大量地使用在錯誤糾正和資源保護方面。這就是說一旦資源被分配,一個try.finally必需加以使用來保證該資源被正確的釋放。這種異常的保護也是指在一個單元的initializition/finalization或一個對象的constructor/destructor中進行資源的分配和釋放。 try.finally的使用任何情形下,每一次的分配都應(yīng)跟隨一個try.finally。舉例來說,下面的代碼會造成可能的錯誤: SomeClass1 := TsomeClass.Create; SomeCla
22、ss2 ;= TsomeClass.Create; try do some code finally SomeClass1.Free; SomeClass2.Free; end;一個更安全更合適的分配過程應(yīng)是: SomeClass1 := TSomeClass.Create; try SomeClass2 := TsomeClass.Create; try do some code finally SomeClass2.Free; end; finally SomeClass1.Free; end; try.except的使用只有當(dāng)在異常被觸發(fā)而你想執(zhí)行一些任務(wù)時才使用try.except。通
23、常,你沒有必要為了只是簡單地在屏幕上顯示一個錯誤信息而使用try.except語句,因為這會被Application對象自動執(zhí)行。如果你想在except子句中執(zhí)行完一些任務(wù)之后調(diào)用缺省的異常處理,使用raise來重新觸發(fā)異常到下一個句柄。 try.except.else的使用try.except中的else子句不建議使用,因為它會打斷所有的異常包括那些你沒有準(zhǔn)備的異常。3.8 類類型 命名和格式類類型的名稱應(yīng)符合使用它們的目的。類型名字應(yīng)加以前綴T以表明這是一個類型的定義 例如:type Tcustomer = class(TObject)類型的實例通常是沒有前綴T的類型的名字 例如:var
24、Customer :Tcustomer;注意:查閱“構(gòu)件類型的命名標(biāo)準(zhǔn)”來獲得更多有關(guān)構(gòu)件命名的信息。 域.1 命名/格式類的域名遵循與變量標(biāo)識符同樣的約定除了它們應(yīng)以F為前綴,來表明這是一個域的名稱。.2 可視化所有的域都必需是私有的。想在類的范圍之外存取域得通過屬性來使用。 方法.1 命名/格式方法的命名應(yīng)遵循本文檔中有關(guān)過程和函數(shù)的約定敘述。.2 使用靜態(tài)的方法如果使用一個靜態(tài)的方法,那么該方法就不能被該類的后代類所繼承。.3 使用虛擬/動態(tài)的方法如果你打算該類的方法能被后代的類所繼承就得使用虛擬的方法。只有在該方法有多個繼承時(直接的或間接的)才使用動態(tài)的方法。例如,一個類類型包含一個
25、可繼承的方法,而100個后代類要繼承這種方法,那么這個方法就會動態(tài)地產(chǎn)生為100個后代類使用的內(nèi)存。.4 使用抽象的方法如果在一個類中使用抽象的方法,該類就不能被創(chuàng)建。只有在那些永遠不會被創(chuàng)建的類中使用抽象的方法。.5 屬性存取方法所有存取類的方法都只能出現(xiàn)在類的private或protected部分。屬性存取方法的命名應(yīng)遵循過程和函數(shù)的約定規(guī)則。讀取存取方法(方法讀取器)必需以單詞Get為前綴。寫入存取方法(方法寫入器)必需以單詞Set為前綴。方法寫入器的參數(shù)的名字應(yīng)為Value,并且它的類型應(yīng)是它所操作的屬性的類型。例如: TSomeClass = class(TObject) priva
26、te FsomeField : Integer; protected function GetSomeField : Integer; procedure SetSomeField(Value : Integer); public property SomeField : Integer read GetSomeField write SetSomeField; end; 屬性.1 命名/格式屬性如果是表示為一個私有域的存取器的話,那么它的名字應(yīng)是它們所操作的域的名字除去解釋符F。屬性的名字應(yīng)是名詞,不是動詞。屬性表示的是數(shù)據(jù),而方法表示的是行為。數(shù)組類型的名稱應(yīng)為復(fù)數(shù)。一般情況下屬性的名稱應(yīng)
27、為單數(shù)。.2 使用存取的方法盡管沒有要求,但還是建議盡量少地為一個表示私有域的屬性而使用寫入存取方法。四、文件4.1 工程文件 命名工程文件應(yīng)取個描述性的名字。例如,Delphi 4開發(fā)者指南錯誤管理器 的工程名字是:DDGBugs.dpr。一個有關(guān)系統(tǒng)信息的程序的名字就應(yīng)象 SysInfo.dpr。4.2 窗體文件 命名一個窗體文件的取名應(yīng)可以描述使用該窗體的目的,并加以后綴Frm。例如,一個“關(guān)于”的窗體的文件名應(yīng)是AboutFrm.dpr。主窗體的文件名應(yīng)是MainFrm.dpr。4.3 數(shù)據(jù)模板文件 命名數(shù)據(jù)模板的取名應(yīng)能表示使用該數(shù)據(jù)模板的目的,它的名稱應(yīng)加以兩個字符的后綴DM。例如
28、,自定義數(shù)據(jù)模板的文件名字應(yīng)為CustomersDM.dfm。4.4 遠端數(shù)據(jù)模板文件 命名遠端數(shù)據(jù)模板的取名應(yīng)能表示使用該遠端數(shù)據(jù)模板的目的,它的名稱應(yīng)加以三個字符的后綴RDM。例如,自定義遠端數(shù)據(jù)模板的文件名字應(yīng)為CustomersRDM.dfm。4.5 Unit文件 通用Unit結(jié)構(gòu).1 unit的名字Unit文件應(yīng)取一個可描述性的名字。例如,包含應(yīng)用程序主窗體的單元應(yīng)叫做MainFrm.pas。.2 uses子句在interface部分的uses子句應(yīng)包含在interface部分中的代碼所需要的單元。去掉那些Delphi可以自動加入到程序中的單元。在implementation部分的u
29、ses子句應(yīng)只包含在implementation部分中的代碼所需要的單元的名字。去掉不必要的單元。.3 interface部分interface部分應(yīng)包含只那些其它單元所需要存取類型的定義、變量、過程/函數(shù)的預(yù)定義等等。否則,就應(yīng)放在implementation部分定義。.4 implementation部分implementation部分應(yīng)包含那些只在本單元中私用的類型定義、變量、過程/函數(shù)定義等等。.5 initialization部分不要在initialization 部分放入耗時長的代碼,這將使程序的第一個界面出現(xiàn)得比較緩慢。.6 finalization部分在這里要保證釋放你在Ini
30、tialization部分所分配的任何資源。 窗體單元.1 命名一個窗體的單元文件應(yīng)擁有與它所對應(yīng)的窗體文件同樣的名稱。例如,“關(guān)于”窗體的單元名稱應(yīng)為 AboutFrm.pas,而主窗體的單元名稱應(yīng)為MainFrm.pas。 數(shù)據(jù)模板單元.1 命名一個數(shù)據(jù)模板的單元文件應(yīng)擁有與它所對應(yīng)的數(shù)據(jù)模板文件同樣的名稱。例如,一個自定義數(shù)據(jù)模板單元的名稱應(yīng)為CustomersDM.pas。 一般目的單元.1 命名一般目的單元的取名應(yīng)符合使用該單元的目的。例如,一個實用程序單元取名為BugUtilities.pas。一個包含全局變量的單元取名為CustomerGlobals.pas。注意,該單元的名字不
31、能與它的工程中所使用的所有包中的單元的名字相同。不贊成使用一般的或通用的單元名字。 構(gòu)件單元.1 命名構(gòu)件單元應(yīng)放在獨立的目錄,以將它們同定義構(gòu)件組或構(gòu)件集合的單元區(qū)分開來。它們要永遠同工程在不同的目錄。單元名字應(yīng)同它們的內(nèi)容相符。注意:查閱“用戶定義的構(gòu)件”部分來獲得更多有關(guān)構(gòu)件命名標(biāo)準(zhǔn)的信息。4.6 文件頭建議在所有源文件、工程文件、單元等等中使用信息化文件頭。一個良好的文件頭應(yīng)包含以下信息: 版權(quán). 著作的年、月、日.五、窗體和數(shù)據(jù)模板5.1 窗體 窗體類型命名標(biāo)準(zhǔn)窗體類型的取名應(yīng)能表達使用該窗體的目的。類型定義應(yīng)加以前綴T。前綴后面跟隨著描述性的名字。最后,應(yīng)加以Form后綴來描述名字
32、。例如,一個“關(guān)于”的窗體的類型的名字應(yīng)為: TAboutFrom = class(TForm);主窗體的定義為: TMainForm = class(TForm);一個用戶接入窗體的名字應(yīng)象: TCustomerEntryForm = class(TForm); 窗體實例命名標(biāo)準(zhǔn)窗體實例應(yīng)是沒有帶前綴T的相應(yīng)類的名字。例如,對應(yīng)于前面窗體類型而言,其實例的名字應(yīng)為: 類型名稱 實例名稱 TAboutForm AboutForm TMainForm MainForm TCustomerEntryForm CustomerEntryForm 自動創(chuàng)建窗體只有主窗體可以是自動創(chuàng)建的除非有其它更好的
33、理由不這樣做。所有其它的窗體必需從工程選項對話框中的自動創(chuàng)建列表中移走。查閱以下部分來獲得更多的信息。 模式窗體實例化函數(shù)所有的窗體單元都應(yīng)包含一個窗體實例化函數(shù),該函數(shù)用來創(chuàng)建、設(shè)置、模式地顯示窗體,并釋放窗體。該函數(shù)應(yīng)返回窗體的模式結(jié)果。該函數(shù)要傳遞的參數(shù)應(yīng)遵循本文檔指定的“參數(shù)傳遞”標(biāo)準(zhǔn)。通過這種方式封裝的函數(shù)性有助于代碼的再利用和維護。該窗體的變量要從單元中移走,并再窗體實例的函數(shù)中進行本地式地定義。注意,這就意味著該窗體必需從工程/選項對話框中的自動創(chuàng)建列表中剔除。參考本文檔后面的“自動創(chuàng)建窗體”。例如,下面的單元展示了再GetUserData窗體中的一個函數(shù)。 unit UserD
34、ataFrm; interface useswindows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls; type TUserDataForm = class(TForm) edtUserName : TEdit; edtUserID : TEdit; private Private declarations public Public declarations end; function GetUserData(var aUserName : String; var aUserID : I
35、nteger) : Word; implementation $R *.DFM function GetUserData(var aUserName : String; var aUserID : Integer) : word; var UserDataForm : TuserDataForm; begin UserDataForm := TuserDataForm.Create(Application); try UserDataForm.Caption := Getting User Data; Result := UserDataForm.ShowModal; if (Result =
36、 mrOK) then begin end; finally UserDataForm.Free; end; end; end.5.2 數(shù)據(jù)模板 數(shù)據(jù)模板命名標(biāo)準(zhǔn)數(shù)據(jù)模板的取名要符合使用該數(shù)據(jù)模板的目的。類型的定義應(yīng)加以前綴T,后面緊接著描述性的名字,最后要加以后綴單詞“DataModule”。例如,一個自定義的數(shù)據(jù)模板有時候應(yīng)該象: TCustomerDataModule = class(TDataModule)一個命令式的數(shù)據(jù)模板的名字應(yīng)象: TOrdersDataModule = class(TDataModule) 數(shù)據(jù)模板實例命名標(biāo)準(zhǔn)數(shù)據(jù)模板實例的名稱應(yīng)是對應(yīng)不帶前綴T的類型的名稱。
37、例如,對于前面的窗體類型而言,其實例的名稱應(yīng)為: 類型名稱 實例名稱 TCustomerDataModule CustomerDataModule TOrdersDataModule OrdersDataModule六、包6.1 使用運行包和設(shè)計包的比較運行時刻的包應(yīng)只包含其它構(gòu)件包所要求的單元或構(gòu)件。另外,包含屬性/構(gòu)件編輯器和其它只為設(shè)計的代碼應(yīng)放入到設(shè)計時刻包中。注冊單元應(yīng)放在設(shè)計包中。6.2 文件命名標(biāo)準(zhǔn)包的名稱應(yīng)依照下面的例子:“iiilibvv.pkg” 設(shè)計時刻包“iiistdvv.pkg” 運行時刻包字符“iii”表示一個3字符標(biāo)識前綴。這個前綴用來表明公司、個人或其它有標(biāo)識意
38、義的實體。字符“vv”表示為該包想要對應(yīng)Delphi某個版本的包的版本號。注意,包的名字中包含“l(fā)ib”或“std”的意思是表明這是一個設(shè)計時刻包還是一個運行時刻包。如果既是設(shè)計時刻包又是運行時刻包,該文件的命名是同上面一樣的,例如,為Delphi 4開發(fā)者指南做的包的名稱應(yīng)為:DdgLib40.pkg - 設(shè)計時刻包DdgStd40.pkg - 運行時刻包七、構(gòu)件7.1 用戶自定義構(gòu)件在標(biāo)準(zhǔn)構(gòu)件中命名出來的構(gòu)件的名稱同在“類類型”部分定義中的一樣定義成一個類類型,不同的是它們有一個3字符的指示前綴,這個前綴可以表示公司、個人或其它實體。例如,一個為Delphi 4開發(fā)者指南編寫的時鐘構(gòu)件的名
39、稱定義為: TddgClock = class(TComponent)注意,那三個前綴字符是小寫的。7.2 構(gòu)件單元構(gòu)件單元應(yīng)只包含一個主要的構(gòu)件,一個主要的構(gòu)件是指出現(xiàn)在構(gòu)件欄中的構(gòu)件。主要構(gòu)件的輔助構(gòu)件/對象應(yīng)放入到同一個單元中。7.3 使用注冊單元構(gòu)件的注冊過程應(yīng)從構(gòu)件本身的單元中剔除,并放入到一個獨立的單元中。這個注冊單元可以用來注冊任何構(gòu)件、屬性編輯器、構(gòu)件編輯器、專家器等。構(gòu)件的注冊只應(yīng)在設(shè)計時刻包中進行,注冊單元應(yīng)包含在設(shè)計時刻包中而不應(yīng)放在運行時刻包中。推薦使用的注冊單元的名稱是:XxxReg.pas上面的3個前綴字符“Xxx”用來表示一個公司、個人或任何其它的實體。例如,在D
40、elphi 開發(fā)者指南中的注冊單元的名稱應(yīng)為 DdgReg.pas。7.4 構(gòu)件實例命名約定所有的構(gòu)件都應(yīng)取個描述性的名稱。由Delphi創(chuàng)建的缺省名的構(gòu)件不會被遺棄。在設(shè)計構(gòu)件類型時應(yīng)設(shè)計一個小寫的前綴。使用前綴而不使用后綴的原因是在搜尋時,在對象檢查器和代碼探索器中搜尋構(gòu)件的名字比搜尋構(gòu)件的類型更容易實現(xiàn)。7.5 構(gòu)件的前綴以下構(gòu)件的前綴可以用來設(shè)計Delphi 4中的標(biāo)準(zhǔn)構(gòu)件。請在此列表中加入第三方構(gòu)件的前綴。7.6 Standard頁前綴 構(gòu)件mm TMainMenupm TPopupMenummi TMainMenuItempmi TPopupMenuItem前綴 構(gòu)件lbl TLa
41、beledt TEditmem TMemobtn TButtoncb TCheckBoxrb TRadioBoxlb TListBoxcb TComboBoxscb TScrollBargb TGroupBoxrg TRadioGrouppnl TPanelcl TCommandList7.7 Additional頁bbtn TBitBtnsb TSpeedButtonme TMaskEditsg TStringGriddg TDrawGridimg TImageshp TShapebvl TBevelsbx TScrollBoxclb TCheckListboxspl TSplitterst
42、x TStaticTextcht TChart7.8 Win32頁tbc TTabControlpgc TPageControlil TImageListre TRichEditthr TTrackBarprb TProgressBarud TUpDownhk THotKeyani TAnimatedtp TDateTimePickertv TTreeViewlv TListViewhdr THeaderControl前綴 構(gòu)件stb TStatusBartlb TToolBarclb TCoolBar7.9 System頁tm TTimerpb TPaintBoxmp TMediaPlaye
43、rolec TOleContainerddcc TDDEClientItemddci TDDEClientItemddsc TDDEServerConvddsi TDDEServerItem7.10 Internet頁csk TClientSocketssk TServerSocketwbd TWebDispatcherpp TPageProducertp TQueryTableProducerdstp TDataSetTableProducernmdt TNMDayTimenec TNMEchonf TNMFingernftp TNMFtpnhttp TNMHttpnMsg TNMMsgnm
44、sg TNMMSGServnntp TNMNNTPnpop TNMPop3nuup TNMUUProcessorsmtp TNMSMTPnst TNMStrmnsts TNMStrmServntm TNMTimenudp TNMUdppsk TPowerSockngs TNMGeneralServerhtml THtmlurl TNMUrlsml TSimpleMail7.11 Data Access頁前綴 構(gòu)件ds TDataSourcetbl TTableqry TQuerysp TStoredProcdb TDataBasessn TSessionbm TBatchMoveusql TUpdateSQL7.12 Data Controls頁dbg TDBGriddbn TDBNavigatordbt TDBTextdbe TDBEditdbm TDBMe
溫馨提示
- 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度水利工程建設(shè)承包合同范本4篇
- 二零二五美容院美容院加盟店經(jīng)營管理指導(dǎo)合同4篇
- 2025版信用卡擔(dān)保合約單位卡(消費優(yōu)惠活動)3篇
- 二零二五版預(yù)應(yīng)力鋼筋采購合同參考范本2篇
- 2025版模具制造企業(yè)能源管理與節(jié)能改造合同3篇
- 東部新區(qū)南骨干機房(2024版)合同3篇
- 2025年度按摩技師健康產(chǎn)品代理承包協(xié)議3篇
- 2025年度網(wǎng)絡(luò)直播營銷與現(xiàn)場活動策劃一體化合同4篇
- CNG車輛維護與安全檢修合同(2024年版)
- 2025年度新能源汽車大客戶銷售協(xié)議3篇
- 藥學(xué)技能競賽標(biāo)準(zhǔn)答案與評分細則處方
- 2025屆高考英語 716個閱讀理解高頻詞清單
- 報建協(xié)議書模板
- 汽車配件購銷合同范文
- 貴州省2024年中考英語真題(含答案)
- 施工項目平移合同范本
- (高清版)JTGT 3360-01-2018 公路橋梁抗風(fēng)設(shè)計規(guī)范
- 胰島素注射的護理
- 云南省普通高中學(xué)生綜合素質(zhì)評價-基本素質(zhì)評價表
- 2024年消防產(chǎn)品項目營銷策劃方案
- 聞道課件播放器
評論
0/150
提交評論