一个程序员的开发习惯 - DELPHI教程

有关开发习惯的一些想法,如鲠在喉,不吐不快。究其发贴动机,当然不排除有骗取参与分的可能,但另一方面,也希望能给同行(念Xing)者提供一些建议,或者参考(希望不是误人子弟)。同时,也希望各位能够就我的这些陋习,发表一点看法,给出批评和指正的意见。谢谢。

一.建立工程目录

首先,第一步要做的,当然是给新项目建一个单独的目录(别笑)。目录名称与项目名称同名,或者另取一个也可,只要清楚、简练。然后,在此目录中创建以下各个目录:

<Doc>:用来存放该项目相关的开发文档(需求说明,概要设计,详细设计等等等等);

<Source>:用来存放Delphi源程序中的”.Dpr”,”.Pas”,”.Dfm”等文件;

<Dcu>:该目录中存放”.Dcu”文件,将’.Pas’与’.Dcu’文件分开存放只是为了让Source目录的内容更加清楚一些;

<Bin>:存放工程的输出文件,比如”.Exe”,”.Dll”或者”.Ocx”等等;

<Log>:用来存放日志文件;通常在这个目录中我会放一个”<项目名称>程序员日志.Txt”文件。

<Images>:当然是存放工程中用到的图片的目录了。一般情况下,这个目录是少不了的。假如还用到其他资源,那么也一样建立各自的目录,比如Wav,比如Avi等等。

以前一直都没怎么注意这个问题,搞得所有的代码都在一起,不是一个乱字了得

二.设置工程选项

在Delphi中创建一个新的工程,将此工程保存到Source目录中,同时:

a. 选一个耐看的,与项目有些联系的图标作为这个工程的图标。当然,这个图标可能只是临时用用的,但是总要比Delphi默认的那个难看的要好才行,要不然,怎么对得起自己?

b. 将Project Options -> Directories/Conditionals页面中的Output Directory设置为Bin目录;

c. 将Unit output Directory设置为Dcu目录。

三.添加常量单元

添加一个新的Unit,另存为“unt<工程名> Consts.Pas”,用来保存工程中用到的常量。

四.有关窗体(Form)及单元(Unit)

按照匈牙利命名法则给Form命名,则一个用来登录的窗体可以命名为’FrmLogin’,而其单元名可以为’untLogin’。通常,两个对应的Form和Unit的名称在除去’Frm’或’unt’的缩写后应当保持一致。

在Unit的头部添加本单元的注释,注释的格式可以参照Delphi的源码,但是至少应当包含以下几项:功能描述;作者;版权;创建时间;最后修改时间;修改历史等等。

将新创建好的Form的Caption设置为该Form类的名称,而不是使用Delphi默认的。比如,将Form1更名为FrmLogin后,此时我们获得了TFrmLogin这个新的窗体类,并且Delphi自动将窗体的Caption更新为’FrmLogin’。依我看,该Caption应当为’TFrmLogin’才是,因为我们在设计的是一个窗体类TFrmLogin,而不是仅仅对FrmLogin进行操作。

向TFrmLogin这样功能明确的窗体类,许多人都有在设计期就将其Caption设置为诸如“操作员登录”这种名称的习惯。我的习惯是,象“操作员登录”这样的常量,通常存放在unt<工程名>Consts.Pas中,用ResourceString来定义,或者用Const来定义。至于窗体的Caption的命名,应当属于运行期的工作。所以,我往往在TForm.OnCreate事件触发之时才对Caption进行操作,比如:

procedure TFrmLogin.FormCreate(Sender: TObject);
begin
Caption := csLoginTitle;
....
end;

五.关于Format函数的使用

有iYear,iMonth,iDay三个数据,要显示诸如“生日:1976/3/18”这样的信息,你通常怎么做?使用s := ‘生日:’+IntToStr(iYear)+’.’+IntToStr(iMonth)+’.’+IntToStr(iDay); 吗?这样实在是太累了。我的习惯是,在unt<工程名>Consts.Pas中增加一个常量csBirthDayFormat = ‘生日:%d/%d/%d’来保存显示格式,然后使用s := Format(csBirthDayFormat, [iYear, iMonth, iDay]);这样的语句完成数据的拼装。这么做的好处显而易见,那就是你只需在一个地方维护数据的显示格式。

Format函数功能强大,我对它很是推崇,你呢?

六.关于注册表或者Ini文件的存储

原先访问注册表我通常使用TRegistry,而访问Ini文件通常使用TIniFile。这两个类的使用方法各不相同,因此想要使用相同的代码既能访问注册表又能访问Ini文件几乎是不可能的。真头疼啊!

终于我发现了救星!那就是TRegistryIniFile类。查看Registry单元,我们发现,TRegistryIniFile继承自TCusomIniFile。而TIniFile也是继承于TCusomIniFile。因此,使用抽象类TCusomIniFile来实现对注册表或者Ini文件的访问便是一举两得了。比如:

var
csmIniFile: TCusomIniFile;
begin
if blUseIniFile then//如果使用Ini文件
csmIniFile:= TIniFile.Create(csRootKey)
else
csmIniFile:= TRegistryIniFile.Create(csRootKey);

//接着就可以使用csmIniFile对Ini文件进行访问,

//或者用类似访问Ini文件的方式访问注册表。

七.关于TStream流以及TFileStream,TMemoryStream等等

TFileStream和TMemoryStream都继承自抽象类TStream,这意味着我们可以使用一套代码完成对文件和内存的存取操作。因此,定义一些接口的时候,我往往倾向于将参数的类型定义为抽象类,而不是具体类。比如,要完成保存功能的一个函数,定义成

function Save(AStream: TStream): Boolean;

就比定义成

function Save(AStream: TFileStream): Boolean;

要灵活的多。

前一个定义是具有前瞻性的,因为它可以适用于以后可能出现的新型态的流。而后一个定义只适用于TFileStream这种流(当然包括TFileStream的子类),呆板多了。

我的习惯:如果存在抽象类,那么尽量将参数定义为抽象类的类型,毕竟,我们无法预见未来。

八.多使用TAction

Delphi 4以后引入了Action的概念,并且在Standard组件栏中增加TActionList组件。使用Action的好处是,控件状态同步的烦恼从此一扫而空!

[转自]一个程序员的开发习惯 - DELPHI教程

- 阅读全文 -

gladder: 被封已成往事

官方介绍:

被封已成往事 T-^
gladder是一个帮助你访问被封站点的工具。
它的主要功能是根据一个被封站点列表判断即将访问的页面是否需要通过在线代理来访问。而这个被封站点列表完全由你来定制。

Gladder是firefox的一个代理插件扩展,可以自动查找代理

最重要的,就是,自定义站点列表,碰到该站点的,将自动启用代理

默认的站点列表如下,包括了被wall的blogspot,wiki, flickr等,真的是不怕wall了。

image 

看来可考虑回复我blogspot网站了,cc

- 阅读全文 -

delphi7 lite 缺少clx运行库的解决办法

使用Delphi 7 lite 即精简版本,经常在安装第三方控件的时候,会发现,没有VisualCLX的运行库。

解决办法:

找到完整版的Delphi 7安装文件,其光盘的文件夹布局其实跟安装好的是类似的,只是部分文件拷贝到了system32系统目录下。

查找光盘上System32目录下包含clx的文件,拷贝到本机的delphi安装目录bin下,查找光盘上bin目录下的clx文件,拷贝到本机bin下,其实,总共的文件,都是6个,包括三个bpl,三个map文件。

- 阅读全文 -

Delphi 是否安装的判断

昨天安装了Delphi 7 Lite v2.02 集成D2007RTL,整体效果不错,运行速度也确实比较快,虽然是简化版,但是还是集成了部分常用的帮助。

不足:

1.安装过程中,选择不安装GExpert,但实际上还是安装了。

2.部分控件有独立安装程序的,安装时提示没有安装delphi,即找不到Delphi

3.由于去掉了clx,部分控件无法安装

- 阅读全文 -

sql server 2000 布尔型

sql server 2000中,bool型即bit型

在delphi中,从字段编辑器直接拖到窗体上,产生的就是dbcheckbox控件

- 阅读全文 -

TMSquery 提交后没有更新的问题

使用SDAC的TMSQuery组件进行开发,碰到一个问题:

在TMSQuery中进行New或者Edit后,post,界面数据已更新,也没有报错

刷新后,所有的更新全部没有了,查看数据库,也是没有写入。

用SQL 事件探查器观察,没有发现写入语句。

- 阅读全文 -

Thunderbird 新邮件无法找到文件夹错误

最近两天,试用thunderbird,今天公司邮箱提示有几封新邮件

image 

然后点击邮件标题,显示如下对话框:

"无法找到/E|/************/Inbox.sbd/??number=27104593.请检查地址然后重试"

image

查看邮件目录

image

原来旧的邮件是从becky转成unix邮箱,再导入的

奇怪的是,其他的目录的邮件都可以正常浏览,就通知目录下面的旧邮件显示不出,

并且,现在说找不到文件夹的也是该目录。其他的文件夹,都是只有两个文件,而通知,却多出了一个" 通知.sbd"的目录。

参考:http://forums.mozine.cn/index.php?showtopic=16618

说是使用portable的thunderbird可以解决,未试。

 

----------------------------------------

把通知修改为其他名字,重新导入,就可以了。

另外,把其他文件夹修改为“通知”,也会出现上述问题,邮件无法打开

估计是编码的问题吧,“通知”是保留字???

- 阅读全文 -

becky 转到thunderbird

1.邮件转移

1)选中becky中邮件文件夹,选择菜单 文件-->导出-->Unix邮箱

选择保存位置

2)thunderbird 安装插件:importexporttools

选择目的文件夹,右键导入mbox文件,选择文件

 

2.通讯录转移

选择becky中通讯录,导出为文本文件,选择必须的字段

导入thunderbird通讯录,注意选择对应的字段

- 阅读全文 -

Lightning :Thunderbird 上的日历插件

教程:

转自:Jackbin的懒人笔记

链接为google翻译的简体中文,效果还不错

同Google日历同步,需要插件: Provider for Google Calendar

配合lightning 0.7使用,具体参考以下链接

【转自】http://translate.google.com/translate?hl=zh-CN&sl=zh-TW&u=http://jackbin.blogspot.com/2008/02/lightning-5.html&sa=X&oi=translate&resnum=1&ct=result&prev=/search%3Fq%3Dthunderbird%2B%25E6%2597%25A5%25E5%258E%2586%25E5%2590%258C%25E6%25AD%25A5%26complete%3D1%26hl%3Dzh-CN%26newwindow%3D1%26client%3Dfirefox-a%26rls%3Dorg.mozilla:zh-CN:official%26sa%3DG

Technorati : , ,

- 阅读全文 -

热门文章

最新文章

最近回复

  • wfzlxvvgte: 你的文章让我感受到了不一样的风景,谢谢分享。 http://ww...
  • sfiutfecff: 你的文章内容非常用心,让人感动。 http://www.55ba...
  • dyqoaaqpdc: 你的文章内容非常卖力,让人点赞。 http://www.55ba...
  • vrfedcneqp: 你的文章内容非常卖力,让人点赞。 http://www.55ba...
  • wmhoubuazg: 你的文章内容非常用心,让人感动。 http://www.55ba...
  • khhhttrppu: 你的文章内容非常卖力,让人点赞。 http://www.55ba...
  • atjzyxiutr: 你的文章内容非常用心,让人感动。 http://www.55ba...
  • dlamzmkwwi: 你的文章内容非常卖力,让人点赞。 http://www.55ba...
  • predcxvhsz: 《蛋黄人》国产剧高清在线免费观看:https://www.jgz...
  • qmffcradmz: 《逃狱者》剧情片高清在线免费观看:https://www.jgz...

分类

标签

其它