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