首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于C++ BUILDER 繁体支持
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于: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  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-06 22:06:101楼 得分:0
    呵呵,自己先顶一个
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-06 22:27:312楼 得分:0
    刚刚到网上看到一个工具,是将DELPH的工程从简体转成繁体的,我想到了一种方案,就是直接将工程里面的所
    有的DFM里面的Caption的值转换一遍,应该可以了,就是不能一次编译同时支持两种系统。不过也能满足要求,呵呵,明天可以试试看。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-07 07:50:473楼 得分:0
    跟帖
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-07 08:26:054楼 得分:0
    還是將整個工程轉成繁體再編譯,這樣容易。
    自動轉換要處理不少漢字:
    1、DFM中漢字為 unicode ,
    2、代碼中的漢字被編譯為 GB 碼 ,好象2007中也可能是unicode碼(因為文件可以保存為unicode格式,這個不清楚)
    3、外部ini文件或數據庫中文字或資源文件中的漢字
    4、程序進行文字的對比或合成時, 小心編碼不同而造成錯誤的結果。(VCL本身就有這問題)

    還是將整個工程轉成繁體再編譯,可以輕易避開以上問題。自動簡繁的軟件往往是相對小型的軟件。就算是Windows也是采用不同語言就重新編譯的辦法來應對。


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • akirya
    • 等级:
    发表于:2008-03-07 08:36:255楼 得分:0
    使用多语言资源文件。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • i54
    • 等级:
    发表于:2008-03-07 14:45:006楼 得分:0
    UP
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wewaa
    • 等级:
    发表于:2008-03-07 19:59:517楼 得分:0
    似乎有直接转换的工具。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-07 21:32:598楼 得分:0
    我今天写了一个转换的工具,转换整个工程里面的所有的DFM,测试了一下,感觉还行。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ccrun
    • 等级:
    发表于:2008-03-09 02:00:539楼 得分:0
    很多多语言的程序都是依靠配置文件动态切换界面上的字符串实现的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-09 07:49:2910楼 得分:0
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-01 02:38:5111楼 得分:0
    该回复于2008-07-10 02:49:45被版主删除
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved