利用reinit编写多语言程序的问题

yang_jnu 2011-10-17 04:45:23
最近需要编写多语言程序,上网查找下利用resource dll编写较为简单,于是试了下,在动态切换的时候有些问题:

动态切换的方法一般为:
LoadNewResourceModule(Lcid);
ReinitializeForms();

现在的问题是:
LoadNewResourceModule(Lcid);成功加载资源后,再调用ReinitializeForms(),窗口会重新初始化为设计时期的状态,而不能保持在ReinitializeForms()调用前的状态

举个例子:
在再调用ReinitializeForms()前,窗口已经最大化了,但调用ReinitializeForms()后,窗口又变成设计时期的状态(非最大化)这点很郁闷,而且ReinitializeForms()后,窗体的句柄好像也变了,本来在旧窗体中不停绘画的,ReinitializeForms()后
就停止绘制了...

多语言问题搞得我挺烦的,希望各位指点下!!

...全文
200 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
yang_jnu 2011-10-28
  • 打赏
  • 举报
回复
在ENU目录下的DFM是utf-8编码的,直接打不开,而且文本编辑在工程大的情况下,确实很大工程,在其它人的帮助下搞定了,只需将主程另存在ENU目录下,再把主工程的cpp,.h文件拷到ENU目录下,重新打开编辑即可...

resourcestring的问题是俱说是CB的bug,手动将rc资源文件添加到工程即可加载
结贴...
cgl_lgs 2011-10-21
  • 打赏
  • 举报
回复
或是换了位置又或是换了方法,你可以试试?
实在不行就双击ENU目录下的DFM然后编辑啦:)
cgl_lgs 2011-10-21
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 yang_jnu 的回复:]

我也试了,CB5是可以的,delphi 5也可以,而CB6就是不行,纠结......主要用6、5和XE也装过,只是玩玩而已,2006-2010都没装过....

买?
一直都网上下的盗版....
[/Quote]个人用咋都行,公司可就不能这样儿了:)
yang_jnu 2011-10-21
  • 打赏
  • 举报
回复
我也试了,CB5是可以的,delphi 5也可以,而CB6就是不行,纠结......主要用6、5和XE也装过,只是玩玩而已,2006-2010都没装过....

买?
一直都网上下的盗版....
cgl_lgs 2011-10-21
  • 打赏
  • 举报
回复
呵呵,很久不用5了,5肯定是行,6因为编译速度过慢放弃了。2009其实也不太好,2010应该是相对较好的版本,不过没买。
yang_jnu 2011-10-21
  • 打赏
  • 举报
回复
中文转英文,一些控件的大小、长、宽等都可能需要改变,如果没有可视化调整,将会很烦...
yang_jnu 2011-10-21
  • 打赏
  • 举报
回复
首先谢谢你的回答,增加英文后,英文工程文件夹ENU里面肯定包含窗体的dfm,dfm窗体文件一般都可以以窗口形式查看的,现在的问题就是这些窗体不能可视化查看编辑,而CB5、delphi5我都试了,是可以的...
没用过2009,所以不清楚2009的以情况...
cgl_lgs 2011-10-21
  • 打赏
  • 举报
回复
比如你要是英文化的话,用ITE增加英文后,会单独编译出来一个enu文件啊。其实就是一个dll,里面全是二进制的dfm。
我现在用到2009,只不过我是将程序升级上来的,没全新建项目。
yang_jnu 2011-10-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 cgl_lgs 的回复:]

不会吧,这东西一直有啊,怎么会变成只有一套了捏:)
[/Quote]
请问您用的C++ builder几?我用的是CB6,确实是只有一套窗体....我在其它装c++ builder的朋友里面也试过了,也只有一套,而CB5、delphi5我都试了下,却都有两套窗体.....
yang_jnu 2011-10-21
  • 打赏
  • 举报
回复
此外刚在测试加载resourcestring的时候发现也有问题,加载不了其它语言的resourcestring,显示为空....
yang_jnu 2011-10-21
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 cgl_lgs 的回复:]

或是换了位置又或是换了方法,你可以试试?
实在不行就双击ENU目录下的DFM然后编辑啦:)
[/Quote]
我就是想在论坛上问问是不是换了方法之类的......

因为英文语句较长,经常需要调整下组件的位置、大小的,直接文本编辑将会非常麻烦....
yang_jnu 2011-10-20
  • 打赏
  • 举报
回复
顶起.......
有人用过资源dll编写资源文件吗???知道BCB6能否像delphi5一样可以可视化编辑中文窗口与英文窗口的吗???
cgl_lgs 2011-10-20
  • 打赏
  • 举报
回复
不会吧,这东西一直有啊,怎么会变成只有一套了捏:)
yang_jnu 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cgl_lgs 的回复:]

C++Builder自带一个多语言的支持,好像叫ITE。
[/Quote]
我就是用这个的.....CB5、delphi5使用时,每种语言工程下都有各自一套窗体可容易翻译与调整控件,但CB6却只有一套窗体,郁闷.......
cgl_lgs 2011-10-20
  • 打赏
  • 举报
回复
C++Builder自带一个多语言的支持,好像叫ITE。
ccrun.com 2011-10-18
  • 打赏
  • 举报
回复
dynamic_cast<TComponent*>(Sender)->Tag

改成:

(dynamic_cast<TComponent*>(Sender))->Tag
或者:
((TComponent *)Sender)->Tag

说起多语言,我自己的实现是通过配置文件动态更改控件文本的,对于C++Builder自带的Resource DLL功能,木有体验过。
yang_jnu 2011-10-18
  • 打赏
  • 举报
回复
首先非常感谢zzb的回答。
我在ReinitializeForms后再重新通过windowStat = wsMaximized;设置为最大化,没效果,

此外,我在运行RichEdit例子时,切换不成功,查看一下,好像没有语言文件如德语的,而且我看了下切换语言的代码:
if(LoadNewResourceModule(dynamic_cast<TComponent*>(Sender)->Tag) != 0)
{
...
ReinitializeForms();
...
}
红色字体部分看起来好像有点问题
yang_jnu 2011-10-18
  • 打赏
  • 举报
回复
还有一些其它控件可能也需要拉伸或者调整,不能可视化操作,一个个调,将会非常麻烦....
ccrun.com 2011-10-18
  • 打赏
  • 举报
回复
C++Builder相比同版本的Delphi,功能上肯定是有差距。

至于你说的Label问题,可取消Label的AutoSize属性,然后将Label的Width设置的宽一些。
yang_jnu 2011-10-18
  • 打赏
  • 举报
回复
因为程序比较大,配置文件使用起来可能比较麻烦,现在不打算在程序运行时动态切换了,启动时指定语言,不过还有个问题:

因为一些控件,如Label较短,在显示中文时没问题,就是显示英文时会显示不全,想调整下Label的大小或者是字体的大小。

通过Language->Add添加语言资源后,会保存成一个工程组文件,我在delphi5下,可以看到有其它语言(如英语ENU)的工程,并且可以直接可视化编辑ENU的相应窗口,非常方便,但在BCB 6下,虽然也可看到ENU工程,但却无法可视化编辑ENU的窗口,是我哪里操作失误,还是BCB 比 Delphi落后?????
加载更多回复(1)

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧