首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi DFM 文件讀寫核心 API:WriteComponentResFile 與 ReadComponentResFile 詳解

     編輯:Delphi

20.3.1.1 寫 DFM 文件:WriteComponentResFile

將元件及其擁有的所有子元件寫入 DFM 檔案,支援動態 DFM 重用性。

procedure WriteComponentResFile(const FileName: string; Instance: TComponent);
var Stream: TStream;
begin
  Stream := TFileStream.Create(FileName, fmCreate);
  try Stream.WriteComponentRes(Instance.ClassName, Instance);
  finally Stream.Free; end;
end;

參數:FileName 目標檔名,Instance 根元件(通常為 TForm 衍生類)。內部建立 TFileStream,呼叫 WriteComponentRes 寫入。

20.3.1.2 讀 DFM 文件:ReadComponentResFile

從 DFM 讀取根元件及其所有子元件,配合寫入函數實現重用。

function ReadComponentResFile(const FileName: string; Instance: TComponent): TComponent;
var Stream: TStream;
begin
  Stream := TFileStream.Create(FileName, fmOpenRead);
  try Result := Stream.ReadComponentRes(Instance);
  finally Stream.Free; end;
end;

ReadComponentRes 讀取並回傳元件,結果作為函數回傳值。

20.3.1.3 讀取應用程式資源中的元件

編譯連結後 DFM 嵌入 EXE 資源 (RCDATA),格式變更(無資源頭)。InternalReadComponentRes 使用 TResourceStream 讀取:

function InternalReadComponentRes(const ResName: string; var Instance: TComponent): Boolean;
var HRsrc: THandle;
begin
  HRsrc := FindResource(HInstance, PChar(ResName), RT_RCDATA);
  Result := HRsrc <> 0;
  if not Result then Exit;
  FreeResource(HRsrc);
  with TResourceStream.Create(HInstance, ResName, RT_RCDATA) do
  try Instance := ReadComponent(Instance);
  finally Free; end;
  Result := True;
end;

HInstance 為應用程式控制代碼。先用 FindResource 檢查資源存在性避免 EResNotFound 異常,再建立 TResourceStream 呼叫 ReadComponent。Instance 為 var 參數,可直接取得讀出元件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved