Delphi编码指南good课案_第1页
Delphi编码指南good课案_第2页
免费预览已结束,剩余33页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、a沖羊炖Delphi程序员代码编写标准指南第1页(共 30 页)Delphi程序员代码编写标准指南(仅供参考)目录一、序言二、通用源代码格式规则2.1缩格2.2页边空格2.3 BeginEnd配对三、Object Pascal3.1括号3.2保留字和关键字3.3过程和函数(例程)3.3.1命名/格式化3.3.2形式参数格式化命名参数的排序吊量参数名称的冲突3.4变量3.4.1变量的命名和格式3.4.2局部变量3.4.3全局变量的使用3.5类型3.5.1大写约定浮点指针类型枚举类型变数

2、和ole变数类型3.5.2结构类型数组类型记录类型3.6语句3.6.1 if语句3.6.2 case语句一般性话题格式3.6.3 while语句3.6.4 for语句a沖羊炖Delphi程序员代码编写标准指南第2页(共 30 页)3.6.5 repeat语句3.6.6 with语句一般话题3.662格式3.7结构异常处理3.7.1一般话题3.7.2 tryfin ally的使用3.7.3 tryexcept的使用3.7.4 tryexceptelse的使用3.8类类型3.8.1命名和格式3.8.2域命名/格式3

3、.8.2.2可视化3.8.3方法命名/格式使用静态的方法使用虚拟/动态的方法使用抽象的方法属性存取方法3.8.4属性命名/格式使用存取的方法四、文件4.1工程文件4.1.1命名4.2窗体文件4.2.1命名4.3数据模板文件4.3.1命名4.4远端数据模板文件4.4.1命名4.5 Un it文件4.5.1通用Unit结构 unit的名字 uses子句 in terface部分 impleme ntatio n部分 in itial

4、izatio n部分 fin alizatio n部分4.5.2窗体单元命名4.5.3数据模板单元a沖羊炖Delphi程序员代码编写标准指南第3页(共 30 页)命名4.5.4一般目的单元命名4.5.5构件单元a沖羊炖Delphi程序员代码编写标准指南第4页(共 30 页)命名4.6文件头五、窗体和数据模板5.1窗体5.1.1窗体类型命名标准5.1.2窗体实例命名标准5.1.3自动创建窗体5.1.4模式窗体实例化函数5.2数据模板5.2.1数据模板命名标准5.2.2数据模板实例命名标准六、包6.1使用运行包和设计包的比较6.

5、2文件命名标准七、构件7.1用户自定义构件7.2构件单元7.3使用注册单元7.4构件实例命名约定7.5构件的前缀7.5.1 Sta ndard页7.5.2 Additional页7.5.3 Win32页7.5.4 System页7.5.5 In ternet页7.5.6 Data Access页7.5.7 Data Co ntrols页7.5.8 Decisio n Cube页7.5.9 QReport页7.5.10 Dialogs页7.5.11 Win 3.1页7.5.12 Samples页7.5.13 ActiveX页7.5.14 Midas页八、注释8.1文件头注释8.2函数或过程头注释

6、8.3块注释8.4关键语句注释九、: 其他9.1数据库相关命名原则9.2Delphi系统常量9.3基本提示信息a沖羊炖Delphi程序员代码编写标准指南第5页(共 30 页)9.4基本编程要求a府炖Delphi程序员代码编写标准指南第6页(共 30 页)一、序言本文档详述了在Delphi 4开发者指南下进行编程的代码编写标准。在Delphi 4 开发者指南中包含本文档的目的在于阐述一种方法,通过该方法,开发小组可以在他们所编写的代码中保持一贯的风格。这样做的目的是使在开发小组中的每一个程序员都可以明白其他程序员的代码。这有助于提高代码编写的可读性和使用的一贯性。本文档并不意味着包含了所有存在于

7、代码中的标准。但是,它的内容已足够帮你起个好头。你可以自由的增加修改这些标准来满足你的需要。但我们不赞成你偏离这些由Borla nd开发人员所使用的标准太远。我们推荐这么做是因为一旦有新的程序员加入到你的开发小组 中,而他们最喜欢和最熟悉的是Borla nd的标准。与大多数代码标准文档一样,本文档也会根据需要进行改动。因此,你可以到 Developers Network和其他一些资源,在那儿可以找到你所需的信息。二、通用源代码格式规则2.1 缩格为增加可读性,依照程序的逻辑关系(循环语句、选择语句等),采用锯齿状排版格式, 缩格是指在每一级有两个空格。不要在源代码中保留tab字符,这是因为ta

8、b字符会随着 不同用户的不同设置和不同的资源管理工具(打印、文档、版本控制等)而代表不同的宽度。你可以通过关闭Environment选项对话框中Editor页上的“Use tab character和Optimal fill”检查框(通过Tools|Environment)来禁止保存tab字符。2.2 页边空格代码行的左右边界一般会被设置成80字符宽。通常,源码不会超出这个边界,但这个方针会有一些弹性。不管是否有可能,那些超出到另一行的语句会在一个逗号或其他操作符 之后与前面的语句相连。当一个语句被打断相连时,它应比原来的那一行语句缩进两个字符。2.3 Begin End 配对Begin子句应

9、写在独立的一行。例如,下面第一行是错误的写法而第二行是正确的。for I for Ibegin:=0 to 10:=0 to 10do begi n/ 错误,beg in同 for出现在:在同一行 独立的一行do/正确, begina沖羊炖Delphi程序员代码编写标准指南第7页(共 30 页)这个规则的例外是当begin子句的出现是作为一个else子句的 部分-参考例子a沖羊炖Delphi程序员代码编写标准指南第8页(共 30 页)if some statementthenbeginendelse begi nsomeOtherStateme nt;end ;end语句总是出现在独立的一行。

10、当begin语句不是一个else子句的一部分时,相应的end语句永远缩进到与begin部分相对应的位置。三、Object Pascal3.1 括号不要在括号与括号之间的字符中间留下空格。下面的例子示范了错误的与正确地使用括3.2 保留字和关键字Object Pascal保留字和关键字永远是全部小写。3.3 过程和函数(例程)3.3.1 命名/格式化例程的名字通常应该以 大写的字母开头并且中间错落分明以便于增强其可读性。下面是一个格式不正确的过程名称:procedurethisisapoorlyformattedrout inen ame;下面是一个合适的大小写过程名称的例子:procedure

11、ThislsMuchMoreReadableRouti neName;过程的名称应该同它的内容相符。一个会导致某种行为的过程应以动词开头。例如:号中的空格:CallProc( Aparameter );不要在一个语句中使用不必要的括号。 子示范了错误和正确的使用:/错误/正确括号只应在源代码中需要的地方使用。以下的例错误-多余的括号/ 正确需要括号a沖羊炖Delphi程序员代码编写标准指南第9页(共 30 页)procedure FormatHardDrive;一个用于设置输入参数的过程应以单词set作为前缀,例如:procedure SetUserName;一个用来取得某个值的过程应以单词g

12、et作为前缀,例如:procedure GetUserName : stri ng;332 形式参数3.321 格式化如果有的话,相同类型的形参应合并在一个语句中:procedure Foo(Param1, Param2, Param3 : In teger; Param4 :stri ng); 命名所有形参的名字应是十分符合它们所代表的意义,特别是应该以传送到例程中的标志符的名称为基础。一个好的参数名称应以字符A为前缀 一例如:procedure SomeProc(AuserName :stri ng; AuserAge : in teger);“A”前缀按约定表示该参数的名称

13、是与类类型中的一个属性或域的名称相对应的。 参数的排序下面的形参的顺序重点说明了注册者调用约定调用的好处。-最常用的参数应放在第一位,其它的参数应按从左到右的顺序排列。-输入参数列表应放在输出参数列表的左边。-将通用的参数放在特殊参数的左边,例如:procedureSomeProc(Apla net,ACon ti nent,Aco un try,Astate, Acity)-排序有可能有些例外,比如事件的处理。类型为TObject的Sender参数经常放在第 一位。 常量参数当一个参数为记录型、数组类型、ShortStri ng、或接口类型并且在例程中不被改变时,

14、这些参数应做上常量标记。这样做会让编译器更加有效率的产生有关这些不改变的参数 的代码。而例程中另外一些非变参数也可常量来传送。尽管这样做没有产生任何效果和提高效 率,这将会给调用例程的使用者提供更多的信息。3.325 名称的冲突a沖羊炖Delphi程序员代码编写标准指南第10页(共 30 页)当使用拥有两个名称相同的例程的两个单元时,如果你调用该例程时, 在uses子句中排在后面的单元中的例程将会被调用。为了解决这种“在uses子句上的模糊”冲突, 要在调用该例程时写上相关的单元的前缀 ,例如:sysUtile.Fi ndClose(SR);或wi ndows.Fi ndClose(Ha nd

15、le);3.4 变量3.4.1 变量的命名和格式变量的命名应以使用它们的目的相符循环控制变量应采用一个单独的字符作为名字,比如I,J,或K,也可以采用更加有 意义的名字,比如UserIndex。逻辑变量的名字应能充分表达准确的真或假的意思。3.4.2 局部变量一个过程中的局部变量应遵循所有其它变量的使用和命名约定。临时变量的取名应合 理。如果必须的话,在一进入例程就应初始化局部变量。局部的An siStri ng变量会自动初始化为一个空的字符串。局部接口和派分接口类型变量将会自动初始化为nil,并且局部变数和ole变数类型变量会自动初始化为Un assig ned3.4.3 全局变量的使用使用

16、全局变量是不推荐的。但是,在某些时候还是必须使用,而且它们也只应在必须使用的时候才使用。在这种时候,你应努力只在一段上下文范围内使用全局变量。例如, 一个全局变量只应在一个单元的imple mn tati on部分内是全局的。如果打算在多个单元类使用全局数据,你应将它们移到一个公共的单元中然后被其它所有单元使用。全局变量可以在var子句中直接初始化为一个值。记住,所有的全局数据会自动初始化为0,因此不要将全局变量初始化为一个“空”值比如0、nil、Unassigned、等等。这样做的一个理由是因为零一初始化的全局数据在exe文件中不会占据任何空间。零一初始化数据被存储在一个虚拟的数据段,它在应

17、用程序启动后被分配在一段内存中。非零-初始化的全局数据在硬盘的exe文件占用空间。a沖羊炖Delphi程序员代码编写标准指南第11页(共 30 页)3.5 类型3.5.1 大写约定如果类型的名字是保留字,那么它应全部小写。Win32 API类型通常全部大写,并且你必须遵循在Windows.pas或其他API单元中的详细类型名称的约定。对于其他变量名字,地 一个字母应为大写,而其他字母应错落有致。下面是一些例子:var 浮点指针类型不推荐使用Real类型,因为它的存在只是为了向前兼容早期的Pascal代码。在通常情况下用Double来实现浮点指针的需要。并且,Double对处理器和

18、总线而言是做了最优 枚举类型枚举类型的名字需符合使用该类型的目的。该类型的名字需以字符T为前缀,以表明这是一个类型。枚举类型中的标识符列表必须包含两个或三个字符的前缀来对应于该枚举类 型的名字一例如:Tson gType = (stRock, stClassical, stCo un try, stAlter native, stHeavyMetal, stRB);一个枚举类型的实例的名字应与不要前缀的枚举类型(SongType)相同,除非有更好的原因来赋予该变量更特殊的名字,比如:FavoriteSo ngType1,FavoriteSo ngType2等 变数和

19、 ole 变数类型通常不建议使用变数和Ole变数类型。但在只有运行时刻才能知道数据类型的程序中必须使用该类型,这种情形多出现在COM和数据库开发中。Ole变数使用在以COM为基础的编程中例如自动化和ActiveX控制,而变数使用在非COM的编程中,这是因为变数可以十分有效地存储本地Delphi字符串(同一个字符串变量一样),但Ole变数会将所有的字 符串转换为Ole字符串(WideChar字符串)并且并不实例运算一它们永远拷贝。MyStri ng :stri ng ;/Win dowHa ndle : HWND;/I : In teger;/保留字Win32 API 类型在 System 单元

20、中引进的类型标识符化处理的,它也是IEEE中定义的标准数据格式。 范围时才使用Extended。Extended是intel浮点指针变量的实际字节大小有其意义时才使用DLLs时)。只有当需要的范围超出Double所定义的定义的类型且在Java中不支持。只有当Single。(比如当使用另一种语言的a沖羊炖Delphi程序员代码编写标准指南第12页(共 30 页)3.5.2 结构类型3.521 数组类型数组类型的名字需符合它们使用的目的。该类型的名字必须加以前缀T。如果须声明该数组类型的指针,那么该指针需加以前缀P而且应立即声明在该数组声明的前面。例如:typePCycleArray = TCyc

21、leArray;TCycleArray =array 1 TOO of integer;在实际应用中,数组的变量实例的名称应是其类型的名字去掉前缀To 记录类型记录类型的名字应符合使用它们的目的。其类型的声明应加以前缀To如果要声明该记录类型的指针,就应加以前缀P并且应紧靠在类型声明的前面声明。例如:typePEmployee =ATEmployee;TEmployee =recordEmployeeName :stri ng ;EmployeeRate : Double;end ;3.6 语句3.6.1 if 语句在if/then/else语句中最常发生的行为应放在then子句

22、中,而其它发生可能性较小的行为应放在else子句中。尽亘避纶权用磁空Z if语句,在这种情形下应用多个if语句来判断各种可能。不要使用if嵌套超过五级深度。应使代码编写得更加清晰、明了。不要在if语句中使用不必要的圆括号。如果在if语句中有多个条件需测试,这些条件应按计算强度由少到多的顺序从左到右排列。这样做能使编译器在编译代码时获得布尔估算逻辑的捷径,从而使你的代码获得最佳的优化。举例来说,如果条件1快过条件2,而条件2快过条件3,那么在if语句中的排列应是:if条件1 and条件2 and条件3 thena沖羊炖Delphi程序员代码编写标准指南第13页(共 30 页)362 case 语

23、句3.621 般原则在一个case语句中的各个独立的单元应以数字或字母顺序 排列。每一个case单元的动作行为 应保持简单而不应该超过四到五行代码。如果所要执行的动作过于复杂应采用独立的过程或函数。Case语句中的else子句只有当需要缺省行为或处理错误时才使用。 格式case语句应遵循其它结构的缩格和命名约定。3.6.3 while 语句在一个while语句中不建议使用exit过程来跳出循环,尽量仅使用循环条件来跳出 循环。在一个while循环中所用的初始化代码应紧靠在进入while循环前面出现而不要被其它不相关的语句隔开。任何结束后的处理应在循环之后立即进行。3.6.4 fo

24、r 语句for语句只有当循环次数已知的情况下才能取代while语句使用。3.6.5 repeat 语句repeat语句的使用同while语句一样,并且遵循同样的通用方针。3.6.6 with 语句 一般原则with语句应避免过多使用,并且有很多需注意的地方。避免过度使用with语句并且在with语句中小心使用多个对象、记录等等。例如:with Record1, Record2 do这些代码会使程序员感到困惑并难以发现问题所在。a沖羊炖Delphi程序员代码编写标准指南第14页(共 30 页)366.2 格式with语句遵循本文档所说明的命名约定和缩格的格式规则。3.7 结构异常处

25、理3.7.1 一般原则异常的处理大量地使用在错误纠正和资源保护方面。这就是说一旦资源被分配,一个try -finally必需加以使用来保证该资源被正确的释放。这种异常的保护也是指在一个单元的initializition/finalization或一个对象的constructor/destructor中进行资源的分配和释放。3.7.2 try fin ally 的使用任何情形下,每一次的分配都应跟随一个tryfinally。举例来说,下面的代码会造成可能的错误:SomeClass1 := TsomeClass.Create;SomeClass2 := TsomeClass.Create;try

26、do some code fin allySomeClass1.Free;SomeClass2.Free;end ;更安全更合适的分配过程应是:SomeClass1 := TSomeClass.Create;trySomeClass2 := TsomeClass.Create;try do some code fin allySomeClass2.Free;end ;fin allySomeClass1.Free;end ;a沖羊炖Delphi程序员代码编写标准指南第15页(共 30 页)3.7.3 try -except的使用只有当在异常被触发而你想执行一些任务时才使用try - -exce

27、pt。通常,没有必要为了只是简单地在屏幕上显示一个错误信息而使用try - - except语句,因为 这会被a沖羊炖Delphi程序员代码编写标准指南第 12 页(共 30 页)Application对象自动执行。如果你想在except子句中执行完一些任务之后调用缺省的异常处理,使用raise来重新触发异常到下一个句柄。3.7.4try except else 的使用try -except中的else子句不建议使用,因为它会打断所有的异常包括那些没有准 备的异常。3.8 类类型3.8.1 命名和格式类类型的名称应符合使用它们的目的。类型名字应加以前缀T以表明这是一个类型的定义例如:typeT

28、customer = class (TObject)类型的实例通常是没有前缀T的类型的名字一例如:varCustomer :Tcustomer;注意:查阅“构件类型的命名标准”来获得更多有关构件命名的信息。3.8.2域 命名/格式类的域名遵循与变量标识符同样的约定除了它们应以F为前缀,来表明这是一个域的名称。3.822 可视化所有的域都必需是私有的。想在类的范围之外存取域得通过属性来使用。3.8.3 方法 命名/格式方法的命名应遵循本文档中有关过程和函数的约定叙述。3.832 使用静态的方法如果使用一个静态的方法,那么该方法就不能被该类的后代类所继承。a沖羊炖Del

29、phi程序员代码编写标准指南第17页(共 30 页) 使用虚拟/动态的方法如果你打算该类的方法能被后代的类所继承就得使用虚拟的方法。只有在该方法有多个继承时(直接的或间接的)才使用动态的方法。例如,一个类类型包含一个可继承的方法, 而100个后代类要继承这种方法,那么这个方法就会动态地产生为100个后代类使用的内存。 使用抽象的方法如杲生一个类屮仗用抽象的方法,该类就不琵被创建匕貝有在那些永匹不会被创建的类中使用抽象的方法。 属性存取方法所有存取类內方法邮只能出现在类的private或protected部分。属性存取方法的 命名应遵循过程和函数的约定规

30、则。读取存取方法(方法读取器)必需以单词Get为前缀。写入存取方法(方法写入器)必需以单词Set为前缀。方法写入器的参数的名字应为Value,并且它的类型应是它所操作的属性的类型。例如:TSomeClass = class (TObject)privateFsomeField : In teger;protectedfunctionGetSomeField : In teger;procedureSetSomeField(Value : In teger);publicproperty SomeField : Integerread GetSomeField write SetSomeFiel

31、d;en d;3.8.4 属性 命名/格式屈性如果是表示为一个私有域的存取器的比那么它的名了应是它忙所操作的域的名了除去解释符F。加性的名予应是名风 不杲动i兀屈性表示是数据,帀方法表示耶是行为 数组类型的名称应为复数 一般情况卜屈性的名称应为单数。 使用存取的方法尽管没今要求,但还是建i文尽灵少地为-个表示私有城的旭杵帀使川写入77战方込a沖羊炖Delphi程序员代码编写标准指南第18页(共 30 页)四、文件4.1 工程文件4.1.1 命名工程文件应取个描述性的名字。例如,Delphi 4开发者指南错误管理器的工程名字是:DDGBugs.dpr。一个有关系统信息

32、的程序的名字就应象Syslnfo.dpr。4.2 窗体文件4.2.1 命名-仁体丈件的取曲应可以描述使用该窗体的目的,并加以后缀Frm。例如,一个“关于”的窗体的文件名应是AboutFrm.dpr。主窗体的文件名应是Mai nF rm.dpr。4.3 数据模板文件4.3.1 命名数据模板的耿常应能表示使用该数据模板的目的,它的名称应加以两个字符的后缀DM=例如,自定义数据模板的文件名字应为CustomersDM.dfm。4.4 远端数据模板文件4.4.1 命名迂.汩敖*片模权的取乞应孔表示使用该远端数据模板的目的,它的名称应加以三个字符的后缀RDM例如,自定义远端数据模板的文件名字应为Cust

33、omersRDM.dfm。4.5 Unit 文件4.5.1 通用 Unit 结构 unit 的名字Un it文件应取一个 可描述性的名字 。例如,包含应用程序主窗体的单元应叫做a沖羊炖Delphi程序员代码编写标准指南第19页(共 30 页)Mai nFrm.pas。 uses 子句讦i nteface部分的uses子句应包含在in terface部分中的代码所需要的单元。去掉那些Delphi可以自动加入到程序中的单元。-:implementation部分的uses子句应只包含在implementation部分中的代码所需要的单元的名字。去掉不必要的单元。4.5.1

34、.3 in terface部分in terface部分应包含只那些其它单元所需要存取类型的定义、变量、过程/函数的预定义等等。否则,就应放在impleme ntatio n部分定义。 implementation 部分impleme ntati on部分应包含那些只在本单元中私用的类型定义、变量、过程/函数定义等等。 initialization 部分不要在initialization部分放入耗时长的代码,这将使程序的第一个界面出现得比较缓慢。 finalization 部分忙卫二嘎探;【释敗讥忙Initialization部分所分配的任何资源。4.5

35、.2 窗体单元 命名个:和汨勺单元文件应拥有与它所对应的 窗体文件同样的名称。例如,“关于”窗体的 单元名称应为AboutFrm.pas,而主窗体的单元名称应为Ma in Frm.pas。4.5.3 数据模板单元 命名伞数邛模板为单元文件应拥有与它所对应的 数据模板文件同样的名称 。例如,一个自 定义数据模板单元的名称应为CustomersDM.pas。a沖科宦Delphi程序员代码编写标准指南第20页(共 30 页)4.5.4 般目的单元4.541 命名一殷H i:j甲-:讯取字城符介叵用沙单川的目的。例如,一个实用程序单元取名为BugUtilities.pas。

36、一个包含全局变量的单元取名为CustomerGlobals.pas。注意,该单元的名字不能与它的工程中所使用的所有包中的单元的名字相同。不赞成使用一般的或通用的单元名字。4.5.5 构件单元 命名构创单元.应放任独立的日录川将它们I心匸义构忙级成构*1集合的单元区分开來.它忙要永远同工程在不同的目录。单元名字应同它们的内容相符。注意:查阅“用户定义的构件”部分来获得更多有关构件命名标准的信息。4.6 文件头建议左所右源文件、工程文件、单兀等等中使用信总化文件头。一个良好的文件头应包含以下信息:版权著作的年、月、日五、窗体和数据模板5.1 窗体5.1.1 窗体类型命名标准窗低类星的

37、取出应能表达:吏.廿孩窗休怕H的。类型定义应加以前缀T。前缀后面跟随着 描述性的名字。最后,应加以Form后缀来描述名字。例如,一个“关于”的窗体的类型的名字应为:TAboutFrom = class (TForm);主窗体的定义为:a沖科宦Delphi程序员代码编写标准指南第21页(共 30 页)TMainForm =class (TForm);一个用户接入窗体的名字应象:TCustomerE ntryForm =class (TForm);5.1.2 窗体实例命名标准花咻实洌城兄没仃廿前綴T的相应类的名字。例如,对应于前面窗体类型而言,其实例的名字应为:类型名称实例名称TAboutForm

38、AboutFormTMai nF ormMai nFormTCustomerE ntryFormCustomerE ntryForm5.1.3 自动创建窗体只有主窗体可以是口动创建的除非有其它更好的壬白不这样做。所有其它的窗依必需从工程选项对话框中的自动创建列表中移走。查阅以下部分来获得更多的信息。5.1.4 模式窗体实例化函数所有的窗体单元都应包含-个窗体实例化函数,该函数川来创建、设茎模真地界示窗体,并释放窗体。该函数应返回窗体的模式结果。该函数要传递的参数应遵循本文档指定的“参数传递”标准。通过这种方式封装的函数性有助于代码的再利用和维护。单元中移走,并在窗体实例的函数中进行本地式地定义

39、。注意,这就意味着该窗体必需从工程/选项对话框中的自动创建列表中剔除。参考本文档后面的“自动 创建窗体”。例如,下面的单元展示了在GetUserData窗体中的一个函数。un it UserDataFrm;in terfaceuseswin dows,Messages, SysUtils, Classes, Graphics,Con trols,Forms,Dialogs, StdCtrls;typeTUserDataForm = class (TForm)edtUserName : TEdit;edtUserlD : TEdit;private Private declarations pu

40、blic Public declarati ons en d;functionGetUserData( var aUserName:String; var aUserID : Integer):a沖羊炖Delphi程序员代码编写标准指南第22页(共 30 页)Word;impleme ntati on$R *.DFM function GetUserData( var aUserName : String ; var aUserlD : Integer) word;varUserDataForm : TuserDataForm;beginUserDataForm := TuserDataFor

41、m.Create(Applicati on);tryUserDataForm.Caption :=Getting User Data;Result := UserDataForm.ShowModal;if (Result = mrOK)the nbeginaUserName := UserDataForm.edtUserName.Text;aUserID := StrToI nt(UserDataForm.edtUserlD.Text);end ;fin allyUserDataForm.Free;en d;en d;en d.5.2数据模板5.2.1 数据模板命名标准数据模板的取名要符合使用

42、该数据模板的目的。类型的定义应加以前缀T,后面紧接着描述性的名字,最后要加以后缀单词“DataModule”。例如,一个自定义的数据模板有时 候应该象:TCustomerDataModule =一个命令式的数据模板的名字应象:TOrdersDataModule =5.2.2 数据模板实例命名标准TCustomerDataModule CustomerDataModuleTOrdersDataModule OrdersDataModuleclass (TDataModule)class (TDataModule)数据模板实例的名称应是对应不带前缀言,其实例的名称应为:类型名称T的类型的名称。例如

43、,对于前面的窗体类型而实例名称a沖科宦Delphi程序员代码编写标准指南第23页(共 30 页)六、包6.1 使用运行包和设计包的比较运行时刻的包应只包含其它构件包所要求的单元或构件。另外,包含属性 和其它只为设计的代码应放入到设计时刻包中。注册单元应放在设计包中。6.2 文件命名标准包的名称应依照下面的例子:“iii lib vv .pkg”设计时刻包“iii std vv .pkg”运行时刻包字符“iii”表示一个3字符标识前缀。这个前缀用来表明公司、个人或其它有标识意 义的实体。字符“vv”表示为该包想要对应Delphi某个版本的包的版本号。注意,包的名字中包含“lib”或“std”的意

44、思是表明这是一个设计时刻包还是一个 运行时刻包。如果既是设计时刻包又是运行时刻包,该文件的命名是同上面一样的,例如,为Delphi4 开发者指南做的包的名称应为:DdgLib40.pkg-设计时刻包DdgStd40.pkg-运行时刻包七、构件7.1 用户自定义构件在标准构件中命名出来的构件的名称同在“类类型”部分定义中的一样定义成一个类类型,不同的是它们有一个3字符的指示前缀,这个前缀可以表示公司、个人或其它实体。例如,一个为Delphi 4开发者指南编写的时钟构件的名称定义为:TddgClock = class (TComp onent)注意,那三个前缀字符是小写的。7.2 构件单元构件单元

45、应只包含一个主要的构件, 一个主要的构件是指出现在构件栏中的构件。主要 构件的辅助构件/对象应放入到同一个单元中。/构件编辑器a沖羊炖Delphi程序员代码编写标准指南第24页(共 30 页)7.3 使用注册单元构件的注册过程应从构件本身的单元中剔除,并放入到一个独立的单元中。这个注册单元可以用来注册任何构件、属性编辑器、构件编辑器、专家器等。构件的注册只应在设计时刻包中进行,注册单元应包含在设计时刻包中而不应放在运行时刻包中。推荐使用的注册单元的名称是:XxxReg.pas上面的3个前缀字符“Xxx”用来表示一个公司、个人或任何其它的实体。例如,在Delphi 4开发者指南中的注册单元的名称

46、应为DdgReg.pas。7.4 构件实例命名约定所有的构件都应取个描述性的名称。在设计构件类型时应设计一个小写的前缀。使用前缀而不使用后缀的原因是在搜寻时,在对象检查器和代码探索器中搜寻构件的名字比搜寻构件的类型更容易实现。7.5 构件的前缀以下构件的前缀可以用来设计Delphi 4中的标准构件。请在此列表中加入第三方构件的前缀。7.5.1 Standard 页前缀构件mmTMai nMenupmTPopupMe nummiTMa inMen ultempmiTPopupMenultem前缀构件IblTLabeledtTEditmemTMemobtnTButt oncbTCheckBoxrb

47、TRadioBoxlbTListBoxcbTComboBoxscbTScrollBargbTGroupBoxrgTRadioGrouppnlTPa nela沖羊炖Delphi程序员代码编写标准指南第25页(共 30 页)cl TComma ndList7.5.2 Additional 页bbtnTBitBt nsbTSpeedButtonmeTMaskEditsgTStri ngGriddgTDrawGridimgTImageshpTShapebvlTBevelsbxTScrollBoxclbTCheckListboxsplTSplitterstxTStaticTextchtTChart7.5

48、.3 Win32 页tbcTTabCo ntrolpgcTPageCo ntrolilTImageListreTRichEditthrTTrackBarprbTProgressBarudTUpDow nhkTHotKeyaniTAn imatedtpTDateTimePickertvTTreeViewlvTListViewhdrTHeaderCo ntrol前缀构件stbTStatusBartlbTToolBarclbTCoolBar7.5.4 System 页tmTTimerpbTPai ntBoxmp TMediaPlayer olec TOleC on tai nera沖羊炖Delphi

49、程序员代码编写标准指南第26页(共 30 页)ddccTDDEClie ntltemddciTDDEClie ntltemddscTDDEServerCo nvddsiTDDEServerItem7.5.5 In ternet 页cskTClie ntSocketsskTServerSocketwbdTWebDispatcherPP tpdstpnmdtTPageProducerTQueryTableProducerTDataSetTableProducerTNMDayTimenecTNMEchonfTNMFi ngernftp nhttpnMsgTNMFtpTNMHttpTNMMsgnmsg

50、nn tpTNMMSGServTNMNNTPn popTNMPop3nuupsmtpnstTNMUUProcessorTNMSMTPTNMStrmn stsTNMStrmServntmTNMTimen udppskTNMUdpTPowerSockngs htmlTNMGe neralServerTHtmlurlTNMUrlsmlTSimpleMail7.5.6 Data Access 页前缀构件dsTDataSourcetblTTableqryTQuerya沖羊炖Delphi程序员代码编写标准指南第27页(共 30 页)sp dbTStoredProcTDataBasessnTSessi on

51、a沖羊炖Delphi程序员代码编写标准指南第28页(共 30 页)bmTBatchMoveusqlTUpdateSQL7.5.7 Data Controls 页dbgdbnTDBGridTDBNavigatordbt dbeTDBTextTDBEditdbmTDBMemodbiTDBImagedblbTDBListBoxdbcbTDBComboBoxdbchTDBCheckBoxdbrgdbllTDBRadioGroupTDBLookupListBoxdblcTDBLookupComboBoxdbredbcgdbchTDBRichEditTDBCtrlGridTDBChart7.5.8 Dec

52、ision Cube 页dcbTDecisi on CubedcqdcsTDecisi on QueryTDecisi on SourcedcpdcgdcgrTDecision PivotTDecisi on GridTDecisi on Graph7.5.9 QReport 页qrqrsdqrbqrcbTQuickReportTQRSubDetailTQRBa ndTQRChildBa ndqrgqrl前缀qrtqreTQRGroup TQRLabel构件TQRTextTQRExprqrsTQRSysDataqrm qrrtTQRMemoTQRRichTexta沖羊炖Delphi程序员代码编

53、写标准指南第29页(共 30 页)qrdrTQRDBRichTextqrshTQRShapeqriTQRImageqrdiTQRDBMImageqrcrTQRCompositeReportqrpTQRPreviewqrchTQRChart7.5.10 Dialogs 页对话框构件是由构件封装的真正的窗体,因此,它们应遵循窗体的命名约定。类型已由 构件的名称定义。它的实例的名称是Delphi自动生成的类型实例名字去掉数字后缀。举例如下:实例名字Ope nDialogSaveDialogOpen PictureDialogSavePictureDialog Fon tDialog ColorDia

54、logPrin tSetupDialogFin dDialogReplaceDialog7.5.11 Win 3.1 页dbllTDBLookupListdblcTDBLookupCombotsTTabSetolTOutli netnbTTabbedNoteBooknbTNoteBookhdrTHeaderflbTFileListBoxdlbTDirectoryListBoxdcbTDriveComboBoxfcbTFliterComboBox7.5.12 Samples 页ggTGauge前缀 构件cgTColorGridspb TSpi nEdit类型TOpe nDialogTSaveDi

55、alogTOpenPictureDialogTSavePictureDialogTFon tDialogTColorDialogTPri ntSetupDialogTFi ndDialogTReplaceDialoga沖羊炖Delphi程序员代码编写标准指南第30页(共 30 页)spedolTSp in EditTDirectoryOutlinecalTCale ndaribeaTIBEve ntAlerter7.5.13 ActiveX 页cfxTChartFXvspTVSSpellf1bTF1BookvtcTVTChartgrpTGraph7.5.14 Midas 页prvcdsTPro

56、viderTClie ntDataSetqcdsdcomTQueryClie ntDataSetTDCOMCo nn ecti onoleeTOleE nterpriseC onn ectionsckTSocketC onnectionrmsTRemoteServermidTmidasC onn ecti onDelphi程序员代码编写标准指南第31页(共 30 页)八、注释一段好的程序应有足够的注释。它大大提高了编码的可读性,使程序更易于维护。 一般情况下在编码中应加入 文件头注释,函数头注释,块注释(数据块),及关键语句注释。文件头注释和函数头注释与程序代码之间应留有一空行,使编码结构更清

57、晰。8.1 文件头注释内容及格式:*文件名:描 述:(说明该文件的主要处理功能)公共函数:(列出所用到的公共函数的类型、函数名及参数)调用模块:(说明所用到的其它模块、对象、函数等,是否对调用模块进行了环境保护) 数据库:(列出用到的数据库,何种操作) 文 件:(列出用到的文件,何种操作) 作 者:建立日期:XXXX年XX月XX日修改者:修改日期:XXXX年XX月XX日修改内容:(简要说明修改的原因、内容,如改动很大,将改动前的源程序列在文件头注释 中)修改者:修改日期:修改内容:(从“修改者”到“修改内容”部分根据修改次数添加)*8.2 函数或过程头注释内容及格式:*函数名:说 明:(说明该函数或过程的主要功能)输入参数:(说明输入参数名称、数据类型、参数功能描述) 输出参数:(说明输出参数名称、数据类型、参数功能描述) 返 回 值:(说明返回值的类型、值域,过程没有此项) 全局变量:(列出用到的全局变量,取值,是否保护)数据库:(列出用到的数据库,何种操作)(列出用到的文件,何种操作)文件:调用:(列出被调用函数的函数名及参数)作者:建立日期:XXXX年XX月XX日修改者:修改日期:XXXX年XX月XX日修改内容: (简要说明修改的原因、内容,如改动很大,将改动前的源程序列在文件头注释a沖羊炖Delphi程序员代码编写标准指南

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论