程序员代码编写标准指南汇总

上传人:无*** 文档编号:186780936 上传时间:2023-02-09 格式:PDF 页数:26 大小:1.16MB
收藏 版权申诉 举报 下载
程序员代码编写标准指南汇总_第1页
第1页 / 共26页
程序员代码编写标准指南汇总_第2页
第2页 / 共26页
程序员代码编写标准指南汇总_第3页
第3页 / 共26页
资源描述:

《程序员代码编写标准指南汇总》由会员分享,可在线阅读,更多相关《程序员代码编写标准指南汇总(26页珍藏版)》请在装配图网上搜索。

1、Delphi 6Delphi 6 程序员代码编写标准指南程序员代码编写标准指南一、序言一、序言二、通用源代码格式规则二、通用源代码格式规则2.1 缩格2.2 页边空格2.3 Begin End 配对2.4 代码文件中通用符号含义三、三、Object PascalObject Pascal3.1 括号3.2 保留字和关键字3.3 过程和函数(例程)3.3.1 命名/格式化 3.3.2 形式参数 3.3.2.1 格式化 3.3.2.2 命名 3.3.2.3 参数的排序 3.3.2.4 常量参数 3.3.2.5 名称的冲突3.4 变量 3.4.1 变量的命名和格式 3.4.2 局部变量 3.4.3

2、全局变量的使用3.5 类型 3.5.1 大写约定 3.5.1.1 浮点指针类型 3.5.1.2 枚举类型 3.5.1.3 变数和 ole 变数类型 3.5.2 结构类型 3.5.2.1 数组类型 3.5.2.2 记录类型3.6 语句 3.6.1 if 语句 3.6.2 case 语句 3.6.2.1 一般性话题 3.6.2.2 格式 3.6.3 while 语句 3.6.4 for 语句 3.6.5 repeat 语句第 1 页 共 26页 3.6.6 with语句 3.6.6.1 一般话题 3.6.6.2 格式3.7 结构异常处理 3.7.1 一般话题 3.7.2 tryfinally 的使

3、用 3.7.3 tryexcept 的使用 3.7.4 tryexceptelse 的使用3.8 类类型 3.8.1 命名和格式 3.8.2 域 3.8.2.1 命名/格式 3.8.2.2 可视化 3.8.3 方法 3.8.3.1 命名/格式 3.8.3.2 使用静态的方法 3.8.3.3 使用虚拟/动态的方法 3.8.3.4 使用抽象的方法 3.8.3.5 属性存取方法 3.8.4 属性 3.8.4.1 命名/格式 3.8.4.2 使用存取的方法4.1 工程文件 4.1.1 命名4.2 窗体文件 4.2.1 命名4.3 数据模板文件 4.3.1 命名4.4 远端数据模板文件 4.4.1 命名

4、4.5 Unit 文件 4.5.1 通用 Unit 结构 4.5.1.1 unit的名字 4.5.1.2 uses子句 4.5.1.3 interface部分 4.5.1.4 implementation部分 4.5.1.5 initialization部分 4.5.1.6 finalization部分 4.5.2 窗体单元第 2 页 共 26页四、文件四、文件 4.5.2.1 命名 4.5.3 数据模板单元 4.5.3.1 命名 4.5.4 一般目的单元 4.5.4.1 命名 4.5.5 构件单元 4.5.5.1 命名4.6 文件头五、窗体和数据模板五、窗体和数据模板5.1 窗体 5.1.1

5、 窗体类型命名标准 5.1.2 窗体实例命名标准 5.1.3 自动创建窗体 5.1.4 模式窗体实例化函数5.2 数据模板 5.2.1 数据模板命名标准 5.2.2 数据模板实例命名标准六、包六、包6.1 使用运行包和设计包的比较6.2 文件命名标准七、构件七、构件7.1 用户自定义构件7.2 构件单元7.3 使用注册单元7.4 构件实例命名约定7.5 构件的前缀7.6 Standard页7.7 Additional页7.8 Win32页7.9 System页7.10 Internet页7.11 Data Access页7.12 Data Controls页7.13 Decision Cube

6、页7.14 Qreport页7.15 Dialogs页7.16 Win3.1页7.17 Samples页7.18 ActiveX页7.19 Midas页7.20 ADO页7.21 InterBase页7.22 InternetExpress 页7.23 FastNet页第 3 页 共 26页一、序言一、序言本文档详述了使用 JAVA 进行编程的代码编写标准。本文档的目的在于阐述一种方法,通过该方法,开发小组可以在他们所编写的代码中保持一贯的风格。这样做的目的是使在开发小组中的每一个程序员都可以明白其他程序员的代码。这有助于提高代码编写的可读性和使用的一贯性。二、通用源代码格式规则二、通用源代码

7、格式规则2.12.1 缩格缩格tab 字符代表 4 个空格宽度。代码的每一层次缩进量为一个tab(4 个空格)2.22.2 页边空格页边空格页边空格会被设置成 80 字符宽。通常,源码不会超出这个边界,但这个方针会有一些弹性。不管是否有可能,那些超出到另一行的语句会在一个逗号或其他操作符之后与前面的语句相连。当一个语句被打断相连时,它应比原来的那一行语句缩进两个字符。2.32.3 代码文件中通用符号含义代码文件中通用符号含义/四个斜杠代表当前有未实现的内容,相当于占位符三、三、ObjectObject3.13.1 括号括号不要在括号与括号之间的字符中间留下空格。下面的例子示范了错误的与正确地使

8、用括号中的空格:main(Aparameter);/错误main(Aparameter);/正确3.33.3 函数(例程)函数(例程)第 4 页 共 26页3.3.13.3.1 命名命名/格式化格式化1.1.变量的命名变量的命名命名应尽量表达变量的含义,大小写遵循Java 的驼峰规则。一个正确格式的变量名称:publicpublic userName;一个不合适的变量名称:publicpublic UserName;例程的名称应该同它的内容相符。一个会导致某个行为的例程应以动词开头。例如:procedureprocedure FormatHardDrive;一个用于设置输入参数的例程应以单词s

9、et 作为前缀,例如:procedureprocedure SetUserName;一个用来接收某个值的例程应以单词get 作为前缀,例如:procedureprocedure GetUserName:string;3.3.23.3.2 形式参数形式参数3.3.2.13.3.2.1 格式化格式化如果有的话,相同类型的形参应合并在一个语句中:procedure procedure Foo(Param1,Param2,Param3:Integer;Param4:stringstring);3.3.2.23.3.2.2 命名命名所有形参的名字应是十分符合它们所代表的意义,特别是应该以传送到例程中的标

10、志符的名称为基础。一个好的参数名称应以字符a 为前缀 例如:procedure procedure SomeProc(aUserName:stringstring;aUserAge:integer);“a”前缀按约定表示该参数的名称是与类类型中的一个属性或域的名称相对应的。3.3.2.33.3.2.3 参数的排序参数的排序下面的形参的顺序重点说明了注册者调用约定调用的好处。最常用的参数应放在第一位,其它的参数应按从左到右的顺序排列。输入参数列表应放在输出参数列表的左边。将通用的参数放在特殊参数的左边,例如:procedureprocedure SomeProc(aPlanet,aContine

11、nt,aCountry,aState,aCity)排序有可能有些例外,比如事件的处理。类型为TObject 的 Sender 参数经常放在第一位。3.3.2.43.3.2.4 常量参数常量参数第 5 页 共 26页当一个参数为记录型、数组类型、ShortString、或接口类型并且在例程中不被改变时,这些参数应做上常量标记。这样做会让编译器更加有效率的产生有关这些不改变的参数的代码。而例程中另外一些非变参数也可常量来传送。尽管这样做没有产生任何效果和提高效率,这将会给调用例程的使用者提供更多的信息。3.3.2.53.3.2.5 名称的冲突名称的冲突当使用拥有两个名称相同的例程的两个单元时,如果

12、你调用该例程时,在 usesuses 子句中排在后面的单元中的例程将会被调用。为了解决这种“在usesuses 子句上的模糊”冲突,要在调用该例程时写上相关的单元的前缀,例如:SysUtils.FindClose(SR);或Windows.FindClose(Handle);3.43.4 变量变量3.4.13.4.1 变量的命名和格式变量的命名和格式变量的命名应以使用它们的目的相符循环控制变量应采用一个单独的字符作为名字,比如 I,J,或 K,也可以采用更加有意义的名字,比如 UserIndex。逻辑变量的名字应能充分表达准确的真或假的意思。3.4.23.4.2 局部变量局部变量一个过程中的局

13、部变量应遵循所有其它变量的使用和命名约定。临时变量的取名应合理。局部变量应加上前缀 tmp,如 tmpUserName。如果必须的话,在一进入例程就应初始化局部变量。局部的AnsiString 变量会自动初始化为一个空的字符串。局部接口和派分接口类型变量将会自动初始化为nil,并且局部变数和 ole 变数类型变量会自动初始化为 Unassigned3.4.33.4.3 全局变量的使用全局变量的使用使用全局变量是不推荐的。但是,在某些时候还是必须使用,而且它们也只应在必须使用的时候才使用。在这种时候,你应努力只在一段上下文范围内使用全局变量。例如,一个全局变量只应在一个单元的 implemnta

14、tion 部分内是全局的。如果打算在多个单元类使用全局数据,你应将它们移到一个公共的单元中然后被其它所有单元使用。第 6 页 共 26页全局变量可以在 var 子句中直接初始化为一个值。记住,所有的全局数据会自动初始化为0,因此不要将全局变量初始化为一个“空”值比如 0、nil、Unassigned、等等。这样做的一个理由是因为零初始化的全局数据在 exe 文件中不会占据任何空间。零初始化数据被存储在一个虚拟的数据段,它在应用程序启动后被分配在一段内存中。非零初始化的全局数据在硬盘的exe 文件占用空间。全局变量命名应加上前缀glb,如 glbUserName。3.53.5 类型类型3.5.1

15、3.5.1 大写约定大写约定如果类型的名字是保留字,那么它应全部小写。Win32 API 类型通常全部大写,并且你必须遵循在 Windows.pas 或其他 API 单元中的详细类型名称的约定。对于其他变量名字,第一个字母应为大写,而其他字母应错落有致。下面是一些例子:varvar MyString:stringstring;/保留字WindowHandle:HWND;/Win32 API类型I:Integer;/在System单元中引进的类型标识符3.5.1.13.5.1.1 浮点指针类型浮点指针类型不推荐使用 Real 类型,因为它的存在只是为了向前兼容早期的Pascal 代码。在通常情况

16、下用 Double 来实现浮点指针的需要。并且,Double 对处理器和总线而言是做了最优化处理的,它也是 IEEE 中定义的标准数据格式。只有当需要的范围超出Double 所定义的范围时才使用 Extended。Extended 是 intel 定义的类型且在 Java 中不支持。只有当浮点指针变量的实际字节大小有其意义时才使用Single。(比如当使用另一种语言的DLLs时)。3.5.1.23.5.1.2 枚举类型枚举类型枚举类型的名字需符合使用该类型的目的。该类型的名字需以字符 T 为前缀,以表明这是一个类型。枚举类型中的标识符列表必须包含两个或三个字符的前缀来对应于该枚举类型的名字 例

17、如:TSongType=(stRock,stClassical,stCountry,stAlternative,stHeavyMetal,stRB);一个枚举类型的实例的名字应与不要前缀的枚举类型(SongType)相同,除非有更好的原因来赋予该变量更特殊的名字,比如:FavoriteSongType1,FavoriteSongType2 等等。3.5.1.33.5.1.3 变数和变数和 oleole变数类型变数类型通常不建议使用变数和 Ole 变数类型。但在只有运行时刻才能知道数据类型的程序中必须第 7 页 共 26页使用该类型,这种情形多出现在 COM 和数据库开发中。Ole 变数使用在以

18、 COM 为基础的编程中例如自动化和 ActiveX 控制,而变数使用在非 COM 的编程中,这是因为变数可以十分有效地存储本地 Delphi 字符串(同一个字符串变量一样),但 Ole 变数会将所有的字符串转换为 Ole 字符串(WideChar 字符串)并且并不实例运算 它们永远拷贝。3.5.23.5.2 结构类型结构类型3.5.2.13.5.2.1 数组类型数组类型数组类型的名字需符合它们使用的目的。该类型的名字必须加以前缀T。如果须声明该数组类型的指针,那么该指针需加以前缀P 而且应立即声明在该数组声明的前面。例如:typetype PCycleArray=TCycleArray;TC

19、ycleArray=arrayarray1100 ofof integer;在实际应用中,数组的变量实例的名称应是其类型的名字去掉前缀T。3.5.2.23.5.2.2 记录类型记录类型记录类型的名字应符合使用它们的目的。其类型的声明应加以前缀T。如果要声明该记录类型的指针,就应加以前缀P 并且应紧靠在类型声明的前面声明。例如:typetype PEmployee=TEmployee;TEmployee=recordrecord EmployeeName:stringstring;EmployeeRate:Double;endend;3.63.6 语句语句3.6.13.6.1 ifif 语句语句

20、在 if/then/else 语句中最常发生的行为应放在then 子句中,而其它发生可能性较小的行为应放在 else 子句中。尽量避免使用嵌套的 if 语句,在这种情形下应用多个if 语句来判断各种可能。不要使用 if 嵌套超过五级深度。应使代码编写得更加清晰、明了。不要在 if 语句中使用不必要的圆括号。如果在if语句中有多个条件需测试,这些条件应按计算强度由少到多的顺序从左到右排列。这样做能使编译器在编译代码时获得布尔估算逻辑的捷径,从而使你的代码获得最佳的优第 8 页 共 26页化。举例来说,如果条件 1 快过条件 2,而条件 2 快过条件 3,那么在 if 语句中的排列应是:ifif

21、条件 1 andand 条件 2 andand 条件 3 thenthen3.6.23.6.2 casecase 语句语句3.6.2.13.6.2.1 一般性话题一般性话题在一个 case 语句中的各个独立的单元应以数字或字母顺序排列。每一个 case 单元的动作行为应保持简单而不应该超过四到五行代码。如果所要执行的动作过于复杂应采用独立的过程或函数。Case 语句中的 else 子句只有当需要缺省行为或处理错误时才使用。3.6.2.23.6.2.2 格式格式case 语句应遵循其它结构的缩格和命名约定。3.6.33.6.3 whilewhile 语句语句在一个 while 语句中不建议使用

22、Exit 过程来跳出循环,尽量仅使用循环条件来跳出循环。在一个while循环中所用的初始化代码应紧靠在进入while循环前面出现而不要被其它不相关的语句隔开。任何结束后的处理应在循环之后立即进行。3.6.43.6.4 forfor 语句语句for 语句只有当循环次数已知的情况下才能取代while 语句使用。3.6.53.6.5 repeatrepeat 语句语句repeat 语句的使用同 while 语句一样,并且遵循同样的通用方针。3.6.63.6.6 withwith语句语句3.6.6.13.6.6.1 一般话题一般话题第 9 页 共 26页with 语句应节省使用,并且带有大量的警告。避

23、免过度使用with 语句并且在 with 语句中小心使用多个对象、记录等等。例如:withwith Record1,Record2 dodo这些事情会使程序员感到困惑并难以发现问题所在。3.6.6.23.6.6.2 格式格式with 语句遵循本文档所说明的命名约定和缩格的格式规则。3.73.7 结构异常处理结构异常处理3.7.13.7.1 一般话题一般话题异常的处理大量地使用在错误纠正和资源保护方面。这就是说一旦资源被分配,一个tryfinally 必需加以使用来保证该资源被正确的释放。这种异常的保护也是指在一个单元的 initializition/finalization 或一个对象的 co

24、nstructor/destructor 中进行资源的分配和释放。设计过程中应尽量减少通过返回值判断结果,应通过触发异常模式处理错误。3.7.23.7.2 trytry finallyfinally 的使用的使用任何情形下,每一次的分配都应跟随一个tryfinally。举例来说,下面的代码会造成可能的错误:SomeClass1:=TSomeClass.Create;SomeClass2:=TSomeClass.Create;trytry do some code finallyfinally SomeClass1.Free;SomeClass2.Free;endend;一个更安全更合适的分配过

25、程应是:SomeClass1:=TSomeClass.Create;trytry SomeClass2:=TsomeClass.Create;trytry do some code finallyfinally SomeClass2.Free;endend;finallyfinally第 10 页 共 26页 SomeClass1.Free;endend;3.7.33.7.3 trytry exceptexcept 的使用的使用只有当在异常被触发而你想执行一些任务时才使用 tryexcept。通常,你没有必要为了只是简单地在屏幕上显示一个错误信息而使用 tryexcept 语句,因为这会被Ap

26、plication 对象自动执行。如果你想在 except 子句中执行完一些任务之后调用缺省的异常处理,使用 raise 来重新触发异常到下一个句柄。3.7.43.7.4 trytry exceptexcept elseelse 的使用的使用tryexcept 中的 else 子句不建议使用,因为它会打断所有的异常包括那些你没有准备的异常。3.83.8 类类型类类型3.8.13.8.1 命名和格式命名和格式类类型的名称应符合使用它们的目的。类型名字应加以前缀 T 以表明这是一个类型的定义 例如:typetypeTCustomer=classclass(TObject)类型的实例通常是没有前缀T

27、 的类型的名字 例如:varvar Customer:TCustomer;注意:查阅“构件类型的命名标准”来获得更多有关构件命名的信息。3.8.23.8.2 域域3.8.2.13.8.2.1 命名命名/格式格式类的域名遵循与变量标识符同样的约定除了它们应以F 为前缀,来表明这是一个域的名称。3.8.2.23.8.2.2 可视化可视化所有的域都必需是私有的。想在类的范围之外存取域得通过属性来使用。3.8.33.8.3 方法方法3.8.3.13.8.3.1 命名命名/格式格式第 11 页 共 26页方法的命名应遵循本文档中有关过程和函数的约定叙述。3.8.3.23.8.3.2 使用静态的方法使用静

28、态的方法如果使用一个静态的方法,那么该方法就不能被该类的后代类所继承。3.8.3.33.8.3.3 使用虚拟使用虚拟/动态的方法动态的方法如果你打算该类的方法能被后代的类所继承就得使用虚拟的方法。只有在该方法有多个继承时(直接的或间接的)才使用动态的方法。例如,一个类类型包含一个可继承的方法,而100 个后代类要继承这种方法,那么这个方法就会动态地产生为100 个后代类使用的内存。3.8.3.43.8.3.4 使用抽象的方法使用抽象的方法如果在一个类中使用抽象的方法,该类就不能被创建。只有在那些永远不会被创建的类中使用抽象的方法。3.8.3.53.8.3.5 属性存取方法属性存取方法所有存取类

29、的方法都只能出现在类的private 或 protected 部分。属性存取方法的命名应遵循过程和函数的约定规则。读取存取方法(方法读取器)必需以单词 Get 为前缀。写入存取方法(方法写入器)必需以单词Set 为前缀。方法写入器的参数的名字应为Value,并且它的类型应是它所操作的属性的类型。例如:TSomeClass=classclass(TObject)privateprivate FsomeField:Integer;protectedprotectedfunctionfunction GetSomeField:Integer;procedureprocedure SetSomeFie

30、ld(Value:Integer);publicpublic property propertySomeField:Integer readread GetSomeField writewrite SetSomeField;end;end;3.8.43.8.4 属性属性3.8.4.13.8.4.1 命名命名/格式格式属性如果是表示为一个私有域的存取器的话,那么它的名字应是它们所操作的域的名字除去解释符 F。属性的名字应是名词,不是动词。属性表示的是数据,而方法表示的是行为。数组类型的名称应为复数。一般情况下属性的名称应为单数。第 12 页 共 26页3.8.4.23.8.4.2 使用存取的方法

31、使用存取的方法尽管没有要求,但还是建议尽量少地为一个表示私有域的属性而使用写入存取方法。四、文件四、文件4.14.1 工程文件工程文件4.1.14.1.1 命名命名工程文件应取个描述性的名字。例如,错误管理器的工程名字是:Bugs.dpr。一个有关系统信息的程序的名字就应象 SysInfo.dpr。4.24.2 窗体文件窗体文件4.2.14.2.1 命名命名一个窗体文件的取名应可以描述使用该窗体的目的,并加以后缀Frm。例如,一个“关于”的窗体的文件名应是 AboutFrm.dpr。主窗体的文件名应是 MainFrm.dpr。如果一个工程中除了窗体文件和单元文件外没有其它类型文件,后面的 Fr

32、m 后缀也可以不用,下文所述其它文件类型依然。4.34.3 数据模板文件数据模板文件4.3.14.3.1 命名命名数据模板的取名应能表示使用该数据模板的目的,它的名称应加以两个字符的后缀 DM。例如,自定义数据模板的文件名字应为CustomersDM.dfm。4.44.4 远端数据模板文件远端数据模板文件4.4.14.4.1 命名命名远端数据模板的取名应能表示使用该远端数据模板的目的,它的名称应加以三个字符的后缀第 13 页 共 26页RDM。例如,自定义远端数据模板的文件名字应为CustomersRDM.dfm。4.54.5 Unit Unit 文件文件4.5.14.5.1 通用通用 Uni

33、tUnit 结构结构4.5.1.14.5.1.1 unitunit 的名字的名字Unit 文件应取一个可描述性的名字。例如,包含应用程序主窗体的单元应叫做MainFrm.pas。4.5.1.24.5.1.2 usesuses 子句子句在 interface 部分的 uses 子句应包含在 interface 部分中的代码所需要的单元。去掉那些 Delphi 可以自动加入到程序中的单元。在 implementation部分的 uses 子句应只包含在implementation部分中的代码所需要的单元的名字。去掉不必要的单元。4.5.1.34.5.1.3 interfaceinterface 部

34、分部分interface 部分应包含只那些其它单元所需要存取类型的定义、变量、过程/函数的预定义等等。否则,就应放在implementation 部分定义。4.5.1.44.5.1.4 implementationimplementation部分部分implementation 部分应包含那些只在本单元中私用的类型定义、变量、过程/函数定义等等。4.5.1.54.5.1.5 initializationinitialization部分部分不要在 initialization 部分放入耗时长的代码,这将使程序的第一个界面出现得比较缓慢。4.5.1.64.5.1.6 finalizationfin

35、alization 部分部分在这里要保证释放你在Initialization 部分所分配的任何资源。4.5.24.5.2 窗体单元窗体单元4.5.2.14.5.2.1 命名命名第 14 页 共 26页一个窗体的单元文件应拥有与它所对应的窗体文件同样的名称。例如,“关于”窗体的单元名称应为 FrmAbout.pas,而主窗体的单元名称应为FrmMain.pas。4.5.34.5.3 数据模板单元数据模板单元4.5.3.14.5.3.1 命名命名一个数据模板的单元文件应拥有与它所对应的数据模板文件同样的名称。例如,一个自定义数据模板单元的名称应为DMCustomers.pas。4.5.44.5.4

36、 一般目的单元一般目的单元4.5.4.14.5.4.1 命名命名一般目的单元的取名应符合使用该单元的目的。例如,一个实用程序单元取名为BugUtilities.pas。一个包含全局变量的单元取名为CustomerGlobals.pas。注意,该单元的名字不能与它的工程中所使用的所有包中的单元的名字相同。不赞成使用一般的或通用的单元名字。4.5.54.5.5 构件单元构件单元4.5.5.14.5.5.1 命名命名构件单元应放在独立的目录,以将它们同定义构件组或构件集合的单元区分开来。它们要永远同工程在不同的目录。单元名字应同它们的内容相符。注意:查阅“用户定义的构件”部分来获得更多有关构件命名标

37、准的信息。4.64.6 文件头文件头建议在所有源文件、工程文件、单元等等中使用信息化文件头。一个良好的文件头应包含以下信息:版权著作的年、月、日作者用途五、窗体和数据模板五、窗体和数据模板第 15 页 共 26页5.15.1 窗体窗体5.1.15.1.1 窗体类型命名标准窗体类型命名标准窗体类型的取名应能表达使用该窗体的目的。类型定义应加以前缀T。前缀后面跟随着描述性的名字。最后,应加以 Form 后缀来描述名字。例如,一个“关于”的窗体的类型的名字应为:TAboutForm=classclass(TForm);主窗体的定义为:TMainForm=classclass(TForm);一个用户接

38、入窗体的名字应象:TCustomerEntryForm=classclass(TForm);5.1.25.1.2 窗体实例命名标准窗体实例命名标准窗体实例应是没有带前缀T 的相应类的名字。例如,对应于前面窗体类型而言,其实例的名字应为:类型名称类型名称实例名称实例名称TAboutForm AboutForm TMainForm MainForm TCustomerEntryForm CustomerEntryForm5.1.35.1.3 自动创建窗体自动创建窗体只有主窗体可以是自动创建的除非有其它更好的理由不这样做。所有其它的窗体必需从工程选项对话框中的自动创建列表中移走。查阅以下部分来获得更

39、多的信息。5.1.45.1.4 模式窗体实例化函数模式窗体实例化函数所有的窗体单元都应包含一个窗体实例化函数,该函数用来创建、设置、模式地显示窗体,并释放窗体。该函数应返回窗体的模式结果。该函数要传递的参数应遵循本文档指定的“参数传递”标准。通过这种方式封装的函数性有助于代码的再利用和维护。该窗体的变量要从单元中移走,并再窗体实例的函数中进行本地式地定义。注意,这就意味着该窗体必需从工程/选项对话框中的自动创建列表中剔除。参考本文档后面的“自动创建窗体”。例如,下面的单元展示了再GetUserData 窗体中的一个函数。第 16 页 共 26页*用户登录窗口 *Designer:作者名 Ori

40、ginal Place:*Create Date:2000/4/4 Now Version:1.2 *Modification Time:2000/4/11 *=*unitunit UserData;interfaceinterface uses useswindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;typetype TUserDataForm TUserDataForm 这个窗体对象用于获取用户信息输入,进而检查用户权限这个窗体对象用于获取用户信息输入,进而检查用户权限edtUserNam

41、e 接受用户名称,能自动切换至中文输入法(输入法从系统配置获取)TUserDataForm=classclass(TForm)edtUserName:TEdit;edtUserID:TEdit;privateprivate Private declarations publicpublic Public declarations end;end;functionfunction GetUserData(varvar aUserName:StringString;varvar aUserID:Integer):Word;implementationimplementation$R*.DFM fu

42、nctionfunction GetUserData输入aUserName 用户名称aUserID -用户标识号返回值0 成功1 无此用户名第 17 页 共 26页2 其他错误边界条件aUserID 范围 110000异常 exceptionNoUser exceptionNoUserIDfunctionfunction GetUserData(varvar aUserName:StringString;varvar aUserID:Integer):word;varvar UserDataForm:TUserDataForm;beginbegin UserDataForm:=TUserDat

43、aForm.Create(Application);trytry UserDataForm.Caption:=Getting User Data;Result:=UserDataForm.ShowModal;ifif(Result=mrOK)thenthen begin begin aUserName:=UserDataForm.edtUserName.Text;aUserID:=StrToInt(UserDataForm.edtUserID.Text);endend;finallyfinally UserDataForm.Free;end;end;end;end;end.end.5.25.2

44、 数据模板数据模板5.2.15.2.1 数据模板命名标准数据模板命名标准数据模板的取名要符合使用该数据模板的目的。类型的定义应加以前缀T,后面紧接着描述性的名字,最后要加以后缀单词“DataModule”。例如,一个自定义的数据模板有时候应该象:TCustomerDataModule=classclass(TDataModule)一个命令式的数据模板的名字应象:TOrdersDataModule=classclass(TDataModule)5.2.25.2.2 数据模板实例命名标准数据模板实例命名标准数据模板实例的名称应是对应不带前缀T 的类型的名称。例如,对于前面的窗体类型而言,其实例的名

45、称应为:第 18 页 共 26页类型名称类型名称实例名称实例名称 TCustomerDataModule CustomerDataModule TOrdersDataModule OrdersDataModule六、包六、包6.16.1 使用运行包和设计包的比较使用运行包和设计包的比较运行时刻的包应只包含其它构件包所要求的单元或构件。另外,包含属性/构件编辑器和其它只为设计的代码应放入到设计时刻包中。注册单元应放在设计包中。6.26.2 文件命名标准文件命名标准包的名称应依照下面的例子:“iiiiiilibvvvv.pkg”设计时刻包“iiiiiistdvvvv.pkg”运行时刻包字符“iii

46、”表示一个3 字符标识前缀。这个前缀用来表明公司、个人或其它有标识意义的实体。如 jm0字符“vv”表示为该包想要对应Delphi 某个版本的包的版本号。注意,包的名字中包含“lib”或“std”的意思是表明这是一个设计时刻包还是一个运行时刻包。如果既是设计时刻包又是运行时刻包,该文件的命名是同上面一样的,例如,名称应为:jm0Lib40.pkg 设计时刻包jm0Std40.pkg 运行时刻包七、构件七、构件7.17.1 用户自定义构件用户自定义构件在标准构件中命名出来的构件的名称同在“类类型”部分定义中的一样定义成一个类类型,不同的是它们有一个 3 字符的指示前缀,这个前缀可以表示公司、个人

47、或其它实体。例如,一个时钟构件的名称定义为:第 19 页 共 26页Tjm0Clock=classclass(TComponent)注意,那三个前缀字符是小写的。7.27.2 构件单元构件单元构件单元应只包含一个主要的构件,一个主要的构件是指出现在构件栏中的构件。主要构件的辅助构件/对象应放入到同一个单元中。7.37.3 使用注册单元使用注册单元构件的注册过程应从构件本身的单元中剔除,并放入到一个独立的单元中。这个注册单元可以用来注册任何构件、属性编辑器、构件编辑器、专家器等。构件的注册只应在设计时刻包中进行,注册单元应包含在设计时刻包中而不应放在运行时刻包中。推荐使用的注册单元的名称是:Xx

48、xReg.pas上面的 3 个前缀字符“Xxx”用来表示一个公司、个人或任何其它的实体。例如,注册单元的名称应为 jm0Reg.pas。7.47.4 构件实例命名约定构件实例命名约定所有的构件都应取个描述性的名称。由 Delphi 创建的缺省名的构件不会被遗弃。在设计构件类型时应设计一个小写的前缀。使用前缀而不使用后缀的原因是在搜寻时,在对象检查器和代码探索器中搜寻构件的名字比搜寻构件的类型更容易实现。7.57.5 构件的前缀构件的前缀以下构件的前缀可以用来设计 Delphi 6 中的标准构件。在此列表中加入了第三方构件的前缀。由于这些前缀不好记,所以也可采用比较长的构件命名方法,而忽略一下内

49、容,如OkButton、CancelButton、StartDateTimePicker,即后面是构件的类型,前面是构件的名称,这种命名方法也是 Borland 的标准命名方法;对于同一类型的构件,如TButton、TSpeedButton、TBitBtn 可以用同样的后缀 Button;除了在代码中不会设计的界面构面,如Label、Panel 等,永远不要用一大堆的Button1、Button2 等 Delphi 默认的名称。7.67.6 Standard Standard 页页前缀前缀构件构件fm TFrame第 20 页 共 26页mm TMainMenupm TPopupMenummi

50、 TMainMenuItempmi TPopupMenuItemlbl TLabeledt TEditmem TMemobtn TButtoncb TCheckBoxrb TRadioBoxlb TListBoxcb TComboBoxscb TScrollBargb TGroupBoxrg TRadioGrouppnl TPanelal TActionList7.77.7 Additional Additional 页页bbtn TBitBtnsb TSpeedButtonme TMaskEditsg TStringGriddg TDrawGridimg TImageshp TShapebv

51、l TBevelsbx TScrollBoxclb TCheckListboxspl TSplitterstx TstaticTextcb TcontrolBarae TApplicationEventscht TChart7.87.8 Win32Win32 页页tbc TTabControlpgc TPageControlil TImageListre TRichEditthr TTrackBarprb TProgressBarud TUpDownhk THotKey第 21 页 共 26页ani TAnimatedtp TDateTimePickertv TTreeViewlv TList

52、Viewhdr TheaderControlstb TStatusBartlb TToolBarclb TcoolBarps TPageScroller7.97.9 SystemSystem 页页tm TTimerpb TPaintBoxmp TMediaPlayerolec TOleContainerddcc TDDEClientItemddci TDDEClientItemddsc TDDEServerConvddsi TDDEServerItem7.107.10 InternetInternet 页页csk TClientSocketssk TServerSocketwbd TWebDi

53、spatcherpp TPageProducertp TQueryTableProducerdstp TDataSetTableProducerdspp TDataSetPageProducerwb TWebBrowser1111 Data AccessData Access 页页前缀前缀构件构件ds TDataSourcetbl TTableqry TQuerysp TStoredProcdb TDataBasessn TSessionbm TBatchMoveusql TUpdateSQLntbl TNestedTable7.127.12 Data ControlsData Control

54、s 页页dbg TDBGrid第 22 页 共 26页dbn TDBNavigatordbt TDBTextdbe TDBEditdbm TDBMemodbi TDBImagedblb TDBListBoxdbcb TDBComboBoxdbch TDBCheckBoxdbrg TDBRadioGroupdbll TDBLookupListBoxdblc TDBLookupComboBoxdbre TDBRichEditdbcg TDBCtrlGriddbch TDBChart7.137.13 Decision CubeDecision Cube 页页dcb TDecisionCubedcq

55、TDecisionQuerydcs TDecisionSourcedcp TDecisionPivotdcg TDecisionGriddcgr TDecisionGraph7.147.14 QReportQReport 页页注:建议不要使用。报表用 reportbuilderqr TQuickReportqrsd TQRSubDetailqrb TQRBandqrcb TQRChildBandqrg TQRGroupqrl TQRLabelqrt TQRTextqre TQRExprqrs TQRSysDataqrm TQRMemoqrrt TQRRichTextqrdr TQRDBRich

56、Textqrsh TQRShapeqri TQRImageqrdi TQRDBMImageqrcr TQRCompositeReportqrp TQRPreviewqrtf TQRTextFilterqrcsvf TQRCSVFilter第 23 页 共 26页qrhtmlf TQRHTMLFilterqrch TQRChart7.157.15 DialogsDialogs 页页对话框构件是由构件封装的真正的窗体,因此,它们应遵循窗体的命名约定。类型已由构件的名称定义。它的实例的名称是 Delphi 自动生成的类型实例名字去掉数字后缀。举例如下:类型类型实例名字实例名字TOpenDialogO

57、penDialog TSaveDialogSaveDialog TOpenPictureDialog OpenPictureDialog TSavePictureDialog SavePictureDialog TFontDialogFontDialog TColorDialogColorDialog TPrintSetupDialog PrintSetupDialog TFindDialogFindDialog TReplaceDialog ReplaceDialog7.167.16 Win3.1Win3.1 页页ts TTabSetol TOutlinetnb TTabbedNoteBoo

58、knb TNoteBookhdr THeaderflb TFileListBoxdlb TDirectoryListBoxdcb TDriveComboBoxfcb TfliterComboBoxdbll TDBLookupListdblc TDBLookupCombo7.177.17 SamplesSamples 页页gg TGaugecg TColorGridspb TSpinButtonspe TSpinEditdol TDirectoryOutlinecal TCalendaribea TIBEventAlerter7.187.18 ActiveXActiveX 页页cfx TChar

59、tFXvsp TVSSpellf1b TF1Book第 24 页 共 26页vtc TVTChart7.197.19 MidasMidas 页页cds TClientDataSetdcom TDCOMConnectionsck TSocketConnectiondsp TdataSetProvidersob TsimpleObjectBrokerwc TwebConnectioncc TcorbaConnection7.20 ADO7.20 ADO 页页注:不建议使用adoc TADOConnectionadocd TADOCommandadods TADODataSetadot TADOTa

60、bleadoq TADOQueryadosp TADOStoredProcrdsc TRDSConnection7.21 InterBase7.21 InterBase 页页ibt TIBTableibq TIBQueryibsp TIBStoredProcibd TIBDatabaseibtc TIBTransactionibus TIBUpdateSqlibds TIBDatasetibs TIBSqlibdi TIBDatabaseInfoibsm TIBSqlMonitoribe TIBEvents7.22 InternetExpress7.22 InternetExpress 页页x

61、mlb TXMLBrokermpp TMidasPageProducer7.23 FastNet7.23 FastNet 页页nmdt TNMDayTimenMsg TNMMsgnmsg TNMMSGServnec TNMEchonftp TNMFtp第 25 页 共 26页nhttp TNMHttpnntp TNMNNTPnst TNMStrmnsts TNMStrmServnpop TNMPop3smtp TNMSMTPntm TNMTimenudp TNMUdpurl TNMUrlnuup TNMUUProcessorpsk TPowerSockngs TNMGeneralServernf TNMFinger第 26 页 共 26页

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!