//////////////////////////////////////////////////////////////////////
// 创建:Tujh010618 (创建信息:创建者、创建日期)
// 功能:…… (本函数或过程的主要功能)
// 参数:Param1-……
// Param2-(out) …… (out表示输出参数)
// 返回:…… (类型、值)
// 说明:…… (备注信息、调用方法、初始化数值等)
//////////////////////////////////////////////////////////////////////
4. Form与数据模块 4.1 Form
4.1.1 Form类型的命名标准
Form类型的名称应当表达出Form的用途,且要加T为前缀,后跟描述性名,最后是Form。例如,About的类型名称为:
TAboutForm = class(TForm)
主frm的类型名称为:
TMainForm = class(TForm)
客户登录Form的类型名称为:
TCustomerEntryForm = class(TForm)
4.1.2 Form实例的命名标准
Form实例的名称与相应的类型名称相同,但没有前缀T。例如,前面提到的Form类与Form实例的名称为:
类型名 实例名
---------------------------------------------------------------------------
TAboutFo rm AboutForm
TMainForm MainForm
TCustomerEntryForm CustomerEntryForm
4.1.3 自动创建的Form
除非特别原因,只有主Form才自动生成。其他所有Form必须从Project Options对话框的自动生成列表中删除。更进一步的信息,请参阅后面几节。
4.1.4 模式Form实例化函数
所有Form单元都应当含有实例化函数,用于创建、设置、模式显示和释放Form。这个函数将返回由Form返回的模式结果。传递给这个函数的参数遵循“参数传递”的规则。之所以要这样封装,是为了便于代码的重用和维护。
Form的变量应当从单元中移走,改在实例化函数中作为局部变量定义。注意,这要求从Project Options对话框的自动生成列表中移走该Form。
例如,下面的单元文件演示了GetUserData的实例化函数。
unit UserDataFrm; interface uses
Windows, Messages, SysUtils, C1asses, 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: Integer): Word;
implementation
{$R*.DFM}
function GetUserData(var aUserName: String; var aUserID: Integ): Word; var
UserDataForm: TUserDataFrom; begin
UserDataForm := TUserDataForm.Create(Application); try
UserDataForm.Caption := ?Getting User Data?;
Result := UserDataForm.ShowModal;
if Result = mrOK then begin
aUserName := UserDataForm.edtUserName.Text;
aUserID := StrToInt(UserDataForm.edtUserName.Text); end; finally
UserDataForm.Free; end; end; end.
4.2 数据模块
4.2.1 数据模块的命名标准
数据模块类型名称应表达出它的用途,且要加前缀T ,后跟描述性名称,最后是DataModule。例如,Customer
数据模块的类型名称为:
TCustomerDataModule = class(TDataModule);
Orders数据模块的类型名称为:
TOrderDataModule = class(TDataModule);
4.2.2 数据模块实例的命名标准
数据模块实例的名称应当与相应的类型名称相同,但没有前缀T。例如,前面的数据模块类型、实例名称如下:
类型名称 实例名
---------------------------------------------------------------------------
TCustomerDataModule CustomerDataModule
TOrderDataModule OrderDataModule 5. 包
5.1 运行期包与设计期包
运行期包中应当只包含所需要的单元。那些特性编辑器和元件编辑器的单元应当放在设计期包中。注册单元也应当放在设计期包中。
5.2 文件命名标准
包的命名遵循下列模式:
iiilibvv.pkg -- 设计期包
iiistdvv.pkg -- 运行期包 其中:
iii代表一个3字符的前缀,用于标识公司、个人或其他需要标识的事情。
vv代表包的版本号,其中也包含了De1phi的版本号。
注意:包名称中的lib或std 分别表示这是设计期包或运行期包。例如,《De1phi 5开发大全》中的包是这样命名的:
ddgLib50.pkg -- 设计期包
ddgStd50.pkg -- 运行期包 6. 元件
6.1 自定义的元件
6.1.1 元件类型的命名标准
元件的命名与类的命名类似,只不过它有3个字符的前缀。这些前缀用以标识公司、个人或其他实体。例如,一个时钟元件可以这样声明:
TddgClock = class(TComponent)
注意,作为前缀的3个字符要小写。
6.1.2 元件单元
元件单元只能含有一个主要元件,这是指出现在元件选项板上的元件。其他辅助性的元件或对象也可以包含在同一单元中。
6.1.3 注册单元
元件的注册过程应当从元件单元中移走,放在一个单独的单元中。这个注册单元用于注册所有元件、特性编辑器、元件编辑器、向导等。
元件注册应当在设计期包中进行。因此,注册单元应当包含在设计期包而不是运行期包中。建议注册单元这样命名:
xxxReg.pas
其中,xxx为3个字符前缀,以标识公司、个人或其他实体。例如,命名为ddgReg.Pas。
6.2 元件实例的命名规则
元件的名称应当具有描述性。Delphi没有为元件指定默认的名称。元件应当有一个小写的前缀以表明其类型,这是为了便于在Object Inspector和Code Explorer中查找元件。
元件类型前缀是元件类型名变化而成的。下面的规则说明如何定义一个元件类型前缀:
1) 从元件类型名中移去T 前缀。例如TButton变成Button。
2) 除了第一个元音,删去所有元音字母。例如,Button变成Bttn,Edit变成Edt 。
3) 压缩双字母。例如,Bttn变成Btn。