将支持Unicode的Delphi 2006应用程序移植到Delphi 2009

5

我有一个完全支持Unicode的Delphi 2006应用程序。我已经将所有的AnsiStrings替换为WideStrings,将所有的VCL控件替换为TNT控件,并将所有字符串函数从AnsiStrings更改为WideStrings。看起来这些工作都是徒劳的,因为我现在不得不把它全部恢复回去。有没有什么方法可以欺骗Delphi 2009认为WideStrings实际上是UnicodeStrings?


顺便说一句,在这里随意接受一个答案。 - Nick Hodges
3个回答

13

并没有什么捷径,但如果您真正使应用程序启用了 Unicode 编码,您不会后悔。

TNT 控件可以轻松地替换为常规的 VCL 控件。您可以使用 GExperts (http://www.gexperts.org) 提供的向导自动将一种控件类型替换为另一种类型。

然后,您可以将所有 WideString 声明更改为常规字符串。现在,String 是 UnicodeString 的别名,因此所有字符串都可以很好地保存 Unicode 数据。

顺便提一下,TNT 控件的作者 Troy Wolbrink 现在更喜欢 Delphi 2009 而不是他自己的控件。


1
如果我可以说的话,将您的代码转换为Unicode Delphi的最佳资源之一是由某个名叫Nick的人撰写的白皮书。此外,Marco Cantu的一本相当不错的书籍深入介绍了转换过程。有很多原因,并且启用应用程序以进入本地Unicode Delphi会带来很多回报。我已经为至少十几个主要应用程序完成了此操作。 - Warren P

0
TNT Controls的主要优点在于它可以作为Windows 9x中的Ansi程序运行。它不是完全的Unicode。如果您想要在任何地方获得完全的Unicode支持(例如Stringlist.LoadFromFile,Form.OnKeyPress),最好转移到Delphi 2009。

我甚至在所有地方都用 WideStringLists 替换了 stringlists。Delphi 2009 中的文本文件是 Unicode 的吗?我用 Filestreams 替换了文本文件。 - Steve
你可以使用widestringlist加载Unicode文本,但是你不能像使用ANSI文件名那样简单地从非ANSI文件名的文件中加载文本。 - samir105

0

我在一个使用不同XML文件作为输入的应用程序中做了相同的事情。 在我的情况下,我在整个程序中都使用UTF-8(因此可以使用常规字符串),仅在显示目的(TNT控件)时转换为WideString。

我删除了WideString和UTF-8之间来回的转换,并手动将TNT控件替换为常规VCL控件,因为只有少数几个表单。

转换需要大约一个小时进行测试。 代码更简单,程序明显更快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接