DEPHI的Edit控件的KeyPress事件的"Key"参数如何接受中文代码?(50分)

C

canson

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾:
请问DEPHI的Edit控件的KeyPress事件的"Key"参数如何接受中文代码?
情况是输入一个中文字,用 ShowMessage(Key);
结果是空白字符,而没有任何内容显示
在消息对话框里.
 
好像不可以响应中文。
 
还是用change事件吧!
 
你要实现什么效果啊?
在OnChange里行不行?
 
我想应该是单字节与双字节的问题吧!
使用ShowMessage(IntToStr(Integer(Key)));可以显示其键码.
 
key因该是dbcs的2字节编码才对啊
 
g622 说得对,汉字是双字节编码,每个字节的 ASCII 码都大于 255,
你得到半截就拿去显示,能显示出来才怪呢,呵呵
 
keypress只能收到汉字的机内码(区位码+160)的底字节。
如果响应WM_CHAR
输入一个汉字
你会得到两个WM_CHAR
先是汉字的区码+160
然后是汉字的位码+160
 
谢谢大家的回答,不过还不能解决问题呀.
我用ShowMessage(Ord(Key));
时就显示两次,分别为当前中文的两个编码,
而用Label1.caption := IntToStr(Ord(Key))时只显示一次.
 
定义两个Form的私有变量:
private
sInput: String;
bChinese: Boolean;
procedure TForm1.FormCreate(Sender: TObject);
begin
sInput := '';
bChinese := False;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject;
var Key: Char);
var
sText: String;
nIndex: Integer;
begin
if IsDBCSLeadByte(Ord(Key)) then
bChinese := True;//用API判断是否中文首字符
if not bChinese then
sInput := Key
else
begin
sInput := sInput + Key;
Key := #0;//关键!有了它KeyPress会执行两遍,从而把两个中文字符都得到
end;
if not bChinese or (bChinese and (Length(sInput) = 2)) then
begin
if bChinese then
begin
//没办法,谁让咱第一次把Key给清了,只好模拟一下中文输入了:)
Edit1.ClearSelection;
sText := Edit1.Text;
nIndex := Edit1.SelStart + 1;
Insert(sInput, sText, nIndex);
Edit1.Text := sText;
Edit1.SelStart := nIndex + 1;
end;
Label1.Caption := sInput;
bChinese := False;
sInput := '';
end;
end;
试一下行不行。
 
非常感谢大家的热情帮助,可就只有50分,只能都给dq兄了.谢谢.
 
顶部