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 的子类),呆板多了。
我的习惯:如果存在抽象类,那么尽量将参数定义为抽象类的类型,毕竟,我们无法预见