Delphi 表格 (DFM) 转文本

Posted

技术标签:

【中文标题】Delphi 表格 (DFM) 转文本【英文标题】:Delphi Form (DFM) To Text 【发布时间】:2010-08-16 15:19:47 【问题描述】:

如何使用 C# 将 Delphi 的 DFM 表单从二进制格式转换为文本格式?

【问题讨论】:

【参考方案1】:

最好的方法可能是调用 CONVERT.EXE,这是 Delphi 附带的命令行应用程序。 Here's an example in Delphi。你可以在 C# 中做同样的事情。

【讨论】:

提示:将 *.DFM 文件类型与 CONVERT.EXE 关联。这样您就可以在资源管理器中选择多个 DFM 文件,然后在上下文菜单中选择“使用转换打开”。【参考方案2】:

我用这四种方法来测试DFM文件格式并转换如下:

function IsDFMStreamBinary( AStream: TMemoryStream ): Boolean;
 Returns true if dfm file is in a binary format 
var
  F: TMemoryStream;
  B: byte;
begin
  B := 0;
  F := TMemoryStream.Create;
  F.LoadFromStream( AStream );
  try
    F.read( B, 1 );
    Result := B = $FF;
  finally
    F.Free;
  end;
end;

function DfmFile2Stream( const ASrc: string; ADest: TStream ): Boolean;
 Save dfm to stream 
var
  SrcS: TFileStream;
begin
  SrcS := TFileStream.Create( ASrc, fmOpenRead or fmShareDenyWrite );
  try
    ObjectResourceToText( SrcS, ADest );
    Result := True;
  finally
    SrcS.Free;
  end;
end;

procedure Txt2DFM( ASrc, ADest: string );
 Convert Text to DFM 
var
  SrcS, DestS: TFileStream;
begin
  SrcS := TFileStream.Create( ASrc, fmOpenRead );
  DestS := TFileStream.Create( ADest, fmCreate );
  try
    ObjectTextToResource( SrcS, DestS );
  finally
    SrcS.Free;
    DestS.Free;
  end;
end;

function Dfm2Txt( const ASrc, ADest: string ): boolean;
 Convert a binary DFM to text 
var
  ASrcS, ADestS: TFileStream;
begin
  ASrcS := TFileStream.Create( ASrc, fmOpenRead );
  ADestS := TFileStream.Create( ADest, fmCreate );
  try
    ObjectResourceToText( ASrcS, ADestS );
    Result := True;
  finally
    ASrcS.Free;
    ADestS.Free;
  end;
end;

【讨论】:

如果您没有忽略问题的“来自 C#”部分,我会投赞成票。 不清楚为什么你展示了四个函数而不是三个或五个(或九个?)。我的意思是,DfmFile2Stream 的相关性可能和DfmStream2File 一样高。【参考方案3】:

Delphi 的二进制 DFM 文件毕竟是对象的二进制表示。

完成这项工作的正确方法是编写自私的 C# 命令行实用程序(不再需要任何外部依赖),基于二进制 DFM 文件本身的格式知识。 p>

如果格式没有公开,做一个逆向工程应该是可行的:

ObjectResourceToText 源代码可用(Classes.pas)。 转换器(从二进制到文本,反之亦然)也可用于生成工具所需的输入。

【讨论】:

问题在您发表评论前一年得到了充分的回答,它增加了什么?

以上是关于Delphi 表格 (DFM) 转文本的主要内容,如果未能解决你的问题,请参考以下文章

Delphi 常见文件类型

Delphi - 为啥 ExplicitWidth 和 ExplicitHeight 不断出现在 .DFM 文件中,它是啥?

Delphi - 为啥 ExplicitWidth 和 ExplicitHeight 不断出现在 .DFM 文件中,它是啥?

delphi save .dfm to .txt

delphi中的各类文件类型(转)

delphi中的.dpr.pas和.dfm文件都怎么解释?