Project JEDI VCL组件编码标准

原创 2002年01月13日 14:31:00
 

编写该标准的目的是统一组件代码的书写格式,以便于所有的Delphi程序员----无论是初学者还是高级开发人员---都能够方便地维护和理解他们。对于某些并不完全符合标准,但是十分优秀并且已经加入到源代码知识库的组件,我们在审阅的时候会给予一定的灵活度。然而任何一个程序员在提交他们的代码时,都应该附带正确的题头和说明文档,并认真填写,这一点极为重要。这项工作会让你的代码更容易被源代码知识库采用。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


原则上,我们将遵循Charlie Calvert先生在Borland Techvoyage 站点中发表的 Delphi编码风格指导中所采用的规范。


5.1 组件代码必须包含的信息


5.1.1题头(作者姓名/等,版本控制信息)


任何提交给知识库的源码文件的最开头部分,都必须附有如图1中所显示的题头格式,该格式对Borland Delphi Borland C++Builder 均有效。

{-----------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is: XXX.PAS, released 2000-06-15.
The Initial Developer of the Original Code is Joe Doe <joe.doe@email.com>
Portions created by Joe Doe are Copyright (C) 1999 Joe Doe.
Portions created by Microsoft are Copyright (C) 1998, 1999 Microsoft Corp.
All Rights Reserved.
Contributor(s): ______________________________________.

Last Modified: 2000-mm-dd;
Current Version: X.XX
You may retrieve the latest version of this file at the Project JEDI home page, 
located at http://www.delphi-jedi.org
Known Issues: 
-----------------------------------------------------------------------------}

1 标准组件题头


 图中“The Original Code 一栏中的 XXX.PAS 代表源文件名.通常情况下,源文件名同你所开发的组件名是不同的.举例来说,一个名为TJvScreen的组件应该包含在名为Screen.pas的文件中。作为约定,源文件 .pas)不应包含“TJv”或“Jv”前缀。


 Initial Developer”一栏中应包含有原作者全名,以及邮件地址。为了方便Bug的修正和其它联系,留下一个邮件地址是很重要的。


5.1.2 Mozilla 许可协议放弃声明


原作者只允许使用5.1.1中采用的标准题头.如果没有特别声明放弃该协议,源文件将不被采纳.    


有一种情况例外,那就是当代码放置在公共域中时,在这种情况下,请将Mozilla 许可协议替换成下面的声明。

{-----------------------------------------------------------------------------
This is an original work by Joe Doe and is hereby placed in the Public Domain.
The Original Code is: XXX.PAS, released 2000-06-15.
The Initial Developer of the Original Code is Joe Doe <Joe.doe@email.com>.
Contributor(s): ______________________________________. 

Last Modified: 2000-06-15
Current Version: X.XX
You may retrieve the latest version of this file at the Project JEDI home page, 
located at http://www.delphi-jedi.org
Known Issues: 
-----------------------------------------------------------------------------}

5.1.3 过程/函数块


原作者同样需要对每一个过程或函数附加详细的说明。说明的文字要有正确的缩进:

{------------------------------------------------------------------------------
    Procedure: TJvScreen.DemoEventHandler
  Description:
       Author: Joe Doe
 Date created: 3/1/1996
Date modified: mm/dd/yyyy by Joe Foo
      Purpose:
 Known Issues:
 ------------------------------------------------------------------------------}
procedure TJvScreen.DemoEventHandler(
     Sender: TObject;      
     Col   : LongInt;      
     Row   : Longint;      
     Rect  : TRect;      
     State : TGridDrawState);  // Refer to notes
var
  i,
  j,
  ThisNum,
  ThatNum: integer;
  IsAlive,
  IsPurple: Boolean;
begin
(?
end;

        2 – 标准函数/过程块


5.1.4 源代码中前缀的用法


下列是我们所推荐的前缀编码方法:


组件前缀(例:TJvHtmlHelp)          要求


成员前缀(例:FDefaultWindow)       要求


类前缀(例:TJvHtmlHelpRouter)      要求


全局变量前缀(例:GHtmlHelpRouter)  要求


指针前缀(例:PMyPointer)            要求


指针变量前缀(例:PopupDefsPtr)     要求


枚举类型前缀(例:alBottom)          要求


其他前缀                           不要求


5.1.5  断言


 在源代码中插入断言(对过程/函数的一些简短的预处理和后处理)是值得提倡的编码方法。这样做有助于最终用户更清楚的了解组件作者的意图。断言只在Delphi的集成环境中被程序调用,而不会编译到最终的版本中,因而使用起来不需要有任何顾虑。


      5.2 组件名称


所有的 Jedi-VCL 组件都使用标准的“TJv”前缀以和其他组件相区别(请注意大写“J”)。TJv已经在developers.href.com Delphi前缀注册机构登记,隶属于Project JEDI


 5.3 源代码库管理人员修改组件名的权限


某些提交上来的组件要么同源代码库的另一个组件重名,要么名称或前缀不恰当.举例来说,一个功能是向屏幕上输出字符而命名为TJvPrint的组件就不符合要求,因为Print容易让人联想到打印机。基于以上的考虑,源代码库管理人员有责任修改某些组件的名称,以使组件命名更加清楚明了或保证命名的唯一性。


5.3.1 在组件发布之后修改名称


一旦组件被选中并加入到源代码库中后,其名称就应该固定. 允许修改名称可能会产生不必要的麻烦,尤其对于那些正在使用旧的名称而又没有及时更新的用户.


5.4 源代码格式


Borland Delphi 的代码格式必须同当前Borland公司为Delphi VCL定义的编码标准相一致。如前所述,原则上,我们将遵循Charlie Calvert先生在Delphi编码风格指导中的规范。这样做的目的是为了向所有的Borland Delphi开发人员提供一种他们能够识别的统一格式。背离基本的规范是我们所要避免的。


5.5 代码中的注释


对方法功能的注释最好不要超过一行.注释是用来解释代码的,而不是告诉别人怎么使用它.在一个方法中,要尽量做到只在需要解释的代码后加入注释.而不要这样


Form.Show //Show Form


   作为参考,尽量保持每十行代码对应一行注释的比率。


5.6 其它


·空格:在逗号和冒号后要加空格,操作符(+, -, *, /, := , = , <, >等)两边也应有空格。


·同一行内不允许有多个命令或变量声明。


·对于没有注释的方法,至少要用分割线(如://-----80个字符宽) 将其相互隔开。对每一个方法通常都是不需要注释的,例如,一个名为CountErrors的方法便不需要注释。


·对于复杂的逻辑或数学表达式尽量使用括号以增加可读性,尽管从语法的角度上来讲不一定需要。


·在逻辑表达式中和其他一些容易导致跟踪调试上的困难的地方应该最大限度的避免函数的使用。


·对指针变量显式的撤销调用(如 MyDynamicArray^[0])不再需要,并且在任何时候都应尽量避免。


·结构化函数的执行使得函数只在一点结束(End关键字处)而不是被exit中止(可能的话)。


·使用绝对跳转标识将被认为是不好的编码风格(汇编除外)。

VCL组件开发

4.1 TObject分支     下面几部分分别对包含于五个主要分支中的类做出简要地描述,为完整地说明VCL对象的分层结构,引用了包含于产品中的VCL对象分层结构图。     所有的VCL对象都...
  • ghevinn
  • ghevinn
  • 2014年05月13日 11:54
  • 1863

Vcl控件详解

TTabControl 属性  DisplayRect:只定该控件客户区的一个矩形 HotTrack:设置当鼠标经过页标签时,它的字是否有变化。如果为True,是字会变成蓝色 Images:为...
  • qq_31834115
  • qq_31834115
  • 2016年08月18日 16:16
  • 357

DevExpress VCL Skin Adapter

DevExpress Skin 正常情况下只能对他自己的组件和系统组件添加皮肤效果,而第三方组件无法使用。如果程序里面使用了非DevExpress的组件,切换皮肤时会导致非DevExpress 组件与...
  • chivalrys
  • chivalrys
  • 2013年10月27日 17:55
  • 2214

Python编辑器 Sublime text2 +JEDI(python自动补全插件)

以前写python的时候都是用eclipse写的。用mac后,今天突然看到了这个 Sublime text2,目测很好用。先记下来,到时再来补充。 Win, Linux  > cmd + shif...
  • andy812110
  • andy812110
  • 2015年01月26日 16:23
  • 15049

关于VCL的编写 (一) 怎样编写自己的VCL控件

怎样编写自己的VCL控件       用过Delphi的朋友们,大概对Delphi的最喜欢Delphi的不是他的强类型的pascal语法,而是强大的VCL控件,本人就是一位VCL控件的爱好者。    ...
  • dreamnan
  • dreamnan
  • 2004年09月15日 13:07
  • 2236

Ubuntu下配置Sublime的Jedi的代码自动补全

Ubuntu下安装sublimesublime-text常用来写代码,它的代码高亮,自动补全功能着实很迷人,还有很多拓展包,觉得大家可以尝试一下。如果您想采用sublime-text2,则可访问 ht...
  • Horcham
  • Horcham
  • 2017年02月25日 12:23
  • 1082

Sublime text2 自动补齐功能开启(jedi+sublimecodeintel)

*本文针对python。其他语言可能需要微调或找其他插件1.效果Sublime text功能很强大,通过插件自动补齐内建库我觉得肯定有,查了一下果然有。有两个插件: SublimeCodeIntel ...
  • wws563
  • wws563
  • 2016年09月13日 15:38
  • 3331

一款不错的打印控件,SailPrint打印组件简介。

    SailPrint打印组件是一套VCL打印控件。目前最新版本是3.0,可以打印DBGrid,StringGrid,ListView以及直接打印数据源。SailPrint有以下几大特点:    ...
  • sailprint
  • sailprint
  • 2004年07月23日 10:53
  • 1525

jedi实现Emacs下Python补全

最近学习Python,准备用Emacs作为编辑器,分享一下Emacs下Python补全的配置。 Emacs下Python补全的方案有很多,网上流传最广泛的一种方案是用pymacs, rope...
  • abcbc
  • abcbc
  • 2013年06月07日 09:26
  • 4155

DELPHI VCL组件 TTreeList, Listview和Treeview相结合的多列树控件

http://blog.csdn.net/qinmaofan/archive/2007/08/24/1757904.aspx 转载请勿清除广告。 没有合适的局域网管理软件吗?你的网管工具够灵活够高效吗...
  • chla
  • chla
  • 2010年09月13日 16:58
  • 1457
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Project JEDI VCL组件编码标准
举报原因:
原因补充:

(最多只允许输入30个字)