問一個Stupid問題? |
答題得分者是:conundrum
|
ralph
初階會員 發表:41 回覆:82 積分:29 註冊:2003-02-04 發送簡訊給我 |
|
aquarius
資深會員 發表:3 回覆:347 積分:330 註冊:2003-05-21 發送簡訊給我 |
|
ralph
初階會員 發表:41 回覆:82 積分:29 註冊:2003-02-04 發送簡訊給我 |
|
aquarius
資深會員 發表:3 回覆:347 積分:330 註冊:2003-05-21 發送簡訊給我 |
|
ralph
初階會員 發表:41 回覆:82 積分:29 註冊:2003-02-04 發送簡訊給我 |
|
aquarius
資深會員 發表:3 回覆:347 積分:330 註冊:2003-05-21 發送簡訊給我 |
DELPHI 標準 VCL 只能使用 AnsiString, 你打 Unicode 進去, 是完全不認得的. 要顯示 UNICODE 要用另一套元件, 請參考
http://home.ccci.org/wolbrink/tnt/delphi_unicode_controls.htm 除了 Unicode 的另外一種作法, 當然就是仍使用AnsiString, 只是要判斷在不同的語言系統下, 用不同的 Charset 去顯示. 但是要記得除了改 Caption 外, 還要改 Font 中 name 和 Charset ...Aquarius
------
水瓶男的blog: http://791909.blogspot.com |
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
DELPHI 標準 VCL 只能使用 AnsiString, 你打 Unicode 進去, 是完全不認得的
然而卻可以儲存UniCode之資料
1. 以DFM為例, 如果你將dfm Save成text檔, 然後用NotePad開啟, 可以看到所有中文字均已Unicode方式儲存.
Run Time 在load dfm時先將其轉為WideString再依系統之CodePage轉為Big5或GW232
若font之CharSet設為DEFAULT_CHARSET, 則在簡體環境可看到簡體, 在繁體環境則看繁體. (不須任何Translate) 2. 在pas中之字串, 理論上是一樣, 實際上則很難實作, 因Delphi之編輯環境無法解釋Unicode, 如果用內碼方式倒是可以 例:
procedure TForm1.Button1Click(Sender: TObject); const wp:array[0..3] of widechar=(#37329,#22823,#20013,#0); begin Edit1.Text:=wp; //Delphi會自動轉換, BCB不會 end;若Edit1之font.charset設為DEFAULT_CHARSET則簡體環境,繁體環境均可正確顯示 [note] 1. 若使用BCB可使用 WideCharToString(wp)將其轉為符合目前之Codepage 2. 若要同時顯示簡,繁可以用兩個TEdit, font.charset分別為CHINESEBIG5_CHARSET 及GB2312_CHARSET, 然後分別convert WideCharToMultiByte(10002, //code page 0, //dwflags wp, //lpWideCharStr 3, // number of chars in string ss, // buffer for new string buffer 6, // size of buffer nil, // default for unmappable chars nil // set when default char used );10002為Big5, 10008為gb232 3. 由於VCL永遠不處理Unicode,因此只可存成Unicode後轉為Big5或gb232 顯示, 若包含著目前字集不存在之字是無法顯示的 |
aquarius
資深會員 發表:3 回覆:347 積分:330 註冊:2003-05-21 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
引言: 請問 ccchen 用的是 DELPHI 那一個版本? 我用 Delphi5, Delphi 7 存成 TEXT 格式的 DFM, 看起來都還是 AnsiString 呀!! 我看 Delphi 5/7 的 Source, 去讀取 DFM 內容時, 也沒找到那兒有 Unicode 轉 AnsiString 的function. 不知你的第一點結論是從那兒確認的?Delphi6之後, 用其他文書編輯器開. 中文的部分, 你可以看到都是 #xxxx,若是Delphi5則可以看到中文 另外你可以看看Source Code Classes.pas中ObjectTextToBinary讀取dfm之處理 Tparser.nextToken可以看到在讀入時先全轉為WideString, 最後再還原成AnsiString |
aquarius
資深會員 發表:3 回覆:347 積分:330 註冊:2003-05-21 發送簡訊給我 |
引言:我又 CHECK 了一下, 發現 DELPHI 真是太自動了!! 若是你只開 Text Form, 則 DELPHI 7 的確如你說的用 Unicode 存放中文字. 但是若我先設 View as Text 後再存檔, 則你再去看 DFM 檔就會變成 AnsiString. ...Aquarius引言: 請問 ccchen 用的是 DELPHI 那一個版本? 我用 Delphi5, Delphi 7 存成 TEXT 格式的 DFM, 看起來都還是 AnsiString 呀!! 我看 Delphi 5/7 的 Source, 去讀取 DFM 內容時, 也沒找到那兒有 Unicode 轉 AnsiString 的function. 不知你的第一點結論是從那兒確認的?Delphi6之後, 用其他文書編輯器開. 中文的部分, 你可以看到都是 #xxxx,若是Delphi5則可以看到中文 另外你可以看看Source Code Classes.pas中ObjectTextToBinary讀取dfm之處理 Tparser.nextToken可以看到在讀入時先全轉為WideString, 最後再還原成AnsiString
------
水瓶男的blog: http://791909.blogspot.com |
ralph
初階會員 發表:41 回覆:82 積分:29 註冊:2003-02-04 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
|
ralph
初階會員 發表:41 回覆:82 積分:29 註冊:2003-02-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |