在Delphi里 用View as Text沒問題,正常
關閉
把文件擴展名修改為txt,用記事本打開是亂碼(部份能看清)這是一部份的form是這樣,有的dfm就沒有這樣的問題
我感覺很奇怪,為何有的from用記事本打開正常,有的亂碼問題的發現是這樣的
公司里要對以前的程序的TQuery控件進行替換
用我們自己寫的TMyQuery
我就寫個程序把當前所有的項目中的pas,dfm文件的tquery替換成tmyquery
這個小程序是沒有問題
現在來編譯新的程序卻發現有的from來打開,有的form不能打開
我就查找這兩類不同form的區別
於是發現舊的項目(有tquery)里的dfm用記事本打開正常的話,經過小程序轉換過來就沒有問題,如果原來的from的dfm用記事本打開不正常的話,轉過來就有問題

解决方案 »

  1.   

    DFM文件以前是使用二进制格式的,你打开就会不正常。
    在你替换之前,利用Delphi只带的convert程序转换一下DFM即可。
      

  2.   

    http://cx66.com/cxgzs/program/delphi/962.htm
      

  3.   

    使用text form在form上点右键,选中text form
      

  4.   

    以前我收集的一些函数,对dfm文件的,还没试过标题:处理窗体代码
    说明:既dfm格式;
    function ComponentToString(Component: TComponent): string;
    var
      BinStream: TMemoryStream;
      StrStream: TStringStream;
      s: string;
    begin
      BinStream := TMemoryStream.Create;
      try
        StrStream := TStringStream.Create(s);
        try
          BinStream.WriteComponent(Component);
          BinStream.Seek(0, soFromBeginning);
          ObjectBinaryToText(BinStream, StrStream);
          StrStream.Seek(0, soFromBeginning);
          Result := StrStream.DataString;
        finally
          StrStream.Free;
        end;
      finally
        BinStream.Free
    end;
    end; { ComponentToString }function StringToComponent(Value: string; Instance: TComponent): TComponent;
    //如果元件是嵌套形式则必须注册子元件类
    //参考RegisterClasses();UnRegisterClasses()
    var
      StrStream: TStringStream;
      BinStream: TMemoryStream;
    begin
      StrStream := TStringStream.Create(Value);
      try
        BinStream := TMemoryStream.Create;
        try
          ObjectTextToBinary(StrStream, BinStream);
          BinStream.Seek(0, soFromBeginning);
          Result := BinStream.ReadComponent(Instance);
        finally
          BinStream.Free;
        end;
      finally
        StrStream.Free;
      end;
    end; { StringToComponent }
    ///////Begin Demo
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Memo1.Text := ComponentToString(Edit1);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      StringToComponent(Memo1.Text, Edit1);
    end;
    ///////End Demo