首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
C++ Builder
茶馆
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
取消引用
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
关于C++ BUILDER 繁体支持
加为好友
发送私信
在线聊天
gghyoo
gghyoo
等级:
发表于:
2008-03-06 22:03:29
楼主
最近有一个项目要重新开发新版本的,原来的工程是在繁体操作系统上运行的,开发也是在繁体上开发的。
每次都要在电脑上安装两个操作系统,一个繁体,一个简体的。我想问一下大家,可不可以直接在简体上开发,当在繁体上可以正常运行的程序。
我到晚上查了很多资料,好像说要把GBK转成BIG5,我也尝试了一下。可是还是有一点问题。
我的思路是,直接在简体上开发,开发的时候,CAPTION也用简体,在程序初始化的时候,判断操作系统默认语言,如果需要,再遍历所有控件,把所有控件的CAPTION都转成BIG5。
我开始直接在源代码里面做了测试:
AnsiString str= "中华人民共和国 ";
再直接把这个str转成BIG5编码,显示在Memo里面,在繁体系统里面就显示为“中華人民共和國”,算是转换成功了,这让我着实高兴了一把。
后来我用下列方法读取控件的caption时就出现了问题:
int n=Form1-> ComponentCount;
for(int i=0;i <n;i++)
{
if(GetPropInfo(Form1-> Components[i], "Caption "))
Memo1- > Lines- > Add(ConventStr(Form1-> Components[i]- > Name));
}
这样在繁体操作系统上就出现乱码了。
我查了一下资料,发现DFM中存放中文字符是UNICODE的,我尝试将CAPTION读出来之后,将其转换为ANSI编码,再转成BIG5,可还是不行。
后来我怀疑是读出来的CAPTION本身就有问题,就做了如下试验:
AnsiString CaptionStr=GetPropInfo(Form1-> Components[0], "Caption ");
ShowMessage(IntToStr(CaptionStr.Length()));
注:Components[0]是一个Label,其简体下的CAPTION是“中华人民共和国”
结果在简体下MessageBox显示的是14,在繁体下显示的是12,这就更让我觉得奇怪了。
最后,我试着将CaptionStr的BUFFER里面的所有二进制数据转化为十六进制值,显示在MEMO里面,结果,在繁体下和简体下的结果果然不一样。
最后得出来结论,在简体下,和繁体下,读出来的二进制数据是不一样的。
但是,我没有想出来是为什么。
初步猜想是,在简体下,UNICODE使用的CODE PAGE是936,而繁体下,UNICODE的CODE PAGE是950,程序在繁体里面运行的时候,还是当936来处理的,就是说,BCB在给CAPTION赋值之前,已经进行了错误的转化,将950的UNICODE,当936转了。
后来我试了一下使用资源文件,可以达到目的,但是,这样需要将所有的CAPTION,都要写重新在RC里面写一次,这太麻烦了,当然,如果解决不了,这将是我垫底的方案了。
不知道各位大侠们是怎么解决这方面的问题的,还是有别的方案,可以解决繁体和简体的问题。
敬候各位大虾佳音。。
问题点数:
100
回复次数:
11
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
gghyoo
gghyoo
等级:
发表于:
2008-03-06 22:06:10
1
楼 得分:
0
呵呵,自己先顶一个
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
gghyoo
gghyoo
等级:
发表于:
2008-03-06 22:27:31
2
楼 得分:
0
刚刚到网上看到一个工具,是将DELPH的工程从简体转成繁体的,我想到了一种方案,就是直接将工程里面的所
有的DFM里面的Caption的值转换一遍,应该可以了,就是不能一次编译同时支持两种系统。不过也能满足要求,呵呵,明天可以试试看。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
ydlchina
一吨
等级:
发表于:
2008-03-07 07:50:47
3
楼 得分:
0
跟帖
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
PPower
ppower
等级:
发表于:
2008-03-07 08:26:05
4
楼 得分:
0
還是將整個工程轉成繁體再編譯,這樣容易。
自動轉換要處理不少漢字:
1、DFM中漢字為 unicode ,
2、代碼中的漢字被編譯為 GB 碼 ,好象2007中也可能是unicode碼(因為文件可以保存為unicode格式,這個不清楚)
3、外部ini文件或數據庫中文字或資源文件中的漢字
4、程序進行文字的對比或合成時, 小心編碼不同而造成錯誤的結果。(VCL本身就有這問題)
還是將整個工程轉成繁體再編譯,可以輕易避開以上問題。自動簡繁的軟件往往是相對小型的軟件。就算是Windows也是采用不同語言就重新編譯的辦法來應對。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
akirya
坏[其实偶不是什么所谓的坏人]
等级:
发表于:
2008-03-07 08:36:25
5
楼 得分:
0
使用多语言资源文件。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
i54
i54
等级:
发表于:
2008-03-07 14:45:00
6
楼 得分:
0
UP
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
wewaa
阿尔博特
等级:
发表于:
2008-03-07 19:59:51
7
楼 得分:
0
似乎有直接转换的工具。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
gghyoo
gghyoo
等级:
发表于:
2008-03-07 21:32:59
8
楼 得分:
0
我今天写了一个转换的工具,转换整个工程里面的所有的DFM,测试了一下,感觉还行。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
ccrun
cc - http://www.ccrun.com
等级:
发表于:
2008-03-09 02:00:53
9
楼 得分:
0
很多多语言的程序都是依靠配置文件动态切换界面上的字符串实现的。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
gingerj
枸杞子
等级:
发表于:
2008-03-09 07:49:29
10
楼 得分:
0
up
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
knowledge_Is_Life
阿凡
等级:
发表于:
2008-05-01 02:38:51
11
楼 得分:
0
该回复于2008-07-10 02:49:45被版主删除
修改
删除
举报
引用
回复
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
网站简介
-
广告服务
-
网站地图
-
帮助
-
联系方式
-
诚聘英才
-
English
-
问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
abc推荐给好友