DFM只是在Design時期所使用的檔案
它有兩格式, 一是常見的本文格式
二是Delphi
自定義的兩進制格式
至於在運行期, Form的定義確實是放在Exe文本的Resource中, 並且以Form的Class名稱
做為Resource的名稱
以下附一個簡單的函數, 可以將EXE中包含的Delphi的Form Resource由EXE中提取出來,
並還原為DFM的本文格式
procedure ReadExeForm(const ExeName, FormClass, DfmFile: string);
var
hExe: THandle;
ResStm: TResourceStream;
TextStm: TFileStream;
begin
hExe := LoadLibraryEx(PChar(ExeName), 0, LOAD_LIBRARY_AS_DATAFILE);
if hExe = 0 then RaiseLastWin32Error;
try
ResStm := TResourceStream.Create(hExe, FormClass, RT_RCDATA);
try
TextStm := TFileStream.Create(DfmFile, fmCreate);
try
ObjectBinaryToText(ResStm, TextStm);
finally
TextStm.Free;
end;
finally
ResStm.Free;
end;
finally
FreeLibrary(hExe);
end;
end;