科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件窗体的建立时机及缓冲的思想在ini文件中的应用

窗体的建立时机及缓冲的思想在ini文件中的应用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文讲解窗体的建立时机及缓冲的思想在ini文件中的应用

作者:51cto.com整理 来源:51cto.com整理 2007年9月15日

关键字: 窗体 ini 应用 软件

  • 评论
  • 分享微博
  • 分享邮件

1 窗体建立的时机问题

由于窗体属于比较占系统内存的对象,所以在应用程序中何时建立窗体就变得比较重要。窗体的建立时机有一下几种:

(1)、在主窗体建立时自动建立窗体

(2)、在需要的时候才建立窗体,然后窗体关闭时也不销毁窗体

(3)、在需要的时候才建立窗体、然后窗体关闭时销毁窗体

第一种方式是delphi默认的实现方式,但是除了主窗体之外的其他窗体如果不是在每次使用应用程序的时候都一定用到,那么就不要让窗体自动建立。不要让窗体自动建立的方法是:点击主菜单中“project”-“option”,然后在弹出的对话框中将你不想自动建立的窗体名从Auo-create forms中拖到Available forms中去。

第二种方式适用于每次使用应用程序的时候不一定都用到,但是一旦用到那么以后会用到多次,例如数据库程序中的“数据查找”对话框、网页制作软件中的“设定文字超连接”对话框。

示例代码:

在主窗体的 private 部分加入

FHouseTypeFrm: THouseTypeDlg;//THouseTypeDlg是自定义的一个窗体类

在您激活窗体的地方加入

if not Assigned(FHouseTypeFrm) then

FHouseTypeFrm := THouseTypeDlg.Create(self);

FHouseTypeFrm.ShowModal;

第三种方式适用于一般情况下不会用到,即使用到也不会在程序中多次调用。例如“关于”对话框,“系统设置”对话框等。示例代码:

var

FUserManageFrm: TUserManageForm;//TUserManageForm是自定义的一个窗体类

begin

FUserManageFrm := TUserManageForm.Create(nil);

FUserManageFrm.SetCurrentUserName(FUsername);

FUserManageFrm.ShowModal;

FreeAndNil(FUserManageFrm);

end;

2 缓冲的思想在ini文件中的应用

下列代码是我们在用ini文件读写系统配置常用的方法:

procedure TConfigMgr.SetDBBackupFileName(AValue: string);

begin  FIniFile.WriteString('DBBackup', 'DBFileName', AValue);

end;

function TConfigMgr.GetDBBackupFileName: string;

begin result := FIniFile.ReadString('DBBackup', 'DBFileName',

FRootPath + 'DBBackup.mdf');

end;

因为读写磁盘文件是比较占用系统资源的操作,所以能够不读写硬盘就不读写,可以学习操作系统中缓冲区的概念来改进配置文件的读写。如果在读取系统配置之前已经读取过了那么只要返回上次读取的值就可以了,不用再去读硬盘;在向配置文件前将配置的值与上次的值比较,如果相同就没有必要写配置文件了。

type

TConfigMgr = class

private

FIniFileName: string;

FIniFile: TIniFile;

FRootPath: string;

FFormerDBBackupFileName: string;

procedure SetDBBackupFileName(AValue: string);

function GetDBBackupFileName: string;

public

……

published

property DBBackupFileName: string read GetDBBackupFileName write

SetDBBackupFileName;

end;

implementation

……

procedure TConfigMgr.SetDBBackupFileName(AValue: string);

begin

if FFormerDBBackupFileName <> AValue then

begin

FIniFile.WriteString('DBBackup', 'DBFileName', AValue);

FFormerDBBackupFileName := AValue;

end;

end;

function TConfigMgr.GetDBBackupFileName: string;

begin

if FFormerDBBackupFileName <> '' theresult := FFormerDBBackupFileName

else

result := FIniFile.ReadString('DBBackup', 'DBFileName',

FRootPath + 'DBBackup.mdf');

end;

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章