有没有使程序界面自动简繁转换的控件?(30分)

  • 主题发起人 主题发起人 siaosa
  • 开始时间 开始时间
S

siaosa

Unregistered / Unconfirmed
GUEST, unregistred user!
有没有使程序界面自动简繁转换的控件?
在繁体系统程序显示繁体字,在简体系统显示简体字



我用GBToBig5函数转换Edit1.Text能够正常将体转换成繁体,但转换Label1.Caption乱码,转换过程如下
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:=GBToBig5(Edit1.Text); //在繁体系统中正常显示繁体字
Label1.Caption:=GBToBig5(Label1.Caption); //在繁体系统中乱码
end;
这是为什么?


找不到控件自己找了个简体转换繁体函数
function GBToBig5(GBStr : String): AnsiString;
{进行GB转BIG5内码}
var
Len: Integer;
pGBCHTChar: PChar;
pGBCHSChar: PChar;
pUniCodeChar: PWideChar;
pBIG5Char: PChar;
begin
pGBCHSChar := PChar(GBStr);
Len := MultiByteToWideChar(936,0,pGBCHSChar,-1,nil,0);
GetMem(pGBCHTChar,Len*2+1);
ZeroMemory(pGBCHTChar,Len*2+1);
//GB CHS -> GB CHT
LCMapString($804,LCMAP_TRADITIONAL_CHINESE,pGBCHSChar,-1,pGBCHTChar,Len*2);
GetMem(pUniCodeChar,Len*2);
ZeroMemory(pUniCodeChar,Len*2);
//GB CHT -> UniCode
MultiByteToWideChar(936,0,pGBCHTChar,-1,pUniCodeChar,Len*2);
Len := WideCharToMultiByte(950,0,pUniCodeChar,-1,nil,0,nil,nil);
GetMem(pBIG5Char,Len);
ZeroMemory(pBIG5Char,Len);
//UniCode -> Big5
WideCharToMultiByte(950,0,pUniCodeChar,-1,pBIG5Char,Len,nil,nil);
Result := String(pBIG5Char);
FreeMem(pBIG5Char);
FreeMem(pGBCHTChar);
FreeMem(pUniCodeChar);
end;
 
不要用什么控件了,自己在INI文件里分别对简繁进行定义吧。
实在要用控件,试试TsiLang Components Suite
 
weiliu:自己在ini文件里面怎么定义啊,说一下撒,不要只是提个头撒,嘿嘿
 
我用GBToBig5函数转换Edit1.Text能够正常将体转换成繁体,但转换Label1.Caption乱码
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:=GBToBig5(Edit1.Text); //在繁体系统中正常显示繁体字
Label1.Caption:=GBToBig5(Label1.Caption); //在繁体系统中乱码
end;
这是为什么?


找不到控件自己找了个简体转换繁体函数
function GBToBig5(GBStr : String): AnsiString;
{进行GB转BIG5内码}
var
Len: Integer;
pGBCHTChar: PChar;
pGBCHSChar: PChar;
pUniCodeChar: PWideChar;
pBIG5Char: PChar;
begin
pGBCHSChar := PChar(GBStr);
Len := MultiByteToWideChar(936,0,pGBCHSChar,-1,nil,0);
GetMem(pGBCHTChar,Len*2+1);
ZeroMemory(pGBCHTChar,Len*2+1);
//GB CHS -> GB CHT
LCMapString($804,LCMAP_TRADITIONAL_CHINESE,pGBCHSChar,-1,pGBCHTChar,Len*2);
GetMem(pUniCodeChar,Len*2);
ZeroMemory(pUniCodeChar,Len*2);
//GB CHT -> UniCode
MultiByteToWideChar(936,0,pGBCHTChar,-1,pUniCodeChar,Len*2);
Len := WideCharToMultiByte(950,0,pUniCodeChar,-1,nil,0,nil,nil);
GetMem(pBIG5Char,Len);
ZeroMemory(pBIG5Char,Len);
//UniCode -> Big5
WideCharToMultiByte(950,0,pUniCodeChar,-1,pBIG5Char,Len,nil,nil);
Result := String(pBIG5Char);
FreeMem(pBIG5Char);
FreeMem(pGBCHTChar);
FreeMem(pUniCodeChar);
end;
 
搞什么繁简转换..
搞点中英文转换还有点意思
 
To:dcs_dcs
程序需要运行在简繁体系统中才有这样的要求的
 
最好使用外部的语言包,因为用GB2Big5等,不能把一些本地语言转化.
 
To:鳄鱼先生
只要将Label.Caption转换成Big5码就行了,问题是转换后,在繁体系统中Label.Caption还是显示乱码
 
把Font 的Script 改为繁体的.
 
Font 没有Script属性
 
用delphi 2006
 
这个应该是delphi得问题,它在存储窗口得时候是采用ansi码存储得!当在繁体环境下面读取label.caption得时候就已经错误了!所以你翻译出来同样是乱码!所以你可以采用TNtware得控件(支持unicode),它存储得时候是以unicode存储得!所以它不会乱码!!!
 
To: paulcross
D2006一样会乱码
 
To:sdssoft
不想用TNtWare,要将程序中所有的VCL的Label控件都要换成TNtWare的,太多了,有没有其它的办法可以解决? 例如直接将Caption属性的值转码?
 
我也不想换,但最后还是换了,否则你就到繁体得环境下面去编译吧!!!
 
明天安装一个繁体的系统测试一下,我也要碰到这个问题,肯定不会用其它方法,就用你那个方法了,肯定有办法[:D]
 
思路
const UNI: array[,] of word
($0000,$0000),
($0000,$0000),
($0000,$0000),
($0000,$0000),
($0000,$0000),
($0000,$0000),
($0000,$0000),
($842C,$0000),
($0000,$0000),
($0000,$0000),
($0000,$0000),
($0000,$0000),

............


function 简转繁;
function 繁转简;
 
Font 的字符集,那天用的是英文的系统,看到的是Script
 
To:郭玉梁
谢谢啦!另外如果有这样的简繁自动转换功能则更好:不论用户用简体还是繁体系统,系统能够自动显示简繁体,并且连数据感知控件也能够自动转换并正确存储.

To:鳄鱼先生
试了不行的
 
这个问题我也要解决的,感觉应该可以解决
数据感知控件就要不要管他们了,那个不太好做,或者效率太低了
只要静态数据能支持简繁就可以了
 
后退
顶部