Delphi源程序格式书写规范

2024-04-15 01:38

本文主要是介绍Delphi源程序格式书写规范,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 ,规范简介

  本规范主要规定Delphi 源程序在书写过程中所应遵循的规则及注意事项。编写该规范的目的是使公司软件开发人员的源代码书写习惯保持一致。这样做可以使每一个组员都可以理解其它组员的代码,以便于源代码的二次开发记忆系统的维护。

2
,一般格式规范

2.1
缩进

  缩进就是在当源程序的级改变时为增加可读性而露出的两个空格。缩进的规则为每一级缩进两个空格。不准许使用Tab 。因为Tab 会因为用户所作的设置不同而产生不同的效果。当遇到begin 或进入判断、循环、异常处理、with 语句、记录类型声明、类声明等的时侯增加一级, 当遇到end 或退出判断、循环、异常处理、with 语句、记录类型声明、类声明等的时侯减少一级。例如:

if TmpInt <> 100 then
TmpInt := 100;

2.2 Begin..End

  begin 语句和end 语句在源程序中要独占一行,例如 :
for I := 0 to 10 do begin //
不正确的用法

end;
for I := 0 to 10 do //
正确的用法
begin
end;

2.3
空格

  在操作符及逻辑判断符号的两端添加空格,例如:I := I + 1;a and b 等,但添加括号时不需要空格。例如:if ( a > b ) then // 错误的用法
If (a > b) then //
正确的用法
又例如: procedure Test(Param1: integer; Param3: string);



3. Object Pascal
语法书写格式规范


3.1
保留字

  Object Pascal 语言的保留字或关键词应全部使用小写字母。


3.2
过程和函数

3.2.1
命名及格式

  过程和函数的名称应全部使用有意义的单词组成,并且所有单词的第一个字母应该使用大写字母。例如:
procedure formatharddisk;//
不正确的命名
procedure FormatHardDisk;//
正确的命名

  设置变量内容的过程和函数,应使用Set 作为前缀,例如: procedure SetUserName;

  读取变量内容的过程和函数,应使用Get 作为前缀,例如:
function GetUserName: string;

3.2.2
过程和函数的参数


3.2.2.1
命名

  统一类型的参数写在同一句中:   procedure Foo(Param1, Param2, Param3: Integer; Param4: string);

3.2.2.2
命名


   所有参数必须是有意义的;并且当参数名称和其它属性名称重了的时候,加一个前缀‘A’, 例如:
procedure SomeProc(AUserName: string; AUserAge: integer);

3.2.2.3
命名冲突

  当使用的两个unit 中包括一个重名的函数或过程时, 那幺当你引用这一函数或过程时,将执行在use 子句中后声明的那个unit 中的函数或过程。为了避免这种‘uses-clause-dependent’ 需要在引用函数或过程时,写完整函数或过程的出处。例如:

SysUtils.FindClose(SR);
Windows.FindClose(Handle);

3.3 变量

3.3.1
变量命名及格式

  首先所有变量必须起有意义的名字,使其它组员可以很容易读懂变量所代表的意义,变量命名可以采用同义的英文命名,可使用几个英文单词,但每一单词的首字母必须大写。例如: var WriteFormat: string

  同时对于一些特定类型可采用一定的简写如下:

  指针类型      P
  纪录类型     
Rec
  数组类型     
Arr
  类        
Class

  循环控制变量通常使用单一的字符如: i, j, k 另外使用一个有意义的名字例如: UserIndex ,也是准许的。


3.3.2
局部变量

  在过程中使用局部变量遵循所有其它变量的命名规则。

3.3.3
全局变量

  尽量不使用全局变量,如必须使用全局变量则必须加前缀 ‘g’ ,同时应在变量名称中体现变量的类型。例如:
gprecUserCount: point;//
名称为 UserCount 的全局变量 , 其类型为指向一结构的指针但是在模块内部可以使用全局变量。所有模块内全局变量必须用 ‘F’ 为前缀。如果几个模块之间需要进行资料交换,则需要通过声明属性的方法来实现。例如:

type
TFormOverdraftReturn = class(TForm)
private
{ Private declarations }
FuserName: string;
FuserCount: Integer;
Procedure SetUserName(Value: string);
Function GetUserName: string;
public
{ Public declarations }
property UserName: string read GetUserName write SetUserName;
property UserCount: Integer read FuserCount write FuserCount;
end;

3.4
类型

3.4.1
大小写协议

  保留字的类型名称必须全部小写。 Win32 API 的类型通常全部大写,对于其它类型则首字母大写,其余字母小写,例如:

var
MyString: string; // reserved word
WindowHandle: HWND; // Win32 API type
I: Integer; // type identifier introduced in System unit

3.4.2
浮点类型

  尽量不使用 Real 类型,他只是为了和旧的 Pascal 代码兼容,尽量使用 Double 类型。 Double 类型是对处理器和数据总线做过最优化的并且是 IEEE 定义的标准数据结构。当数值超出 Double 的范围时,使用 Extended 。但 Extended 不被 Jave 支持。但使用其它语言编写的 DLL 时可能会使用 Single 类型。

3.4.3 枚举类型

  枚举类型的名字必须有意义并且类型的名字之前要加前缀 ‘T’ 。枚举类型的内容的名字必须包含枚举类型名称的简写,例如:

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

3.4.4
数组类型

  数组类型的名字必须有意义并且类型的名字之前要加前缀 ‘T’ 。如果声明一个指向数组类型的指针必须在该类型的名字之前加前缀 ‘P’ ,例如:

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

3.4.5
记录类型

  记录类型的名字必须有意义并且类型的名字之前要加前缀 ‘T’ 。如果声明一个指向数组类型的指针必须在该类型的名字之前加前缀 ‘P’ ,例如:

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


3.5


3.5.1
命名及格式

  类的名字必须有意义并且类型的名字之前要加前缀 ‘T’ 。例如:

type
TCustomer = class(TObject)

类实例的名字通常是去掉 ‘T’ 的类的名字。例如:

var
Customer: TCustomer;

3.5.2
类中的变量

3.5.2.1
命名及格式

  类的名字必须有意义并且类型的名字之前要加前缀 ‘F’ 。所有的变量必须是四有的。如果需要从外部访问此变量则需要声明一属性

3.5.3
方法

3.5.3.1
命名及格式

  同函数和过程的命名及格式。

3.5.3.2
属性访问方法

  所有的属性访问方法必须出现在 private protected 中。属性访问方法的命名同函数和过程的命名另外读方法 (reader method) 必须使用前缀 ‘Get’. 写方法 (writer method) 必须使用前缀 ‘Set’ 。写方法的参数必须命名为 ‘Value’ ,其类型同所要写的属性相一致。例如:

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

 

 

3.6 属性

3.6.1 命名及格式

  同其用操作的,出去前缀‘F’ 的类的变量的名称相一致 。

3.7
文件

3.7.1
项目文件

3.7.1.1
项目目录结构

  程序主目录--Bin (应用程序所在路径)
  -Db (本地数据库所在路径)
  -Doc (文档所在路径)
  -Hlp (帮助文件所在路径)
  -Backup (备份路径)
  -Tmp (临时文件路径)

3.7.1.2
命名

   项目文件必须使用一个有意义的名字。例如: Delphi 中系统信息的项目文件被命名为 SysInfo.dpr

3.7.2 Form
文件

3.7.2.1
命名

  同Form 的名称相一致:例如:Form 的名称为FormMainForm 文件的名称就为FormMain.frm

3.7.3 Data Module
文件

3.7.3.1
命名

  data module 文件的命名应该有意义,并且使用‘DM’ 作为前缀。例如:用户data module 被命名为‘DMCustomers.dfm’

3.7.4 Remote Data Module
文件

3.7.4.1
命名

  remote data module 文件的命名应该有意义,并且使用‘RDM’ 作为前缀。例如:用户remote data module 被命名为‘RDMCustomers.dfm’

3.7.5 Unit
文件

3.7.5.1
普通 Unit

3.7.5.1.1 Unit
文件命名


  unit 文件的命名应该有意义,并且使用‘unit’ 作为前缀。例如:通用unit 被命名为‘UnitGeneral’

3.7.5.2 Form Units

3.7.5 .2.1 命名

   Form unit 文件的名字必须和 Form 的名称保持一致。例如:主窗体叫 FormMain.pas Form Unit 文件的名字为: UnitFormMain

3.7.5.3 Data Module Unis

3.7.5.3.1
命名

   Data Module unit 文件的名字必须和 Data Module 的名称保持一致。例如:主 Data Module DMMain.pas Data Module Unit 文件的名字为: UnitDMMain

3.7.5.4
文件头

  在所有文件的头部应写上此文件的用途,作者,日期及输入和输出。例如:
{
修改日期:
作者:
用途:
本模块结构组成:
}

3.7.6 Forms
Data Modules Forms

3.7.6.1 Form


1. Form
类命名标准

   Forms 类的命名应该有意义,并且使用 ‘TForm’ 作为前缀。例如: About Form 类的名字为 :
TAboutForm = class(TForm)
主窗体的名字为

TMainForm = class(TForm)

2. Form
类实例的命名标准

   Form 的类实例的名字应同期掉 ‘T’ Form 类的名字相一致。例如:
Type Name
Instance Name
TaboutForm
AboutForm
TmainForm
MainForm

TCustomerEntryForm
CustomerEntryForm

3.7.6.2 Data Modules Form

3.7.6.2.1. Data Module Form
命名标准

   Data Modules Forms 类的命名应该有意义,并且使用 ‘TDM’ 作为前缀。例如:
TDMCustomer = class(TDataModule)
TDMOrders = class(TDataModule)

3.7.6.2.2. Data Module
实例命名标准

   Data Module Form 的类实例的名字应同期掉 ‘T’ Data Module Form 类的名字相一致。例如:
Type Name
Instance Name

TCustomerDataModule
CustomerDataModule

TordersDataModule
OrdersDataModule

3.8
控件

3.8.1
控件实例的命名

  控件的实例应使用去掉 ‘T’ 该控件类的名称作为前缀,例如:输入用户姓名的 Tedit 的名字为: EditUserName

3.8.2 控件的简写

  控件的名称可使用以下简写,但所用简写于控件名称之间药添加‘_’

3.8.2 .1 Standard Tab

mm TMainMenu
pm TPopupMenu
mmi TMainMenuItem
pmi TPopupMenuItem
lbl TLabel
edt TEdit
mem TMemo
btn TButton
cb TCheckBox
rb TRadioButton
lb TListBox
cb TComboBox
scb TScrollBar
gb TGroupBox
rg TRadioGroup
pnl TPanel
cl TCommandList

3.8.2 .2 Additional Tab

bbtn TBitBtn
sb TSpeedButton
me TMaskEdit
sg TStringGrid
dg TDrawGrid
img TImage
shp TShape
bvl TBevel
sbx TScrollBox
clb TCheckListbox
spl TSplitter
stx TStaticText
cht TChart

3.8.2 .3 Win32 Tab

tbc TTabControl
pgc TPageControl
il TImageList
re TRichEdit
tbr TTrackBar
prb TProgressBar
ud TUpDown
hk THotKey
ani TAnimate
dtp TDateTimePicker
tv TTreeView
lv TListView
hdr THeaderControl
stb TStatusBar
tlb TToolBar
clb TCoolBar

3.8.2 .4 System Tab

tm TTimer
pb TPaintBox
mp TMediaPlayer
olec TOleContainer
ddcc TDDEClientConv
ddci TDDEClientItem
ddsc TDDEServerConv
ddsi TDDEServerItem

 

3.8.2 .5 Internet Tab

csk TClientSocket
ssk TServerSocket
wbd TWebDispatcher
pp TPageProducer
tp TQueryTableProducer
dstp TDataSetTableProducer
nmdt TNMDayTime
nec TNMEcho
nf TNMFinger
nftp TNMFtp
nhttp TNMHttp
nMsg TNMMsg
nmsg TNMMSGServ
nntp TNMNNTP
npop TNMPop3
nuup TNMUUProcessor
smtp TNMSMTP
nst TNMStrm
nsts TNMStrmServ
ntm TNMTime
nudp TNMUdp
psk TPowerSock
ngs TNMGeneralServer
html THtml
url TNMUrl
sml TSimpleMail

3.8.2 .6 Data Access Tab

ds TDataSource
tbl TTable
qry TQuery
sp TStoredProc
db TDataBase
ssn TSession
bm TBatchMove
usql TUpdateSQL

3.8.2 .7 Data Controls Tab

dbg TDBGrid
dbn TDBNavigator
dbt TDBText
dbe TDBEdit
dbm TDBMemo
dbi TDBImage
dblb TDBListBox
dbcb TDBComboBox
dbch TDBCheckBox
dbrg TDBRadioGroup
dbll TDBLookupListBox
dblc TDBLookupComboBox
dbre TDBRichEdit
dbcg TDBCtrlGrid
dbch TDBChart

3.8.2 .8 Decision Cube Tab

dcb TDecisionCube
dcq TDecisionQuery
dcs TDecisionSource
dcp TDecisionPivot
dcg TDecisionGrid
dcgr TDecisionGraph

3.8.2 .9 QReport Tab

qr TQuickReport
qrsd TQRSubDetail
qrb TQRBand
qrcb TQRChildBand
qrg TQRGroup
qrl TQRLabel
qrt TQRText
qre TQRExpr
qrs TQRSysData
qrm TQRMemo
qrrt TQRRichText
qrdr TQRDBRichText
qrsh TQRShape
qri TQRImage
qrdi TQRDBMImage
qrcr TQRCompositeReport
qrp TQRPreview
qrch TQRChart

3.8.2 .10 Dialogs Tab

OpenDialog TOpenDialog
SaveDialog TSaveDialog
OpenPictureDialog TOpenPictureDialog
SavePictureDialog TSavePictureDialog
FontDialog TFontDialog
ColorDialog TColorDialog
PrintDialog TPrintDialog
PrinterSetupDialog TPrintSetupDialog
FindDialog TFindDialog
ReplaceDialog TReplaceDialog

3.8.2 .11 Win31 Tab

dbll TDBLookupList
dblc TDBLookupCombo
ts TTabSet
ol TOutline
tnb TTabbedNoteBook
nb TNoteBook
hdr THeader
flb TFileListBox
dlb TDirectoryListBox
dcb TDriveComboBox
fcb TFilterComboBox

3.8.2 .12 Samples Tab

gg TGauge
cg TColorGrid
spb TSpinButton
spe TSpinEdit
dol TDirectoryOutline
cal TCalendar
ibea TIBEventAlerter

3.8.2 .13 ActiveX Tab

cfx TChartFX
vsp TVSSpell
f1b TF1Book
vtc TVTChart
grp TGraph

3.8.2 .14 Midas Tab

prv TProvider
cds TClientDataSet
qcds TQueryClientDataSet
dcom TDCOMConnection
olee TOleEnterpriseConnection
sck TSocketConnection
rms TRemoteServer
mid TmidasConnection

4 .修改规范

  本规则所做的规定仅适用于已经纳入配置管理的程序。在这类修改中,要求保留修改前的内容、并标识出修改和新增的内容。并在文件头加入修改人、修改日期、修改说明等必要的信息。

4 1 修改历史记录

  对源文件进行经过批准的修改时,修改者应在程序文件头加入修改历史项。在以后的每一次修改时,修改者都必须在该项目中填写下列信息:

修改人
修改时间
修改原因
修改说明即如何修改

4 2 新增代码行

  新增代码行的前后应有注释行说明。
//
修改人,修改时间,修改说明
新增代码行
//
修改结束

4 3 删除代码行

  删除代码行的前后用注释行说明。
//
修改人,修改时间,修改说明
//
要删除的代码行(将要删除的语句进行注释)
//
修改结束

4 4 修改代码行

  修改代码行以删除代码行后在新增代码行的方式进行。
//
修改人,修改时间,修改说明
//
修改前的代码行
//
修改结束
//
修改后的代码行
修改后的代码行
//
修改结束

这篇关于Delphi源程序格式书写规范的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/904577

相关文章

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

python dict转换成json格式的实现

《pythondict转换成json格式的实现》本文主要介绍了pythondict转换成json格式的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 一开始你变成字典格式data = [ { 'a' : 1, 'b' : 2, 'c编程' : 3,

Python中Windows和macOS文件路径格式不一致的解决方法

《Python中Windows和macOS文件路径格式不一致的解决方法》在Python中,Windows和macOS的文件路径字符串格式不一致主要体现在路径分隔符上,这种差异可能导致跨平台代码在处理文... 目录方法 1:使用 os.path 模块方法 2:使用 pathlib 模块(推荐)方法 3:统一使

Java中使用注解校验手机号格式的详细指南

《Java中使用注解校验手机号格式的详细指南》在现代的Web应用开发中,数据校验是一个非常重要的环节,本文将详细介绍如何在Java中使用注解对手机号格式进行校验,感兴趣的小伙伴可以了解下... 目录1. 引言2. 数据校验的重要性3. Java中的数据校验框架4. 使用注解校验手机号格式4.1 @NotBl

Python批量调整Word文档中的字体、段落间距及格式

《Python批量调整Word文档中的字体、段落间距及格式》这篇文章主要为大家详细介绍了如何使用Python的docx库来批量处理Word文档,包括设置首行缩进、字体、字号、行间距、段落对齐方式等,需... 目录关键代码一级标题设置  正文设置完整代码运行结果最近关于批处理格式的问题我查了很多资料,但是都没

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

Python如何实现读取csv文件时忽略文件的编码格式

《Python如何实现读取csv文件时忽略文件的编码格式》我们再日常读取csv文件的时候经常会发现csv文件的格式有多种,所以这篇文章为大家介绍了Python如何实现读取csv文件时忽略文件的编码格式... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍我们再日常读取csv文件的时候经常

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解