用BCB如何生成Unicode编码的程序?
在VC里面可以预定义UNICODE,在BCB里面怎么做? 问题点数:20、回复次数:15Top
1 楼skphoebe(小鲨鱼)回复于 2005-04-14 22:28:01 得分 5
void __fastcall TfrmMian::Button1Click(TObject *Sender)
{
if (Edit1->Text.IsEmpty())
return;
char M[1024];
char MU[1024];
memset(M,0,1024);
memset(MU,0,1024);
memcpy(M,Edit1->Text.c_str(),Edit1->Text.Length());
//转化为Unicode String
::MultiByteToWideChar(CP_ACP,0,M,-1,reinterpret_cast<wchar_t *>(MU),1024);
//如果MU头/0则LEN1为0
char Len1 = strlen(MU);
AnsiString s,S;
AnsiString str;
char tmp[2];
//转化为Unicode Hex
for(int i = 0;i < Len1;i++)
{
str = s.sprintf("%x",MU[i]&0x00ff);
int L = str.Length();
//缺位补0
if ( L == 1)
{
str = "0"+str;
}
S = S + str;
}
S=S.UpperCase();
//高2位与低2位交换
char P[1024];
memset(P,0,1024);
memcpy(P,S.c_str(),S.Length());
char C1,C2;
for (int i = 0; i < Len1/2; i++)
{
C1 = P[4*i];
C2 = P[4*i + 1];
P[4*i] = P[4*i + 2];
P[4*i+1] = P[4*i + 3];
P[4*i + 2] = C1;
P[4*i + 3] = C2;
}
Edit2->Text = P;
}Top
2 楼unsigned(僵哥(发站内消息,请附上链接或问题说明,否则不予回复))回复于 2005-04-15 00:44:47 得分 5
下载TntUnicode支持包。使用里面的TntUnicode控件。
http://iemis.vicp.net/TntUnicodeControls.zipTop
3 楼unsigned(僵哥(发站内消息,请附上链接或问题说明,否则不予回复))回复于 2005-04-15 01:02:28 得分 0
另一种就是自己全部使用API去写……Top
4 楼yhec(@_@ 俺是贫农俺怕谁)回复于 2005-04-15 09:04:27 得分 2
wchar_t wch; // 两字节
Top
5 楼yesry(噎死你)回复于 2005-04-15 10:04:44 得分 2
wchar_t *str=L"哈哈,这些字符将被编译成Unicode走遍全世界都是一个效果";
Top
6 楼cczlp(不惑)回复于 2005-04-15 10:11:07 得分 5
在.h前面定义
#define UNICODE
然后编程时用 TCHAR 代替char , 其它类似Top
7 楼zhenyu362(不逛论坛N年)回复于 2005-04-15 12:37:21 得分 0
To skphoebe(小鲨鱼) :这么多,看了就怕
To cczlp(不惑):在哪个.h地方定义#define UNICODE ?
如果是在自己的unit1.h里面定义的话,那调用API的时候比如MessageBox那还是会调用MessageBoxATop
8 楼cczlp(不惑)回复于 2005-04-15 12:45:03 得分 0
在.cpp的所有头文件之前,就是最上面添加#define UNICODE
如果没有这个定义, 你的MessageBox 实际是MessageBoxA,
如果有这个定义, MessageBox 就实际调用MessageBoxW,
其它很多的API都是这样.
再说TCHAR, 如果定义UNICODE,等同WCHAR, 否则等同char.
Top
9 楼zhenyu362(不逛论坛N年)回复于 2005-04-15 13:15:52 得分 0
那这样的话就必须在所有CPP顶上添加#define UNICODE,挺麻烦的
如果我的Form上面有一个TEdit控件,那么我在里面输入的内容是ANSI还是Unicode?Top
10 楼zhenyu362(不逛论坛N年)回复于 2005-04-15 13:36:14 得分 0
To cczlp(不惑):找到了一个更好的方法
菜单-->Project-->Option--->Directories/Conditionals
在Conditional define上面添加一个UNICODE标示符就可以了
定义字符串用 TCHAR szText[]=TEXT("Unicode String");
TEXT是一个宏
Top
11 楼weill(每天提一问,一天学一点)回复于 2005-04-15 13:39:14 得分 0
收下。Top
12 楼constantine(飘遥的安吉儿)回复于 2005-04-15 13:45:18 得分 1
up
Top
13 楼unsigned(僵哥(发站内消息,请附上链接或问题说明,否则不予回复))回复于 2005-04-15 14:04:18 得分 0
to 楼上各位
麻烦直接使用
#define UNICODE
编译程序到Win9x下运行一下先,然后再上来……Top
14 楼cczlp(不惑)回复于 2005-04-15 14:12:40 得分 0
to 楼上:
在Win9x下可以使用 #define UNICODE, 我的程序就没问题.
在Win9x下,对Unicode支持不是太好是肯定的, 但还不到所有程序不能运行的地步,如果不能用,我想应该和使用的API有关.
另外, 楼上升星了不散分?Top
15 楼szfgf()回复于 2005-07-16 16:59:14 得分 0
TntUnicodeControls 中的TntLabel为何不能显示朝鲜语?(用ADO从数据库中取得后在TntLabel显示)Top




