首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

★VCL 支持Unicode 假如你是Delphi工程师★该如何处理

2012-03-09 
★★★VCL 支持Unicode 假如你是Delphi工程师★★★很多方面的消息说Delphi的工程师开始将VCL修改成支持UNICODE

★★★VCL 支持Unicode 假如你是Delphi工程师★★★
很多方面的消息说Delphi的工程师开始将VCL修改成支持UNICODE的了。在不久未来,VCL就可以真正的支持Unicode了。

假如你是Delphi的VCL支持Unicode的项目设计者,你将怎么设计和完成这个任务呢?

请大家各抒己见。



[解决办法]
1, 备份原来的 vcl 源码
2, cd 到 vcl 源码所在顶级目录
3, find string replace widestring;
find .... replace ....
...

4, 开始调试程序的bug, 预计到 2008 或者 2009 吧

[解决办法]
关注
[解决办法]
高手就是高手,不同凡响。。。

郁闷着呢:
http://community.csdn.net/Expert/topic/5430/5430393.xml?temp=.2256739
[解决办法]
aiirii(ari-http://spaces.msn.com/members/aiirii/) ( 五星(高级)) 信誉:420
看到星星我就吓晕了
[解决办法]
高手就是高手,不同凡响。。。
[解决办法]
不同凡响。。。

[解决办法]
不是一般的响
[解决办法]
高手就是高手,不同凡响。。。
[解决办法]
好响好响

如果我是项目设计者装一个中文操作系统先
[解决办法]
在没把台湾统一的时候,VCL实现UNICODE很重要,如果BORLAND的人不出手,估计很麻烦,
[解决办法]
台湾统一在第一位~~~~~~UNICODE在第二位
[解决办法]
我用 Delphi6
[解决办法]
{$UICODE+}
String=WideString

SetWindowText = SetWindowTextW

{$UICODE-}
String=AnsiString

SetWindowText = SetWindowTextA
[解决办法]
学习
[解决办法]
支持,但不知能不能让D再一次站起来
[解决办法]
sxfp
先申请经费,成功后开会研究买什么牌子多少钱的电脑比较好.起码要买一台吧.然后研究让who去买,然后.... 接着就是zswang说的,然后就阿日的.
[解决办法]
看来大家有两种意见:一、换系统 二是、换电脑 总之是完不成
[解决办法]
先买一本书回去研究一下到底什么是UniCode
[解决办法]
先买一本书回去研究一下到底什么是UniCode
经典,我也要研究一下才行.
[解决办法]
回复人:aiirii(ari-http://spaces.msn.com/members/aiirii/) ( 五星(高级)) 信誉:420 2007-3-30 11:02:22 得分:0
?

1, 备份原来的 vcl 源码
2, cd 到 vcl 源码所在顶级目录
3, find string replace widestring;
find .... replace ....
...

4, 开始调试程序的bug, 预计到 2008 或者 2009 吧
-----------------------------------------
首先,这个问题涉及VCL的基础RTL,不只是VCL的事;
第二,这样整个VCL一起改不bug 多多才怪,如果这么简单,VCL早支持UNICODE。
第三,ansistring和widestring是不兼容的,新版VCL不能因为支持unicode而影响对ansistring的兼容。
最候,同意GoldShield的意见,UNICODE支持不只设及simplified Chinese和traditional Chinese

要回答这个问题需要深入研究过VCL的架构,我没有,所以没法回答,但可以肯定这个过程中DUNIT的功德必定无量。


[解决办法]


干嘛Delphi支持Unicode呀,.net就支持得很好,郁闷啊
上次想开发一个小语种版的软件硬是没办法
[解决办法]
比较麻烦,不过暂时还不需要用Unicode
目前的Ansi足够了
我更希望是看见对Windows Mobile/CE, DDK,X64的Native支持
[解决办法]
涉及到string的方法可以用重载的办法来解决,
但是属性不能重载,是一个大的麻烦。

[解决办法]
不过unicode只是在需要同时使用多个多字节字符集的时候才是必要的,还不是非常急需。:)


[解决办法]
回复人:DelphiGuy() ( 五级(中级)) 信誉:100 2007-3-31 14:24:49 得分:0
?

涉及到string的方法可以用重载的办法来解决,
但是属性不能重载,是一个大的麻烦。
----------------------------
这只是在程序员层面的解决办法吧,还不能到达楼主说的Delphi工程师层面的解决方案
[解决办法]
楼主站的高度是不是太高了?
作为一个普通的Delphi程序员,如果在Delphi所属公司还没有完整的解决方案出来前
是不是讨论该如何让自己的程序支持宽字符集更有意义?
[解决办法]
宝蓝的东西搞这些都不行.包括bcb
[解决办法]
没有包袱,假定ANSI不存在,哪还有这么多事?
[解决办法]
转换
UnicodeLetterEntries = 1492; // ~7K table
UnicodeLetterInfo : Array[0..UnicodeLetterEntries - 1] of TUnicodeLetterInfo = (
(Unicode:#$0041; Attr:laUpper; CaseCode:#$0061), // LATIN CAPITAL LETTER A
(Unicode:#$0042; Attr:laUpper; CaseCode:#$0062), // LATIN CAPITAL LETTER B
(Unicode:#$0043; Attr:laUpper; CaseCode:#$0063), // LATIN CAPITAL LETTER C
(Unicode:#$0044; Attr:laUpper; CaseCode:#$0064), // LATIN CAPITAL LETTER D
(Unicode:#$0045; Attr:laUpper; CaseCode:#$0065), // LATIN CAPITAL LETTER E
(Unicode:#$0046; Attr:laUpper; CaseCode:#$0066), // LATIN CAPITAL LETTER F
(Unicode:#$0047; Attr:laUpper; CaseCode:#$0067), // LATIN CAPITAL LETTER G
(Unicode:#$0048; Attr:laUpper; CaseCode:#$0068), // LATIN CAPITAL LETTER H
(Unicode:#$0049; Attr:laUpper; CaseCode:#$0069), // LATIN CAPITAL LETTER I
(Unicode:#$004A; Attr:laUpper; CaseCode:#$006A), // LATIN CAPITAL LETTER J
(Unicode:#$004B; Attr:laUpper; CaseCode:#$006B), // LATIN CAPITAL LETTER K
(Unicode:#$004C; Attr:laUpper; CaseCode:#$006C), // LATIN CAPITAL LETTER L
(Unicode:#$004D; Attr:laUpper; CaseCode:#$006D), // LATIN CAPITAL LETTER M
(Unicode:#$004E; Attr:laUpper; CaseCode:#$006E), // LATIN CAPITAL LETTER N
(Unicode:#$004F; Attr:laUpper; CaseCode:#$006F), // LATIN CAPITAL LETTER O
(Unicode:#$0050; Attr:laUpper; CaseCode:#$0070), // LATIN CAPITAL LETTER P
(Unicode:#$0051; Attr:laUpper; CaseCode:#$0071), // LATIN CAPITAL LETTER Q
(Unicode:#$0052; Attr:laUpper; CaseCode:#$0072), // LATIN CAPITAL LETTER R
(Unicode:#$0053; Attr:laUpper; CaseCode:#$0073), // LATIN CAPITAL LETTER S
(Unicode:#$0054; Attr:laUpper; CaseCode:#$0074), // LATIN CAPITAL LETTER T
(Unicode:#$0055; Attr:laUpper; CaseCode:#$0075), // LATIN CAPITAL LETTER U
(Unicode:#$0056; Attr:laUpper; CaseCode:#$0076), // LATIN CAPITAL LETTER V
(Unicode:#$0057; Attr:laUpper; CaseCode:#$0077), // LATIN CAPITAL LETTER W
(Unicode:#$0058; Attr:laUpper; CaseCode:#$0078), // LATIN CAPITAL LETTER X
(Unicode:#$0059; Attr:laUpper; CaseCode:#$0079), // LATIN CAPITAL LETTER Y
(Unicode:#$005A; Attr:laUpper; CaseCode:#$007A), // LATIN CAPITAL LETTER Z
(Unicode:#$0061; Attr:laLower; CaseCode:#$0041), // LATIN SMALL LETTER A
(Unicode:#$0062; Attr:laLower; CaseCode:#$0042), // LATIN SMALL LETTER B


(Unicode:#$0063; Attr:laLower; CaseCode:#$0043), // LATIN SMALL LETTER C
(Unicode:#$0064; Attr:laLower; CaseCode:#$0044), // LATIN SMALL LETTER D
(Unicode:#$0065; Attr:laLower; CaseCode:#$0045), // LATIN SMALL LETTER E
(Unicode:#$0066; Attr:laLower; CaseCode:#$0046), // LATIN SMALL LETTER F
(Unicode:#$0067; Attr:laLower; CaseCode:#$0047), // LATIN SMALL LETTER G
(Unicode:#$0068; Attr:laLower; CaseCode:#$0048), // LATIN SMALL LETTER H
(Unicode:#$0069; Attr:laLower; CaseCode:#$0049), // LATIN SMALL LETTER I
(Unicode:#$006A; Attr:laLower; CaseCode:#$004A), // LATIN SMALL LETTER J
(Unicode:#$006B; Attr:laLower; CaseCode:#$004B), // LATIN SMALL LETTER K
(Unicode:#$006C; Attr:laLower; CaseCode:#$004C), // LATIN SMALL LETTER L
(Unicode:#$006D; Attr:laLower; CaseCode:#$004D), // LATIN SMALL LETTER M
(Unicode:#$006E; Attr:laLower; CaseCode:#$004E), // LATIN SMALL LETTER N
(Unicode:#$006F; Attr:laLower; CaseCode:#$004F), // LATIN SMALL LETTER O
(Unicode:#$0070; Attr:laLower; CaseCode:#$0050), // LATIN SMALL LETTER P
(Unicode:#$0071; Attr:laLower; CaseCode:#$0051), // LATIN SMALL LETTER Q
(Unicode:#$0072; Attr:laLower; CaseCode:#$0052), // LATIN SMALL LETTER R
(Unicode:#$0073; Attr:laLower; CaseCode:#$0053), // LATIN SMALL LETTER S
(Unicode:#$0074; Attr:laLower; CaseCode:#$0054), // LATIN SMALL LETTER T
(Unicode:#$0075; Attr:laLower; CaseCode:#$0055), // LATIN SMALL LETTER U
(Unicode:#$0076; Attr:laLower; CaseCode:#$0056), // LATIN SMALL LETTER V
(Unicode:#$0077; Attr:laLower; CaseCode:#$0057), // LATIN SMALL LETTER W
(Unicode:#$0078; Attr:laLower; CaseCode:#$0058), // LATIN SMALL LETTER X
(Unicode:#$0079; Attr:laLower; CaseCode:#$0059), // LATIN SMALL LETTER Y
(Unicode:#$007A; Attr:laLower; CaseCode:#$005A), // LATIN SMALL LETTER Z
(Unicode:#$00AA; Attr:laLower; CaseCode:#$FFFF), // FEMININE ORDINAL INDICATOR
(Unicode:#$00B5; Attr:laLower; CaseCode:#$039C), // MICRO SIGN
(Unicode:#$00BA; Attr:laLower; CaseCode:#$FFFF), // MASCULINE ORDINAL INDICATOR
(Unicode:#$00C0; Attr:laUpper; CaseCode:#$00E0), // LATIN CAPITAL LETTER A WITH GRAVE
(Unicode:#$00C1; Attr:laUpper; CaseCode:#$00E1), // LATIN CAPITAL LETTER A WITH ACUTE
(Unicode:#$00C2; Attr:laUpper; CaseCode:#$00E2), // LATIN CAPITAL LETTER A WITH CIRCUMFLEX
(Unicode:#$00C3; Attr:laUpper; CaseCode:#$00E3), // LATIN CAPITAL LETTER A WITH TILDE
(Unicode:#$00C4; Attr:laUpper; CaseCode:#$00E4), // LATIN CAPITAL LETTER A WITH DIAERESIS
(Unicode:#$00C5; Attr:laUpper; CaseCode:#$00E5), // LATIN CAPITAL LETTER A WI
[解决办法]
{$UICODE+}
String=WideString

SetWindowText = SetWindowTextW

{$UICODE-}
String=AnsiString

SetWindowText = SetWindowTextA


应该不会这么简单吧,很多vcl组件都是用string参数,这么改一下,会出问题的。
因为这些vcl组件使用string的参数的时候,很多情况下是用win32api处理的,string变成了widestring,难道没有问题?
不信你改完后比如用RichEdit组件试一下,不出问题才怪!!
[解决办法]
高手想的问题就是不一样啊!~
[解决办法]
看到了五星的... 牛...
[解决办法]
路过

[解决办法]
这个帖子太水
[解决办法]
上次去了CodeGear的產品介紹會.
Delphi2007已經支持Unicode了!而且相當好用.

------解决方案--------------------


胡扯,什么时候说支持Unicode了,只是说正在计划开发当中。。。

做Unicode VCL最重要的问题是向后兼容,也就是要保证Ansi VCL仍然可用。
[解决办法]
1. 方法。
可以通过增加一个同名的重载方法来解决,可以保证100%的兼容性。现在Indy之类的VCL组件中已经大量使用这种技巧。

2. 属性。
尽管不能重载(理论上来说也可以修改编译器以支持重载),也有办法解决。
(1). 强制string类型的属性(也包括对象的string类型成员)使用WideString,因为现在编译器已经能够对AnsiString和WideString类型之间的互相赋值自动转换,所以编译器不需要做任何修改。缺点是部分用户代码可能需要修改。
(2). 修改编译器,在RTTI中增加区分AnsiString和WideString的信息,增加一个类似SizeOf的TypeOf(或者直接使用is关键字也可以)。

[解决办法]
之后当然是对VCL源码进行必要的改写即可了。:)

热点排行