转换 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
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
看到星星我就吓晕了
String=WideStringSetWindowText = SetWindowTextW{$UICODE-}
String=AnsiStringSetWindowText = SetWindowTextA
先申请经费,成功后开会研究买什么牌子多少钱的电脑比较好.起码要买一台吧.然后研究让who去买,然后.... 接着就是zswang说的,然后就阿日的.
经典,我也要研究一下才行.
? 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的功德必定无量。
上次想开发一个小语种版的软件硬是没办法
目前的Ansi足够了
我更希望是看见对Windows Mobile/CE, DDK,X64的Native支持
但是属性不能重载,是一个大的麻烦。
? 涉及到string的方法可以用重载的办法来解决,
但是属性不能重载,是一个大的麻烦。
----------------------------
这只是在程序员层面的解决办法吧,还不能到达楼主说的Delphi工程师层面的解决方案
作为一个普通的Delphi程序员,如果在Delphi所属公司还没有完整的解决方案出来前
是不是讨论该如何让自己的程序支持宽字符集更有意义?
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
String=WideStringSetWindowText = SetWindowTextW{$UICODE-}
String=AnsiStringSetWindowText = SetWindowTextA
应该不会这么简单吧,很多vcl组件都是用string参数,这么改一下,会出问题的。
因为这些vcl组件使用string的参数的时候,很多情况下是用win32api处理的,string变成了widestring,难道没有问题?
不信你改完后比如用RichEdit组件试一下,不出问题才怪!!
Delphi2007已經支持Unicode了!而且相當好用.
可以通过增加一个同名的重载方法来解决,可以保证100%的兼容性。现在Indy之类的VCL组件中已经大量使用这种技巧。2. 属性。
尽管不能重载(理论上来说也可以修改编译器以支持重载),也有办法解决。
(1). 强制string类型的属性(也包括对象的string类型成员)使用WideString,因为现在编译器已经能够对AnsiString和WideString类型之间的互相赋值自动转换,所以编译器不需要做任何修改。缺点是部分用户代码可能需要修改。
(2). 修改编译器,在RTTI中增加区分AnsiString和WideString的信息,增加一个类似SizeOf的TypeOf(或者直接使用is关键字也可以)。