亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > Delphi > 正文

delphi代碼標(biāo)準(zhǔn)文檔

2019-11-18 18:43:02
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
 

1.前言

  本文檔主要是為Delphi開發(fā)人員提供一個(gè)源代碼書寫標(biāo)準(zhǔn),以及程序和文件的命名標(biāo)準(zhǔn),使他們?cè)诰幊虝r(shí)有一致格式可遵循。這樣,每個(gè)編程人員編寫的代碼能夠被其他人理解。


2.源程序書寫規(guī)范

2.1.通用源代碼格式規(guī)則

1). 縮進(jìn)

  縮進(jìn)就是每級(jí)間有兩個(gè)空格。不要在源代碼中放置制表符。這是因?yàn)?,制表符的寬度隨著不同的設(shè)置和代碼管理實(shí)用程序(打印、文檔及版本控制等)而不同。

  通過使用Tools|Environment 菜單,在Environment Options 對(duì)話框的General頁(yè)上,不要選中Use Tab Character 和Optional Fill 復(fù)選框,這樣,制表符就不會(huì)被保存。

2). 邊距

  邊距設(shè)置為80個(gè)字符。源代碼一般不會(huì)因?qū)懸粋€(gè)單詞而超過邊距,但本規(guī)則比較靈活。只要可能,長(zhǎng)度超過一行的語(yǔ)句應(yīng)當(dāng)用逗號(hào)或運(yùn)算符換行。換行后,應(yīng)縮進(jìn)兩個(gè)字符。

3). begin...end 語(yǔ)句

begin 語(yǔ)句必須單獨(dú)占一行。例如,下面第一行是錯(cuò)誤的,而第二行正確:

for i:=0 to 10 do begin // 錯(cuò), begin 與f o r 在同一行

for i:=0 to 10 do // 對(duì), begin 在另外一行中
begin

本規(guī)則的一個(gè)特殊情況是,當(dāng)begin 為else 語(yǔ)句的一部分時(shí),例如:

if some statement = then
begin
  . . .
end
else begin
  Some Other Statement;
end;

注意:end 語(yǔ)句總單獨(dú)一行。當(dāng)begin 不為else 語(yǔ)句的一部分時(shí),相應(yīng)的end 語(yǔ)句與begin 語(yǔ)句的縮進(jìn)量相同。

4).注釋

  我們通常使用“{...}”類型的塊注釋,以前的“(*...*)”類型的塊注釋用于臨時(shí)注釋掉暫不使用的代碼,從Delphi 2開始支持“//”行注釋,如果決定不在支持Delphi 2.0以下的版本,可以使用“//”注釋。

2.2.Object Pascal語(yǔ)句格式語(yǔ)句書寫規(guī)范與用法

1). 括號(hào)

  在左括號(hào)與下一字符之間沒有空格。同樣,右括號(hào)與前一字符也沒有空格。下面的例子演示了正確與不正確的空格。

CallPRoc( Aparameter ); // 錯(cuò)!
CallProc(Aparameter); // 正確!

  不要在語(yǔ)句中包含多余的括號(hào)。在源代碼中,括號(hào)只有在確實(shí)需要時(shí)才使用。下面的例子演示了正確與不正確用法:

if (I=42) then // 錯(cuò),括號(hào)是多余的
if (I=42) or (J=42) then // 正確,必須使用括號(hào)

2). 保留字和關(guān)鍵字

  Object Pascal 語(yǔ)言的保留字和關(guān)鍵字總是完全的小寫。下面是Delphi 5保留字列表:

and

array

as

asm

begin

case

class

const

constructor

destructor

dispinterface

div

do

downto

else

end

except

exports

file

finalization

finally

for

function

goto

if

implementation

in

inherited

initialization

inline

interface

is

label

library

mod

nil

not

object

of

or

out

packed

procedure

program

property

raise

record

repeat

resourcestring

set

shl

shr

string

then

threadvar

to

try

type

unit

until

uses

var

while

with

xor

private

protected

public

publishedautomated  

 

3). 過程和函數(shù)

(1). 格式

  過程名應(yīng)當(dāng)以大寫字母開始,且大小寫交錯(cuò)以增加可讀性。下面是一個(gè)不正確的寫法:

procedure thisisapoorlyformattedroutinename;

改成這樣寫就對(duì)了:

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)作為第一個(gè)參數(shù),按使用頻率依次從左到右排。輸入?yún)?shù)位于輸出參數(shù)之前。范圍大的參數(shù)應(yīng)當(dāng)放在范圍小的參數(shù)之前。例如:

SomeProc(aPlanet, aContinent, aCountry, aState, aCity).

  有些則例外。例如,在事件處理過程中,TObject 類型的Sender 參數(shù)往往是第一個(gè)要傳遞的參數(shù)。

(3) 常量參數(shù)

  要使記錄、數(shù)組、短字符串或接口類型的參數(shù)不能被過程修改,就應(yīng)當(dāng)把形參標(biāo)以Const 。這樣,編譯器將以最有效的方式生成代碼,保證傳遞的參數(shù)不可變。

  如果其他類型的參數(shù)希望不被過程所修改,也可以標(biāo)上Const 。盡管這對(duì)效率沒有影響,但這給過程的調(diào)用者帶來(lái)了更多的信息。

4). 變量

(1). 局部變量

  局部變量用于過程內(nèi)部,果需要的話,應(yīng)當(dāng)在過程的入口處立即初始化變量。局部的AnsiString 類型的變量自動(dòng)被初始化為空字符串,局部的接口和dispinterface類型的變量自動(dòng)被初始化為nil,局部的Variant和OleVariant類型的變量自動(dòng)被初始化為Unassigned。

(2). 全局變量

  一般不鼓勵(lì)使用全局變量。不過,有時(shí)候需要用到。即使如此,也應(yīng)當(dāng)把全局變量限制在需要的環(huán)境中。例如,一個(gè)全局變量可能只在單元的實(shí)現(xiàn)部分是全局的。

  全局?jǐn)?shù)據(jù)如果將由許多單元使用,就應(yīng)移動(dòng)到一個(gè)公用單元里被所有對(duì)象使用。全局?jǐn)?shù)據(jù)可在聲明時(shí)直接初始化為一個(gè)值。注意,所有全局變量自動(dòng)進(jìn)行零初始化,因此,不要將全局變量初始化為諸如0 、nil、或Unassigned等空值。零初始化的全局變量在.EXE文件中不占空間。零初始化的數(shù)據(jù)保存在虛擬的數(shù)據(jù)段中,而虛擬數(shù)據(jù)段只在應(yīng)用程序啟動(dòng)時(shí)才分配內(nèi)存。非零初始化的全局?jǐn)?shù)據(jù)則在.EXE文件中占空間。

5). 類型

(1). 大小寫規(guī)則

  類型標(biāo)識(shí)符是保留字,應(yīng)當(dāng)全部小寫。Win32 API 類型常常全部大寫,并且遵循諸如Windows.pas或其他API單元中關(guān)于特定類型名的規(guī)則。對(duì)于其他變量名,第一個(gè)字母應(yīng)大寫,其他字母則大小寫交錯(cuò)。下面是一些例子:

var
  MyString: string; // 保留字
  WindowsHandle: HWND; // Win32 API 類型
  I: Integer; //在System單元中引入的類型標(biāo)識(shí)

(2). 浮點(diǎn)型

  不鼓勵(lì)使用Real類型,因?yàn)樗皇菫榱伺c老的Pascal代碼兼容而保留的。通常情況下,對(duì)于浮點(diǎn)數(shù)應(yīng)當(dāng)使用Double。Double可被處理器優(yōu)化,是IEEE定義的標(biāo)準(zhǔn)的數(shù)據(jù)格式。當(dāng)需要比Double提供的范圍更大時(shí),可以使用Extend。Extend是intel專用的類型,java不支持。當(dāng)浮點(diǎn)變量的物理字節(jié)數(shù)很重要時(shí)(可能使用其他語(yǔ)言編寫DLL),則應(yīng)當(dāng)使用Single。

(3).Variant和OleVariant

  一般不建議使用Variant和OleVariant。但是,當(dāng)數(shù)據(jù)類型只有在運(yùn)行期才知道時(shí)(常常是在COM和數(shù)據(jù)庫(kù)應(yīng)用的程序中),這兩個(gè)類型對(duì)編程就有必要。當(dāng)進(jìn)行諸如自動(dòng)化ActiveX控件的COM編程時(shí),應(yīng)當(dāng)使用OleVariant;而對(duì)于非COM編程,則應(yīng)當(dāng)使用Variant。這是因?yàn)椋琕ariant能夠有效地保存Delphi的原生字符串,而OleVariant則將所有字符串轉(zhuǎn)換為OLE字符串(即WideChar字符串),且沒有引用計(jì)數(shù)功能。

6). 語(yǔ)句

(1). If 語(yǔ)句

  在if/then/else語(yǔ)句中,最有可能執(zhí)行的情況應(yīng)放在then子句中,不太可能的情況放在else子句中。為了避免出現(xiàn)許多if語(yǔ)句,可以使用case語(yǔ)句代替。如果多于5級(jí),不要使用if語(yǔ)句。請(qǐng)改用更清楚的方法。不要在if語(yǔ)句中使用多余的括號(hào)。

  如果在if語(yǔ)句中有多個(gè)條件要測(cè)試,應(yīng)按照計(jì)算的復(fù)雜程度從右向左排。這樣,可以使代碼充分利用編譯器的短路估算邏輯。例如,如果Condition1比Condition2快,Condition2比Condition3快,則if語(yǔ)句一般應(yīng)這樣構(gòu)造:

if Condition1 and Condition2 and Condition3 then

  如果Condition3為False的機(jī)會(huì)很大,利用短路估算邏輯,我們也可以將Condition3放在最前面:

if Condition3 and Condition1 and Condition2 then

(2). case 語(yǔ)句

(1) 概述

  case語(yǔ)句中每種情況的常量應(yīng)當(dāng)按數(shù)字或字母的順序排列。每種情況的動(dòng)作語(yǔ)句應(yīng)當(dāng)簡(jiǎn)短且通常不超過4 - 5 行代碼。如果動(dòng)作太復(fù)雜,應(yīng)將代碼單獨(dú)放在一個(gè)過程或函數(shù)中。Case語(yǔ)句的else子句只用于默認(rèn)情況或錯(cuò)誤檢測(cè)。

(2) 格式

  case語(yǔ)句遵循一般的縮進(jìn)和命名規(guī)則。

(3). while 語(yǔ)句

  建議不要使用Exit過程來(lái)退出while循環(huán)。如果需要的話,應(yīng)當(dāng)使用循環(huán)條件退出循環(huán)。所有對(duì)while循環(huán)進(jìn)行初始化的代碼應(yīng)當(dāng)位于while入口前,且不要被無(wú)關(guān)的語(yǔ)句隔開。任何業(yè)務(wù)的輔助工作都應(yīng)在循環(huán)后立即進(jìn)行。

(4). for 語(yǔ)句

  如果循環(huán)次數(shù)是確定的,應(yīng)當(dāng)用for語(yǔ)句代替while語(yǔ)句。

(5). repeat 語(yǔ)句

  repeat語(yǔ)句類似于while循環(huán),且遵循同樣的規(guī)則。

(6). with 語(yǔ)句

(1) 概述

  with語(yǔ)句應(yīng)小心使用。要避免過度使用with語(yǔ)句,尤其是在with語(yǔ)句中使用多個(gè)對(duì)象或記錄。例如:

with Record1,Record2 do

  這些情況很容易迷惑編程人員,且導(dǎo)致調(diào)試?yán)щy。

(2) 格式

  with語(yǔ)句也遵循本章關(guān)于命名和縮進(jìn)的規(guī)則。

7). 結(jié)構(gòu)化異常處理

(1). 概述

  異常處理主要用于糾正錯(cuò)誤和保護(hù)資源。這意味著,凡是分配資源的地方,都必須使用try...finally來(lái)保證資源得到釋放。不過,如果是在單元的初始/結(jié)束部分或者對(duì)象的構(gòu)造器/析構(gòu)器中來(lái)分配/釋放資源則例外。

(2). try...finally的用法

  在可能的情況下,每個(gè)資源分配應(yīng)當(dāng)與try...finally結(jié)構(gòu)匹配,例如,下面代碼可能導(dǎo)致錯(cuò)誤:

SomeClass1 := TSomeClass.Create;
SomeClass2 := TSomeClass.Create;
try
  { do some code }
finally
  SomeClass1.Free;
  SomeClass2.Free;
end;

  上述資源分配的一個(gè)安全方案是:

SomeClass1 := TSomeClass.Create;
try
  SomeClass2 := TSomeClass.Create;
  try
    { do some code }
  finally
    SomeClass2.Free;
  end;
finally
  SomeClass1.Free;
end;

(3). try...except的用法

  如果你希望在發(fā)生異常時(shí)執(zhí)行一些任務(wù),可以使用try...except。通常,沒有必要為了簡(jiǎn)單地顯示一個(gè)錯(cuò)誤信息而使用try...except,因?yàn)?a href="http://www.49028c.com/tag-9.html">application對(duì)象能夠自動(dòng)根據(jù)上下文做到這一點(diǎn)。如果要在子句中激活默認(rèn)的異常處理,可以再次觸發(fā)異常。

(4). try...except...else的用法

  不鼓勵(lì)使用帶else子句的try...except,因?yàn)檫@將阻塞所有的異常,包括你沒有準(zhǔn)備處理的異常。

3.命名規(guī)范

3.1.過程(Procedure)與函數(shù)(Function)

1).命名

  過程與函數(shù)名應(yīng)當(dāng)有意義。進(jìn)行一個(gè)動(dòng)作的過程最好在名稱前加上表示動(dòng)作的動(dòng)詞為前綴。例如:

procedure FormatHardDrive;

  設(shè)置輸入?yún)?shù)值的過程名應(yīng)當(dāng)以Set 為其前綴,例如:

procedure SetUserName;

  獲取數(shù)值的過程名應(yīng)當(dāng)以Get 為其前綴,例如:

function GetUserName:string;

2).形參

  所有形參的名稱都應(yīng)當(dāng)表達(dá)出它的用途。如果合適的話,形參的名稱最好以字母a 為前綴,例如:

procedure SomeProc(aUserName:string; aUserAge:integer);

  當(dāng)參數(shù)名與類的特性或字段同名時(shí),前綴a 就有必要了。

3).命名沖突

  當(dāng)兩個(gè)單元中含有相同名稱的過程時(shí),如果調(diào)用該過程,實(shí)際被調(diào)用的是Uses 子句中較后出現(xiàn)的那個(gè)單元中的過程。為避免這種情況,可在方法名前加想要的單元名,例如:

SysUtils.FindClose(SR);

或Windows.FindClose(Handle);

3.2.變量(Variable)

  變量的名稱應(yīng)當(dāng)能夠表達(dá)出它的用途。循環(huán)控制變量常常為單個(gè)字母,諸如I 、J 或K 。也可以使用更有意義的名稱,例如UserIndex。布爾變量名必須能清楚表示出True 和False 值的意義。

1). 局部變量

  局部變量遵循其他變量的命名規(guī)則。

2). 全局變量

  全局變量以大寫字母“G”打頭,并遵循其他變量的命名規(guī)則。

3.3.類型(Type)

3.3.1.一般類型

1). 枚舉型

  枚舉類型名必須代表枚舉的用途。名稱前要加T字符作為前綴,表示這是個(gè)數(shù)據(jù)類型。枚舉類型的標(biāo)識(shí)符列表的前綴應(yīng)包含2 - 3 個(gè)小寫字符,來(lái)彼此關(guān)聯(lián)。例如:

TSongType=(stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB);

  枚舉類型的變量實(shí)例的名稱與類型相同,但沒有前綴T ,也可以給變量一個(gè)更加特殊名稱,諸如:FavoriteSongTypel、FavoriteSongType2等等。

3.3.2.構(gòu)造類型

1). 數(shù)組類型

  數(shù)組類型名應(yīng)表達(dá)出該數(shù)組的用途。類型名必須加字母“T”為前綴。如果要聲明一個(gè)指向數(shù)組類型的指針,則必須加字母P 為前綴,且聲明在類型聲明之前。例如:

type
  PCycleArray = ^TCycleArray;
  TCycleArray=array[1..100] of integer;

實(shí)際上,數(shù)組類型的變量實(shí)例與類型名稱相同,但沒有“T”前綴。

2). 記錄類型

  記錄類型名應(yīng)表達(dá)出記錄的用途。類型名必須加字母T為前綴。如果要聲明一個(gè)指向記錄類型的指計(jì),則必須加字母P為前綴,且其聲明在類型聲明之前。例如:

type
  PEmployee = ^TEmployee;
  TEmployee = record
    EmployeeName: string;
    EmployeeRate: Double;
  end;

3.3.3.類類型(Class)

1). 命名與格式

  類的名稱應(yīng)當(dāng)表達(dá)出類的用途。一般的類名前要加字母“T”,如果是接口類那么類名前要加“I”,錯(cuò)誤異常類的類名前要加“E”,而類引用類型(Class-reference type)則要在類名后加“Class”。例如:

type
  TCustomer = class(TObject);
  ICustomer = interface;
  TCustomerClass = class of TCustomer
  ECustomerException = class(Exception);

  類的實(shí)例名稱通常與類名相同,只不過沒有前綴“T”。

var
  Customer: TCustomer;

注意:關(guān)于元件的命名,請(qǐng)參閱“元件類型”。

2).字段

(1) 命名與格式

  字段的命名遵循與變量相同的規(guī)則,只不過要加前綴F ,表示這是字段。

(2) 可見性

  所有字段必須為私有。如果要在類的作用域之外訪問字段,可借助于類的屬性來(lái)實(shí)現(xiàn)。

3).方法

(1) 命名與格式

  方法的命名遵循與過程和函數(shù)相同的規(guī)則。

(2) 靜態(tài)方法

  當(dāng)你不希望一個(gè)方法被派生類覆蓋時(shí),應(yīng)當(dāng)使用靜態(tài)方法。

(3) 虛擬方法(virtual)與動(dòng)態(tài)方法(dynamic)

  當(dāng)你希望一個(gè)方法能被派生類覆蓋,應(yīng)當(dāng)使用虛擬方法(virtual)。如果類的方法要被多個(gè)派生類直接或間接地使用,則應(yīng)當(dāng)用動(dòng)態(tài)方法(dynamic)。例如,某一個(gè)類含有一個(gè)被頻繁覆蓋的方法,并有100個(gè)派生類,則應(yīng)將方法定義為動(dòng)態(tài)的,這樣可以減少內(nèi)存的開銷。

(4) 抽象方法(abstract)

  如果一個(gè)類要?jiǎng)?chuàng)建實(shí)例,則不要使用抽象方法。抽象方法只能在那些從不創(chuàng)建實(shí)例的基類中使用。

(5) 屬性訪問方法

  所有屬性訪問方法應(yīng)當(dāng)定義在類的私有或保護(hù)部分。屬性訪問方法遵循與過程和函數(shù)相同的規(guī)則。用于讀的方法應(yīng)當(dāng)加“Get”前綴,用于寫的方法應(yīng)當(dāng)加“Set”前綴,并且有一個(gè)叫Value的參數(shù),其類型與屬性的類型相同。例如:

TSomeClass = class(TObject)
private
fsomeField: Integer;
protected
function GetSomeField: Integer;
procedure SetSomeField(Value: Integer);
public
property SomeField: Integer read GetSomeField write SetSomeField;
end;

  盡管不是必須,但還是建議你使用寫訪問方法來(lái)訪問代表私有字段屬性。

4).屬性

  屬性作為私有字段的訪問器,遵循與字段相同的命名規(guī)則,只不過沒有F前綴。屬性名應(yīng)為名詞,而不是動(dòng)詞。屬性是數(shù)據(jù),而方法是動(dòng)作。數(shù)組屬性名應(yīng)當(dāng)是復(fù)數(shù),而一般的屬性應(yīng)當(dāng)是單數(shù)。

3.3.4.元件類型

1). 元件類型的命名標(biāo)準(zhǔn)

  元件的命名與類的命名類似,只不過當(dāng)它與其它元件名稱沖突時(shí),你可以加上3個(gè)字符的前綴,用以標(biāo)識(shí)公司、個(gè)人或其他實(shí)體。例如,一個(gè)時(shí)鐘元件可以這樣聲明:

TddgClock = class(TComponent)

注意,作為前綴的3 個(gè)字符要小寫。

2). 元件實(shí)例的命名規(guī)則

  元件實(shí)例的名稱應(yīng)當(dāng)能夠描述其實(shí)際意義,這里命名規(guī)則使用了一個(gè)變更的匈牙利前綴命名規(guī)范。使用前綴而不使用后綴的原因是在搜尋時(shí),在對(duì)象檢查器和代碼探索器中搜尋構(gòu)件的名字比搜尋構(gòu)件的類型更容易。在這個(gè)標(biāo)準(zhǔn)中,元件實(shí)例名包括兩個(gè)部分:前綴和性質(zhì)標(biāo)識(shí)名。

(1). 元件的前綴

  元件的前綴多是表現(xiàn)元件類型的字母縮寫。參見下面表中的元件前綴:

元件類名元件前綴
TActionList, TAction表示動(dòng)作的列表項(xiàng)act
TButton, TSpeedButton, TBitBtn等所有的按鈕類btn
TCheckBox, TDBCheckBox等所有的檢查框chk
TRadioButton單選按鈕類rdo
TToolBar工具條tb
TMainMenu所有的主菜單類mm
TMainMenuItem所有的菜單項(xiàng)類mi
TPopupMenu所有的彈出式菜單類pm
TPopupMenuItem所有的彈出式菜單項(xiàng)類pmi
TLabel, TStaticText等所有用來(lái)顯示的標(biāo)簽類lbl
TPanel等所有的面板類pnl
TPageControl等所有的頁(yè)式控件類pgc
TEdit, TMaskEdit等所有的單行編輯框類edt
TMemo, TRichEdit等所有的多行編輯框類mmo
TDrawGrid, TStringGrid等所有的網(wǎng)格類grd
TAnimate等所有的動(dòng)畫類ani
TImageList等所有的圖片列表類il
TImage等圖片類img
TChart圖表類cht
TComboBox, TDBComboBox等所有的下拉式列表框類cbo
TListBox, TDBList等所有的列表框類lst
TTreeViewtv
TListViewlv
THotKeyhk
TSplitter等所有的分隔符類spt
TOpenDialog等所有的對(duì)話框元件類dlg
TTable等所有的數(shù)據(jù)表類tbl
TQuery等所有的SQL查詢類元件qry
TClientDataSet所有的客戶數(shù)據(jù)集元件cds
TDataSourceds
TDatabasedb
TSockConnection,TDCOMConnection等連接元件類con
TQuickRep, TFastReport等所有的報(bào)表元件類rpt
TDDEClientConv,TDDEClientItem等所有的DDE元件類dde
TMonthCalendar等所有的日歷類cal
TGroupBox等控件類grp

  如上所示,元件類型前綴是從分析描述元件的類型性質(zhì)而來(lái)的。通常情況下,下面的規(guī)則描述如何定義一個(gè)元件類型前綴:

  • 從元件類型名中移去T前綴。例如TButton變成Button。
  • 除了第一個(gè)元音,刪去所有元音字母。例如,Button變成bttn,Edit變成edt。
  • 壓縮雙字母。例如,bttn變成btn。
  • 如發(fā)生沖突,則在某一元件前綴中加入一個(gè)元音。例如在TBatton元件的前綴中加入元音變?yōu)閎atn,以區(qū)別TButton的前綴。
  • 不過,上述規(guī)則首先得保證前綴名稱必須符合習(xí)慣,做到見名知意,如:TDDEClientConv控件的前綴就是一個(gè)例外。

注意:元件的前綴是為了表示出元件的類型,是按鈕,還是標(biāo)簽等等,因此沒有必要為每一個(gè)特別元件類建立一個(gè)元件前綴,如: TMyButton的元件前綴仍為btn。

(2). 元件性質(zhì)標(biāo)識(shí)名

  元件性質(zhì)標(biāo)識(shí)名是元件意圖的描述。例如,一個(gè)用于關(guān)閉窗體的TButton元件實(shí)例可命名為btnClose。一個(gè)編輯姓名的元件實(shí)例可命名為edName。

3.3.5.窗體與對(duì)話框類型

1). 窗體類型的命名標(biāo)準(zhǔn)

  窗體或?qū)υ捒蝾愋偷拿Q應(yīng)當(dāng)表達(dá)出窗體的用途,如果是窗體要加“Tfrm”前綴,如果是對(duì)話框要加“Tdlg”,后跟描述性名。例如,About窗體類型名稱為:

TfrmAbout = class(TForm)

主窗體的類型名稱為:

TfrmMain = class(TForm)

客戶登錄窗體的類型名稱為:

TfrmCustomerEntry = class(TForm)

登陸對(duì)話框的類型名稱為:

TdlgLogin = class(TForm)

2). 窗體實(shí)例的命名標(biāo)準(zhǔn)

  窗體實(shí)例的名稱與相應(yīng)的類型名稱相同,但沒有前綴T 。例如,前面提到的窗體類型與實(shí)例的名稱為:

類型名實(shí)例名
TfrmAboutfrmAbout
TfrmMainfrmMain
TfrmCustomerEntryfrmCustomerEntry
TdlgLogindlgLogin

3). 自動(dòng)創(chuàng)建的窗體

  除非特別原因,只有主窗體才自動(dòng)生成。其他所有窗體必須從Project Options對(duì)話框的自動(dòng)生成列表中刪除。更進(jìn)一步信息,請(qǐng)參閱后面幾節(jié)。

4). 模式窗體實(shí)例化函數(shù)

  所有窗體單元都應(yīng)當(dāng)含有實(shí)例化函數(shù),用于創(chuàng)建、設(shè)置、模式顯示和釋放窗體。這個(gè)函數(shù)將返回由窗體返回的模式結(jié)果。傳遞給這個(gè)函數(shù)的參數(shù)遵循參數(shù)傳遞的規(guī)則。之所以要這樣封裝,是為了便于代碼的重用和維護(hù)。

  窗體的變量應(yīng)當(dāng)從單元中移走,改在窗體實(shí)例化函數(shù)中作為局部變量定義(注意,要求從Project Options對(duì)話框的自動(dòng)生成列表中移走該窗體。請(qǐng)看前面的內(nèi)容。

例如,下面的單元文件演示了GetUserData的實(shí)例化函數(shù)。

Unit UserDataFrm;

Interface

Uses
  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 *.DFM}

function 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ù)合窗體

  如果一個(gè)窗體結(jié)構(gòu)過于復(fù)雜,就必須將其分化成為一個(gè)主窗體框架以及嵌入到主窗體框架的若干子窗體框架。如:

TfrmMainFrame: TfrmInfoFrame,TfrmEditorFrame

  使用窗體框架,主要是為了解決界面和代碼復(fù)用問題,以及提高單元代碼的內(nèi)聚力(劃分后,每一個(gè)窗體框架為一個(gè)獨(dú)立單元),從而提高軟件工程質(zhì)量。你必須提煉出界面關(guān)聯(lián)代碼(可復(fù)用的)和應(yīng)用關(guān)聯(lián)代碼(不能復(fù)用的)。

3.3.6.數(shù)據(jù)模塊類型

1). 數(shù)據(jù)模塊的命名標(biāo)準(zhǔn)

  數(shù)據(jù)模塊類型名稱應(yīng)表達(dá)出它的用途,且要加前綴“Tdm”,后跟描述性名稱。例如,Customer數(shù)據(jù)模塊的類型名稱為:

TdmCustomer = class(TDataModule)

Orders 數(shù)據(jù)模塊的類型名稱為:

TdmOrder = class(TDataModule)

2). 數(shù)據(jù)模塊實(shí)例的命名標(biāo)準(zhǔn)

  數(shù)據(jù)模塊實(shí)例的名稱應(yīng)當(dāng)與相應(yīng)的類型名稱相同,但沒有前綴T 。例如,前面的數(shù)據(jù)模塊類型、實(shí)例名稱如下:

類型名稱實(shí)例名
TdmCustomerdmCustomer
TdmOrderdmOrder

3.4.文件

  建議在所有源文件、項(xiàng)目文件和單元文件使用結(jié)構(gòu)化的文件頭信息。一個(gè)文件頭至少應(yīng)包含以下信息:

{
Copyright @ Year by Authors
}

3.4.1.項(xiàng)目文件

  項(xiàng)目文件的名稱應(yīng)當(dāng)具有描述意義。例如,“The Delphi 5 Developer’s Guide Bug Manager ”的項(xiàng)目名稱為DDGBugs.dpr,一個(gè)系統(tǒng)信息程序的名稱為SysInfo.dpr。

3.4.2.窗體文件

  窗體文件的名稱應(yīng)當(dāng)表達(dá)出窗體的用途,且具有Frm后綴。例如,About窗體的文件名叫AboutFrm.dfm,主窗體的文件名叫MainFrm.dfm。

3.4.3.數(shù)據(jù)模塊文件

  數(shù)據(jù)模塊文件的名稱應(yīng)當(dāng)表達(dá)出數(shù)據(jù)模塊的作用,且具有DM后綴。例如,Customers數(shù)據(jù)模塊的文件名叫CustomersDM.dfm。

3.4.4.遠(yuǎn)程數(shù)據(jù)模塊文件

  遠(yuǎn)程數(shù)據(jù)模塊文件的名稱應(yīng)當(dāng)表達(dá)出遠(yuǎn)程數(shù)據(jù)模塊的用途。名稱后要加RDM后綴。例如,Customers遠(yuǎn)程數(shù)據(jù)模塊的文件叫CustomersRDM.dfm。

3.4.5.單元文件

1). 普通單元

(1) 單元名

  單元的名稱應(yīng)當(dāng)有描述性。例如,應(yīng)用程序的主窗體單元叫MaimFrm.pas。

(2) Uses 子句

  Interface部分的Uses子句應(yīng)當(dāng)只包含該部分需要的單元。不要包含可能由Delphi自動(dòng)添加的單元名。Implementation部分的Uses子句應(yīng)當(dāng)只包含該部分需要的單元,不要有多余的單元。

(3) Interface 部分

  Interface部分應(yīng)當(dāng)只包含需要被外部單元訪問的類型、變量、過程與函數(shù)的聲明。而且,這些聲明應(yīng)當(dāng)在Implementation部分之前。

(4) Implementation 部分

  Implementation部分包括本單元私有的類型、變量、過程與函數(shù)的實(shí)現(xiàn)。

(5) Initialization 部分

  不要在Initialization部分放置花費(fèi)時(shí)間很多的代碼。否則,將導(dǎo)致應(yīng)用程序啟動(dòng)時(shí)顯得很慢。

(6) Finalization 部分

  確保釋放所有在Initialization部分中分配的資源。

2).窗體單元

  窗體單元文件的名稱與相應(yīng)的窗體名稱相同,只是要將前綴變成后綴。例如,About窗體的單元名稱叫AboutFrm.pas。主窗體的單元文件名稱叫MainFrm.pas。

3).數(shù)據(jù)模塊單元

  數(shù)據(jù)模塊單元文件的名稱與相應(yīng)的數(shù)據(jù)模塊名稱相同。例如,數(shù)據(jù)模塊單元的名稱叫CustomersDM.pas。

4).通用單元

  通用單元的名稱應(yīng)當(dāng)表達(dá)出它的用途,名稱前要加“u”前綴。例如,一個(gè)實(shí)用調(diào)試工具單元的名稱叫uDebugUtilities.pas,包含全局變量的單元名稱叫uCustomerGlobals.pas。

注意,一個(gè)項(xiàng)目中單元名稱必須是唯一的。通用單元名不能重名。

5).元件單元

(1). 命名

  元件單元應(yīng)放在單獨(dú)的路徑中,以表明它們是定義元件的單元。它們一般與項(xiàng)目不放在同一路徑下。單元文件名稱應(yīng)表達(dá)出其內(nèi)容。

注意,有關(guān)元件命名標(biāo)準(zhǔn)的更多信息,請(qǐng)參閱“元件類型的命名標(biāo)準(zhǔn)”。

  元件單元只能含有一個(gè)主要元件,這是指出現(xiàn)在元件選項(xiàng)板上的元件。其他輔助性的元件或?qū)ο笠部梢园谕粏卧小?/P>

(2). 注冊(cè)單元

  元件的注冊(cè)過程應(yīng)當(dāng)從元件單元中移走,放在一個(gè)單獨(dú)的單元中。這個(gè)注冊(cè)單元用于注冊(cè)所有元件、屬性編輯器、元件編輯器、向?qū)У取?/P>

  元件注冊(cè)應(yīng)當(dāng)在設(shè)計(jì)期包中進(jìn)行。因此,注冊(cè)單元應(yīng)當(dāng)包含在設(shè)計(jì)期包而不是運(yùn)行期包中。建議注冊(cè)單元這樣命名:

xxxReg.pas

其中,xxx字符前綴,以標(biāo)識(shí)元件包名稱或公司、個(gè)人、其他實(shí)體。例如,注冊(cè)單元命名為xxxReg.pas。

6).包文件(.dpk)命名規(guī)則

(1). 運(yùn)行期包與設(shè)計(jì)期包

  運(yùn)行期包中應(yīng)當(dāng)只包含所需要的單元。那些屬性編輯器和元件編輯器的單元應(yīng)當(dāng)放在設(shè)計(jì)期包中。注冊(cè)單元也應(yīng)當(dāng)放在設(shè)計(jì)期包中。

(2). 文件命名標(biāo)準(zhǔn)

  包的命名遵循下列模式:

dcliiiDescvvCn.pkg —設(shè)計(jì)期包
iiiDescvvCn.pkg    —運(yùn)行期包

  其中,iii代表一個(gè)2-3字符的前綴,用于標(biāo)識(shí)公司、個(gè)人或其他需要標(biāo)識(shí)的事情,也可不要;Desc表示該控件包的簡(jiǎn)短描述;vv代表包的版本號(hào),你可以根據(jù)需要取舍;前綴“dcl”表示設(shè)計(jì)期包,沒有該前綴表示運(yùn)行期包;字母“Cn”表示編譯器類型與編譯器版本號(hào),如:Delphi5=D5, Delphi4=D4, CBuilder3=C3...。

注意包名稱中的lib或std分別表示這是設(shè)計(jì)期包還是運(yùn)行期包。例如:

dclrbStdComPSD5.pkg —Delphi 5的設(shè)計(jì)期包
rbStdCompsD5.pkg       —Delphi 5的運(yùn)行期包

4.Delphi代碼自動(dòng)格式化工具

  盡管大多數(shù)的代碼自動(dòng)格式化工具能夠幫你重排源程序格式,以及更新保留字和標(biāo)示符的大小寫,但是這最好在使用版本控制前進(jìn)行,如果你已經(jīng)使用了版本控制,建議你不要輕易使用代碼自動(dòng)格式化工具,哪怕多一個(gè)空格,版本控制工具也會(huì)認(rèn)為該行已被修改,從而給程序管理帶來(lái)不變。


上一篇:《Delphi高手突破》第一章——預(yù)覽版

下一篇:用delphi制作抖動(dòng)窗體

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

青青草原综合久久大伊人精品优势| 精品久久99ma| 蜜臀av国内免费精品久久久夜夜| 国产精品初高中精品久久| 欧美最猛性xxxxx免费| 1234区中文字幕在线观看| 久久精品久久精品亚洲人| 91av在线免费观看| 成人国产一区二区| 一区二区三区视频在线观看免费| 国产喷水吹潮视频www| 亚洲精品中文字幕在线播放| 91久久在线| 一区二区三区在线视频免费| 国产精品一区二区你懂得| 精品黑人一区二区三区在线观看| 国产亚洲一级高清| 免费精品一区| 久久99青青精品免费观看| 国产在线一二三| 性欧美欧美巨大69| 亚洲三级久久久| 亚洲成人av在线播放| 亚洲黄色天堂| 亚洲在线精品视频| 亚洲啪啪综合av一区二区三区| 亚洲欧洲美洲综合色网| 99久久99热这里只有精品| 国产日韩在线| 中国女人内谢25xxxx免费视频| 成人中文字幕+乱码+中文字幕| 99在线精品视频免费观看20| 精品区一区二区| av黄色免费在线观看| 国产一区二区在线免费视频| 大黑人xxx| 手机视频在线观看| 国产精品久久久久高潮| 精品人妻一区二区三区四区在线| 国产精品电影久久久久电影网| 91精品国产日韩91久久久久久| 成人伦理视频网站| 欧美做爰猛烈大尺度视频| 欧美日韩精品免费观看视频完整| 中文日本高清免费| 在线免费视频一区二区| 欧美 日韩 国产在线观看| 另类的小说在线视频另类成人小视频在线| 超碰人人人人人人人| 黄瓜视频污在线观看| 粉嫩av一区二区三区四区五区| 日韩欧美成人一区二区三区| 亚洲精品午夜久久久| 免费在线一区观看| 日韩国产欧美一区| 一区二区三区久久久| www色啪啪| 一广人看www在线观看免费视频| 午夜激情综合网| 欧美中文在线| 亚洲国产成人私人影院tom| 欧美极品在线观看| 成人亚洲精品777777大片| 欧美熟妇乱码在线一区| 性一交一乱一色一免费无遮挡| 青青草精品在线视频| av资源网在线播放| 艳妇乳肉豪妇荡乳av| www.九色在线| 国产丝袜在线播放| 麻豆亚洲av成人无码久久精品| 无码人妻精品一区二区蜜桃网站| 一区二区三区影院| 国产又黄又粗又长| 欧美三级网页| 国外成人免费视频| 久久av一区二区| 欧美野外猛男的大粗鳮| 美女精品久久| 色哟哟欧美精品| 尤物99国产成人精品视频| www在线看| 国内精品免费在线观看| 亚洲精品xxxxx| 精品一区二区三区亚洲| 在线观看国产三级| 欧美一区二不卡视频| 96精品久久久久中文字幕| 国产精品美女视频| 久久国产色av免费观看| 欧美日本国产在线| 69久久夜色精品国产69| 色偷偷福利视频| 亚洲图片制服诱惑| 欧洲精品一区二区三区久久| 亚洲综合av一区二区三区| 伦一区二区三区中文字幕v亚洲| www免费在线观看| 影音先锋男士资源站| 最近2019好看的中文字幕免费| 国产精品一码二码三码在线| 欧美xx视频| 久久久一区二区三区四区| 韩国av一区| 亚洲色图一二三区| 一级片一级片一级片| 中文在线免费看视频| 欧美精品少妇一区二区三区| 97超碰人人在线| 国产精品国产三级国产专业不| 国产 日韩 欧美 在线| 国产精品高潮呻吟久久av无限| 欧美粗大gay| 麻豆国产va免费精品高清在线| 91在线观看下载| 最近中文字幕日韩精品| 中文字幕日韩欧美精品高清在线| 91性高潮久久久久久久| 中文字幕免费精品| 成人一级视频在线观看| 理论在线观看| 插我舔内射18免费视频| 最好看的日本字幕mv视频大全| 在线精品一区二区三区| 亚洲一区二区三区中文字幕| 成人午夜av影视| 国产麻豆视频网站| 欧美一级高清大全免费观看| 91免费版在线看| 国产亚洲欧美一区在线观看| 狂野欧美激情性xxxx| 妞干网在线观看视频| 成人网18免费网站在线| 成人免费看黄yyy456| 亚洲香蕉在线视频| 日本欧美加勒比视频| 日韩三级av在线| 夜夜嗨av一区二区三区中文字幕| 夜夜躁日日躁狠狠久久av| 乱小说综合网站| 欧美日韩国产综合视频在线观看中文| 久久一区二区三区视频| 午夜美女福利视频| 美女又爽又黄免费视频| 亚洲精品男人天堂| 亚洲色图第一页| 精品国产乱码久久久久久久软件| 一级日韩一区在线观看| 欧美日韩成人黄色| 欧美白人猛性xxxxx交69| 国产精品免费久久久久久| 超碰成人在线观看| 亚洲人成电影网站色mp4| 在线观看中文字幕不卡| 成人ar影院免费观看视频| av不卡在线免费观看| caoporn国产一区二区| 日韩手机在线观看| av在线一区二区三区| 亚洲911精品成人18网站| 国内自拍视频在线观看| 欧美大片免费久久精品三p| 午夜精品一区二区三区四区| 天天射天天干天天| 成人涩涩免费视频| 亚洲欧美日韩综合在线| 欧美日韩四区| 欧美videosex性极品hd| 国产免费不卡| 色久优优欧美色久优优| 澳门永久av免费网站| 成人51免费| 亚洲 欧美 自拍偷拍| 韩日午夜在线资源一区二区| 欧美在线不卡视频| 日韩精品成人免费观看视频| 亚洲成人精品久久久| 国产性生活免费视频| 视频1区2区3区| 国产日韩精品视频一区二区三区| 97caopron在线视频| 91精品国自产在线| 欧美日韩性生活片| 图片区小说区国产精品视频| 婷婷亚洲五月色综合| 国模吧无码一区二区三区| 99久久精品国产一区二区三区| 国产色婷婷在线| 精品人妻无码一区二区三区| 欧美一乱一性一交一视频| 精品国产成人在线影院| a毛片在线播放| 又黄又骚的视频| 国产免费无码一区二区| 亚洲免费在线播放| 一级黄色免费网站| 国产色视频一区| 国产精品午夜视频| 久久精品第九区免费观看| 高清国产一区二区三区四区五区| 666精品在线| 国产美女免费无遮挡| 欧美极品jizzhd欧美仙踪林| 精品制服美女丁香| 97精品视频在线观看自产线路二| 国产精品久久久久久亚洲av| 一本加勒比波多野结衣| 精品久久香蕉国产线看观看亚洲| 日韩不卡一二三| 日韩电影免费观看高清完整| 中文字幕日韩免费视频| 吴梦梦av在线| 99热这里只有精| 国产91富婆露脸刺激对白| 成人在线网站| 麻豆tv在线观看| 日韩欧美一区电影| 亚洲不卡1卡2卡三卡2021麻豆| 日韩理论在线观看| 国产av一区二区三区精品| 国产一区二区视频播放| 成人有码在线播放| 一本久久青青| 日韩区欧美区| 亚洲精品555| 日韩美女啊v在线免费观看| 99免费精品在线观看| 国产精品九九九九九九| 免费在线观看日韩| 久久人人妻人人人人妻性色av| 欧美aⅴ在线观看| 国产精品入口夜色视频大尺度| 国产午夜一区| 欧美三级美国一级| 国产三级国产精品国产专区50| 中文字幕免费在线看线人动作大片| 老司机色在线视频| 精品国产免费一区二区三区香蕉| 1234区中文字幕在线观看| 亚洲精品高清在线观看| 亚洲精品乱码久久久久久金桔影视| 欧美精选一区二区三区| 午夜毛片在线观看| 日本最黄一级片免费在线| 欧美成人精品欧美一级私黄| 久久久久久久网| 欧美高清www午色夜在线视频| 国产91大片| 可以免费观看av毛片| 中文字幕乱码一区二区| 久久精品久久久久久久| 精品日产一区2区三区黄免费| 精品一区二区三区香蕉蜜桃| 亚洲动漫第一页| 日韩精品成人一区二区三区| 亚洲最大黄色| 97精品人妻一区二区三区香蕉| 亚洲91网站| 久久一留热品黄| 亚洲电影在线一区二区三区| 韩国三级中文字幕hd久久精品| 久久国产精品久久久久久久久久| 少妇人妻大乳在线视频| 波多野结衣电影免费观看| 一区二区三区欧美日韩| 日韩成人免费在线视频| 亚洲国产成人在人网站天堂| а√天堂中文资源在线bt| 国产一区二区精品久久91| 99视频这里有精品| 91精品国产一区二区三区香蕉| a级高清视频欧美日韩| 亚洲奶大毛多的老太婆| 少妇熟女视频一区二区三区| 91精品国产综合久久精品| 性一爱一乱一交一视频| 日韩精品一区二区视频| 精品国产免费观看一区| 亚洲成人av观看| 欧美欧美欧美欧美首页| 亚洲激情在线观看视频免费| 制服丝袜网站| 一区二区三区天堂av| 茄子视频成人在线观看| 婷婷精品在线| 免费观看成人性生生活片| 日韩美女啊v在线免费观看| 国产精品毛片久久久久久久av| 最新av免费看| 亚洲欧美日韩精品一区| 男人的天堂va| 亚洲免费观看在线视频| 日本免费福利视频| 亚洲一区视频| 激情中国色综合| 免费看黄色的网站| 日本а中文在线天堂| 日本大片在线看黄a∨免费| 韩日精品一区| 男人在线视频资源| 欧美影院午夜播放| 韩国18福利视频免费观看| 亚洲欧美色图区| 亚洲综合天堂网| 丁香花在线高清完整版视频| 国产一区精品| 成人欧美精品久久久久影院| 蜜臀久久99精品久久久酒店新书| 国产精品福利小视频| 久久大片网站| 69av自拍偷拍| 亚洲制服少妇| 偷偷要色偷偷| 国产精品传媒毛片三区| 四虎成人在线| 亚洲无码精品在线播放| 日产午夜精品一线二线三线| 国产精品爱久久久久久久小说| 亚洲午夜久久久久久久久电影院| 国产精品欧美激情在线| 五月婷婷六月丁香激情| 国产精品免费一区二区| 亚洲人在线观看视频| 国产一区二区三区香蕉| zzijzzij亚洲日本成熟少妇| 亚洲最大福利视频| 日韩一二区视频| 一区二区在线看|