- procedure TFrmLogin.FormCreate(Sender: TObject);<br/>begin<br/>Caption := csLoginTitle;<br/>....<br/>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<br/>csmInifile: TCusomIniFile;<br/>begin<br/>if blUseIniFile then//如果使用Ini文件<br/>csmInifile:= TIniFile.Create(csRootKey)<br/>else<br/>csmInifile:= TRegistryIniFile.Create(csRootKey);<br/>//接着就可以使用csmIniFile对Ini文件进行访问,<br/>//或者用类似访问Ini文件的方式访问注册表。<br/>
七.关于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的好处是,控件状态同步的烦恼从此一扫而空!