background image

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 的子类),呆板多了。

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