我有一个用Delphi 2007编写的相当大的(免费软件)项目,该项目同时使用TntUnicodeControls
和TntLXControls
库,我打算转到Delphi 2009。
不幸的是我在我的项目中到处使用这些库:
TntLXForms
,TntLXRegistry
,... TntControls
的第三方组件。 (可提供VirtualTrees,SpTBXLib,D2009更新)您是否有任何将此类项目移植到Delphi 2009的经验和/或建议。首先切换到(商业)TMS
Unicode控件是否明智?
答案 0 :(得分:5)
安装GExperts;有“替换组件”IDE插件,可以帮助将TTntXXX转换为TXXXX控件。尝试一次,如果可以,只需选中“替换项目中的evrywhere”。
SpTbx和VirtualTrees只能重新编译 - 它们都支持D2009。
如果你使用WinAPI包装器来调用Unicode API-s它们也应该在D2009中工作。
这使您无法使用TntLX控件(TntLXForms,TntLXRegistry,...)。由于它们不受支持,可能现在是改变它们的好时机。
答案 1 :(得分:4)
我可以帮助解决其中的一些问题,因为我正在移植从2007年到2009年使用TNT的C ++ Builder应用程序。在D2009中切换到Unicode已经过期且受欢迎。然而,遗憾的是,对于那些过去不需要unicode的人来说过渡可能更容易,而且可能仍然没有。如果像我一样,你需要Unicode并使用Troy Wolbrink的伟大TNT控件来提供它,你就会有一个相当复杂的工作......
好消息是来自TMS Software的新版TNTControls支持D2009。我没有看过这个,但是期望它只是原生VCL组件上的“外观”层,以便于移植。我会考虑如果你的其他库可以重建使用它。
但是,您可能最好回到本机VCL控件,原因是字符串类型。 TNT控件一直使用WideString来回传递Unicode字符串,你可能已经通过自己的代码分散了WideString。这将起作用,但它并不理想,因为WideString实际上只是用于COM互操作,因为它“包装”了COM BSTR类型。 D2009中的原生unicode字符串是引用计数的,应该明显更快。
如果您决定将TNT组件替换为本机VCL组件,则可以使用GExperts“替换组件”命令 - 或者更简单地在.DFM和.PAS文件中进行搜索和替换(您在文本形式,不是吗)用T替换TTNT。
答案 2 :(得分:3)
我推荐以下资源:
Marco Cantu的Delphi 2009手册第3章(移植到unicode) http://www.marcocantu.com/dh2009/
Nick Hodges的文章(Unicode世界中的Delphi) http://blogs.codegear.com/nickhodges/2008/11/20/39149
答案 3 :(得分:1)
我认为无论哪种方式都会有很多工作要做。可能比你之前没有完成所有工作以使其兼容unicode更为重要。我个人会忘记tms Unicode控件,然后回到vcl。它将来会挽救更多的痛苦。 (不要反对那些控制,请注意。)
另外请记住,D2009的字符串与D2007的Widestring不同,你无疑在你的应用程序中使用了它。所以Widestring的所有实例,你如此努力地从字符串(这是AnsiString)改变,需要再次返回字符串(现在是unicodestring)。