h)+’.’+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); //接着就可以使用 关于 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 的好处是,控件状态同步的烦恼从此一扫而空!