急!怎么能够在界面的EDIT中输入韩文?

yy2001 2005-11-24 04:33:00
请问怎么能够在界面的EDIT中输入韩文?我已经在区域设置中加入了韩文,但输入后显示是‘? ’
...全文
478 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
yy2001 2005-11-27
  • 打赏
  • 举报
回复
总于解决了,感谢众为兄弟的帮助!
特别是季老大的热心帮助,本贴的分数给其他的兄弟,请老大到http://community.csdn.net/Expert/topic/4421/4421751.xml?temp=.9493677
领分。再次表示感谢!
yy2001 2005-11-26
  • 打赏
  • 举报
回复
上,兄弟们帮我看看我的代码有问题吗?
WideString a=TntEdit1->Text;
char AnsiSDst_CHS[100];
wchar_t* WideSSrc=a.c_bstr();
char c=' ';
int n=0;
WideCharToMultiByte( 949,0,WideSSrc,wcslen(WideSSrc)+1,AnsiSDst_CHS,100*(sizeof(char)),&c,&n);
Edit1->Text=AnsiSDst_CHS;

在Edit1内可以显示TntEdit1的内容了,可看上去不一样?但我分别拷贝到WORD中就显示内容是一样的了,这是什么原因呢?
yy2001 2005-11-25
  • 打赏
  • 举报
回复
感谢老大指点!
我现在改成如下:
WideString a=TntEdit1->Text;
char AnsiSDst_CHS[100];
wchar_t* WideSSrc=a.c_bstr();
char c=' ';
int n=0;
WideCharToMultiByte( 949,0,WideSSrc,wcslen(WideSSrc)+1,AnsiSDst_CHS,100*(sizeof(char)),&c,&n);
Edit1->Text=AnsiSDst_CHS;

在Edit1内可以显示TntEdit1的内容了,可看上去不一样啊?但我分别拷贝到WORD中就显示内容是一样的了,这是什么原因呢?
jishiping 2005-11-25
  • 打赏
  • 举报
回复
TextOutW向FROM上输出,不可能没有反应。你说的没有反应是什么意思?BCB的控件,全部采用的是AnsiString编码,所以你将UniCode编码传给BCB的控件时,BCB会自动转换,不过这个转换是采用的是系统缺省的语言。如果你系统缺省的语言是中文,那么转换出来的就是?了。这样的话,你需要自己使用API的函数WideCharToMultiByte来转换为AnsiString,这个函数可以自己指定要使用的字符集。
jishiping 2005-11-25
  • 打赏
  • 举报
回复
另外相关的一个宏定义,就是 _T 或者 _TEXT,比如
TextOut(hDC, 0, 0, _T("abc"), 3);
如果程序定义了UNICODE,那么它就是
TextOutW(hDC, 0, 0, L"abc", 3); //L表示字符串采用UniCode编码
如果程序没有定义了UNICODE,那么它就是
TextOutA(hDC, 0, 0, "abc", 3);
yy2001 2005-11-25
  • 打赏
  • 举报
回复
老大,我现在用TntEdit已经可以输入韩文了,就是不知道怎么把TntEdit输入的韩文内容打印出来,我原来都是用的QRLabel,但好象韩文不行,用了TextOutW向FROM上输出,也没有反应啊?
jishiping 2005-11-25
  • 打赏
  • 举报
回复
To constantine(飘遥的安吉儿):
如我上面说的,实际上没有TextOut这个函数。Windows的决大多数API函数(和字符相关的函数),都分为两个ANSI和UNICODE两个版本,Ansi版本的函数,就是Help中看到的函数名后面加A,UniCode版本的函数,在Help中的函数名后面加W。为了通用,所以头文件中将所有的API函数,另外用宏定义了一下,比如:
WINGDIAPI BOOL WINAPI TextOutA( IN HDC, IN int, IN int, IN LPCSTR, IN int);
WINGDIAPI BOOL WINAPI TextOutW( IN HDC, IN int, IN int, IN LPCWSTR, IN int);
#ifdef UNICODE
#define TextOut TextOutW
#else
#define TextOut TextOutA
#endif // !UNICODE
jishiping 2005-11-25
  • 打赏
  • 举报
回复
你要在中文的系统上还要能输入中文、韩文,而且程序要能正确处理,只有用TntEdit了,然后使用WideString和API的UNICODE版本的函数。UNICODE版本的函数,就是Help中看到的函数名后面加一个W。比如TextOut这个API函数,其实是没有TextOut这个函数的。系统只有TextOutAhe TextOutW函数,没有TextOut函数。只不过头文件中,使用了宏定义,如果程序定义了UNICODE这个宏,那么TextOut就被定义为TextOutW,否则TextOut定义为TextOutA。BCB中缺省不定义UNICODE这个宏的,所以缺省情况下TextOut调用的是TextOutA这个API函数。
constantine 2005-11-25
  • 打赏
  • 举报
回复
呵呵,还真有TextOutW,但是帮助里面没有看到,我还以为就TextOut
yy2001 2005-11-25
  • 打赏
  • 举报
回复
老大,那要是将系统的缺省语言改为韩文,是否就不能输入汉字了?我需要的是在一个界面既有输入汉字的也有输入韩文的,然后打印一张表
jishiping 2005-11-25
  • 打赏
  • 举报
回复
另外,你取出的韩文的UNICODE,赋值给AnsiString后变成了?,那时因为你系统缺省的语言是中文吧,将WideString赋值给AnsiString时,BCB会按照系统缺省的语言转换为AnsiString。你需要将系统的缺省语言改为韩文才可以,或者在韩文的Windows上就不会有问题了。
jishiping 2005-11-25
  • 打赏
  • 举报
回复
使用UNICODE字符时,API函数后需要加一个W,就是:
WideString a=TntEdit1->Text;
TextOutW(Handle,100,100,a.c_bstr(),a.Length());
yy2001 2005-11-25
  • 打赏
  • 举报
回复
编译都通不过啊:
WideString a=TntEdit1->Text;
TextOut(this->Handle,100,100,a.c_bstr(),a.Length());
constantine 2005-11-25
  • 打赏
  • 举报
回复
还是说毛毛那样做了就可以呢? 好像也没有看到他里面怎么做ExtTextOut 里面自己判别
yy,试过毛毛的方法后说一下
constantine 2005-11-25
  • 打赏
  • 举报
回复
procedure TCanvas.TextOut(X, Y: Integer; const Text: String);
begin
.....
Windows.ExtTextOut(FHandle, X, Y, FTextFlags, nil, PChar(Text),
Length(Text), nil);
....
end;
系统有个ExtTextOutW,不知道为什么textout不用,没有做识别,是不是用上ExtTextOutW重写就可以呢?
知道的说说
Waiting4you 2005-11-25
  • 打赏
  • 举报
回复
#define UNICODE
再用API的TextOut直接输出WideString的.c_bstr()试试
yy2001 2005-11-25
  • 打赏
  • 举报
回复
我是在界面输入后最终要在QRLABEL上打印出来,但好象不行啊?
widestring怎么打印呢?
constantine 2005-11-25
  • 打赏
  • 举报
回复
你取出来就一直用widestring了,不要用String
keiy() 说的我觉得有道理,就像繁体系统一样,好像也要装一个支持简体的包
不过到现在好像支持都不是很好,没有简体支持繁体的好
柯本 2005-11-25
  • 打赏
  • 举报
回复
没用过在系统上用韩文
我觉得在区域设置中加入了韩文不行,应该系统上再装一个韩文支持包,
(有一简单办法装韩文包,用IE进一韩文网站,系统会提示是装韩文语言支持)
yy2001 2005-11-25
  • 打赏
  • 举报
回复
是啊, 可打印控件是D7的
加载更多回复(18)

13,825

社区成员

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

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