線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4406
推到 Plurk!
推到 Facebook!

為什麼 Delphi for Win32 一直都不支援 Unicode 呢?

尚未結案
te_hsun
一般會員


發表:43
回覆:34
積分:20
註冊:2002-03-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-07-15 13:50:17 IP:220.133.xxx.xxx 未訂閱

為什麼 Delphi for Win32 一直都不支援 Unicode 呢?
Win XP 都已經出來這麼久了...

...

mainchen2
一般會員


發表:3
回覆:16
積分:3
註冊:2006-07-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-07-16 06:22:04 IP:61.31.xxx.xxx 未訂閱
從 Delphi 7 就有很多類似的討論及建議 (向 Borland 建議), 但 Delphi8 , D2005, D2006, 一路看 (買) 下來, 已經看到答案了, 如果可以支援 Delphi 早就內建了, 如果您真的很想用 Win32 開發, 目前 Unicode 最佳的決解方案是使用 Tnt , 如果您不急, 那就繼續等吧! 我想不是只有您一個反應此問題而已.
danny
版主


發表:100
回覆:522
積分:595
註冊:2002-03-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-07-16 10:40:30 IP:211.76.xxx.xxx 未訂閱

這牽涉到 VCL 的 framework, 如果很容易的話 Borland 早就改了.

當初Delphi發展VCL時並沒有Unicode的問題, 目前只能轉到 .Net 或用 3Party 的元件.


===================引 用 文 章===================

為什麼 Delphi for Win32 一直都不支援 Unicode 呢?
Win XP 都已經出來這麼久了...

...

------
將問題盡快結案也是一種禮貌!
enter2004
初階會員


發表:51
回覆:94
積分:34
註冊:2005-04-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-07-16 16:42:46 IP:218.163.xxx.xxx 未訂閱

我認為很容易

因為只要Borland買下Tntware就好了

Tntware都做出來了

Borland收購他就好了

------
人生就像泡泡一樣,乘著風被吹著跑,等你發現時已經消失了。
就在快要消失的瞬間,希望能再飛高一點,
但是回神時總是慢了一步。
mainchen2
一般會員


發表:3
回覆:16
積分:3
註冊:2006-07-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-07-17 10:26:48 IP:61.31.xxx.xxx 未訂閱
雖然可以使用 TNT 來解決 Unicode 的問題, 不過有很多的 3Party 都不支援 Unicode, 只能用很陽春的元件來開發, 不然就要自己改 3Party 的 Source Code 了, 也就是說即使 Borland 收購 TNT 也只是多一組元件而已, 況且 TNT 是免費, Borland 沒有必要多花這個錢吧!
aworm
一般會員


發表:0
回覆:1
積分:0
註冊:2006-09-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-09-20 22:01:19 IP:221.137.xxx.xxx 未訂閱

修改构件支持UNICODE指南

安装TntUNICODE控件, 然后修改原ANSI控件.

(1)首先uses TntSystem, TntSysUtils, TntClasses,WideStrUtils{Delphi 2006自带};
{WideParamStr} {WideXXX}
(2)将char改为widechar, pchar改为Pwidechar,string改为widestring, 主要属性为caption, Text, Hint,
还有内部使用的各种TStringList应该改为TtntStringList, TStrings改为TtntStrings,
TFileStream, TMemoryStream, TResourceStream也改为TtntFileStream, TtntMemoryStream, TTntResourceStream
TRegistry改为TTntRegistry;
将ParamStr改为WideParamStr
将ExtractFileXXXX改为WideExtractFileXXXX

(3)涉及到以下例程,
StrLCopy,StrCat,StrPos等以Str开头的PChar处理过程统统改为WStr开头的PWideChar处理过程.

(4)涉及系统例程,
Shell_NotifyIcon->Shell_NotifyIconW
MessageBox->MessageBoxW

(5)对于
Canvas.TextRect(CaptionRect, Caption, [tfNoClip, tfEndEllipsis]);
改为如下类似例程:
WideCanvasTextRect(canvas, CaptionRect, CaptionRect.Left,CaptionRect.Top,Caption);
//TntGraphics;
(6)对于HINT属性,增加
private
function GetHint: WideString;
procedure SetHint(const Value: WideString);
Published
property Hint:WideString read GetHint write SetHint;

function TUNCategoryButtons.GetHint: WideString;
begin
Result := TntControl_GetHint(Self)
end;

procedure TUNCategoryButtons.SetHint(const Value: WideString);
begin
TntControl_SetHint(Self, Value);
end;

增加或修改CM_HINTSHOW消息;
procedure TUNCategoryButtons.CMHintShow(var Message: TMessage{TCMHintShow});message CM_HINTSHOW;
然后在里面增加如下段落:
if Win32PlatformIsUnicode then begin
with TCMHintShow(Message) do begin
if (HintInfo.HintWindowClass = THintWindow) or (HintInfo.HintWindowClass.InheritsFrom(TTntCustomHintWindow)) then begin
if (HintInfo.HintWindowClass = THintWindow) then
HintInfo.HintWindowClass := TTntCustomHintWindow;
HintInfo.HintData := HintInfo;
////////////////////////////////////////////////
self.Hint:=HintStr; //调用此行是为了让TntControl以后能够找到正确的Hint
//因为TntControl将在调用时再次读取HintControl的Hint属性,从而覆盖原来的HintInfo.HintStr
///////////////////////////////////////////////

HintInfo.HintStr := WideGetShortHint(HintStr);
end;
end;
end;


(7)增加Action的支持,修改XXX.ActionChange或者重载:
procedure TBaseButtonItem.ActionChange(Sender: TObject;
CheckDefaults: Boolean);
begin
if Sender is TCustomAction then
with TCustomAction(Sender) do
begin
if not CheckDefaults or (Self.Caption = '') then
Self.Caption := Caption;
if not CheckDefaults or (Self.Hint = '') then
Self.Hint := Hint;
if not CheckDefaults or (Self.ImageIndex = -1) then
Self.ImageIndex := ImageIndex;
if not CheckDefaults or not Assigned(Self.OnClick) then
Self.OnClick := OnExecute;
end;
以上为原有程序段,新增以下程序段即可:
if (Sender is TCustomAction and Supports(Sender, ITntAction) then begin
self.Caption:= TntAction_GetCaption(TCustomAction(Sender));
self.Hint:= TntAction_GetHint(TCustomAction(Sender));
end;

end;

小蟲蟲
一般會員


發表:38
回覆:55
積分:23
註冊:2002-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-01-02 11:33:12 IP:59.120.xxx.xxx 訂閱
這是老問題了!
前幾年我在Delphi的論壇上找過答案,Borland的人很明確的講,是不會在Win32版本上支援Unicode。
如果是要用Unicode,則請改用 .net版本。

就是這樣子,瞄!

至於TNT,還蠻好用的~~~
只是,如果有用到其他3rd party的元件,可就不好玩了~~~


g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-01-05 21:59:42 IP:220.134.xxx.xxx 訂閱
可是TNT針對的EditMask好像都沒有處理!真是困擾!
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
系統時間:2024-04-28 12:40:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!