全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:748
推到 Plurk!
推到 Facebook!

Delphi6開發的程序如何轉Delphi5

尚未結案
guohua_fu
一般會員


發表:44
回覆:50
積分:18
註冊:2003-06-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-01 13:48:41 IP:211.96.xxx.xxx 未訂閱
各位前輩: 因我想Delphi6開發的程序轉成Delphi5環境下運行,不知道什麼辦法最好解決這個難題?謝謝! ====================== ^_^ 相信自己,你是最棒的! jacky ======================
------
jacky
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-02 08:48:30 IP:218.163.xxx.xxx 未訂閱
如果沒有不相容的元件, 剩下的主要關鍵在 .DFM檔 Delphi6之後DFM檔是以Unicode方式儲存, Delphi5則否(繁體的是Big5) 簡單的可以在Delphi6中將dfm--View as Text, 再copy下來, paste至notepad中,存檔(注意選擇使用之code--Big5或??) 當然理想的方法是寫一個小程式, 讀取dfm 轉成text, 轉成所要之code再存檔
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-02 09:06:57 IP:218.163.xxx.xxx 未訂閱
試試這個,沒在簡體中試過
function OpenDfmAsText(dfmname:string):TStringList;
var fstream:TFileStream;
    txtStream:TMemoryStream;
    stype:TStreamOriginalFormat;
    pfmt:TParser;
    s:string;
    ws:WideString;
    p0,p1,p2:integer;
    function findstr(begpos:integer; substr,sstr:string):Integer;
    var ss:String;
    begin
      ss:=copy(sstr,begpos,length(sstr)-begpos 1);
      Result:=pos(substr,ss) begpos-1;
    end;
begin
  result:=TStringList.Create;
  try
    fstream:=TFileStream.create(dfmname,fmOpenRead);
    txtstream:=TMemoryStream.create;
    fStream.Position:=0;
    stype:=TestStreamFormat(fStream);
    if stype=sofText then
      ObjectResourceToText(fStream,txtStream,stype)
    else
      ObjectResourceToText(fStream,txtStream);
    txtstream.Position:=0;
    try
      Result.LoadFromStream(txtStream);
      txtstream.Position:=0;
      pfmt:=TParser.create(txtStream);
      p0:=1;
      with pfmt do
      while NextToken <> toEof do begin
        if TOken=toWString then begin
          ws:=TokenWideString;
          s:=TokenString;
          p1:=findstr(p0,s,Result.text);
          p2:=p1 length(s);
          Result.text:=copy(Result.text,1,p1-1) #39 ws #39 copy(Result.text,p2,length(Result.text)-p2 1);
          p0:=p1 length(ws);  // next finding position
        end;
      end;
    finally
      txtStream.Free;
      fstream.Free;
    end;
  except
    Result.free;
    Result:=nil;
  end;
end;    procedure TForm1.Button1Click(Sender: TObject);
var l:TStringlist;
begin
  l:=OpenDfmAsText('unit1.dfm');  //給任何dfm檔, 轉完後應該是AnsiString
  l.SaveToFile('xx.txt');//重save
  l.free;
end;
如果測試OK, savetofile可以直接Replace原檔, 別忘了先Backup, 否則壞了別怪我
系統時間:2024-06-29 3:44:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!