程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 窗體的建立時機及緩沖的思想在ini文件中的應用

窗體的建立時機及緩沖的思想在ini文件中的應用

編輯:Delphi

  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 <> '' then
      result := FFormerDBBackupFileName
    else
      result := FIniFile.ReadString('DBBackup', 'DBFileName',
        FRootPath + 'DBBackup.mdf');
  end;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved