五.关于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文件的访问便是一举两得了。比如:varcsmIniFile:TCusomIniFile;beginifblUseIniFilethen//如果使用Ini文件csmIniFile:=TIniFile.Create(csRootKey)elsecsmIniFile:=TRegistryIniFile.Create(csRootKey);//接着就可以使用csmIniFile对Ini文件进行访问,//或者用类似访问Ini文件的方式访问注册表。
七.关于TStream流以及TFileStream,TMemoryStream等等TFileStream和TMemoryStream都继承自抽象类TStream,这意味着我们可以使用一套代码完成对文件和内存的存取操作。因此,定义一些接口的时候,我往往倾向于将参数的类型定义为抽象类,而不是具体类。比如,要完成保存功能的一个函数,定义成
functionSave(AStream:TStream):Boolean;就比定义成functionSave(AStream:TFileStream):Boolean;要灵活的多。前一个定义是具有前瞻性的,因为它可以适用于以后可能出现的新型态的流。而后一个定义只适用于TFileStream这种流(当然包括TFileStream的子类),呆板多了。我的习惯:如果存在抽象类,那么尽量将参数定义为抽象类的类型,毕竟,我们无法预见未来。
八.多使用TActionDelphi4以后引入了Action的概念,并且在Standard组件栏中增加TActionList组件。使用Action的好处是,控件状态同步的烦恼从此一扫而空!