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;
|