刘
刘麻子
Unregistered / Unconfirmed
GUEST, unregistred user!
请教几个问题,谢谢!
想做一个象‘金山打字通’的程序,可以练习输入汉字,错误的话就将错误的汉字显示为红色。
问题是,中文输入有时候可能传给文本框的是几个汉字(词组),所以我想到了在onchang事件
中判断输入是否正确。现在关键的问题是,需要将文本框中已经存在的(刚打入的)字改颜色,我
用的方法是先自动选中错的文字,再edchedit.selattributes.color:=clred;,变颜色....
可是上面的方法不行,只有直接输入e文时才会变颜色,输入汉字时无效。(即使被选中的是e文)
不知如何解决?是否有这样的事件:在改变前触发或每进入文本框一个汉字时触发??
还有没有别的方法可以改变个别字符的颜色?(不要告诉我‘画’,这是万不得已的方法)
我的qq:71892967,欢迎喜欢编程的朋友加我
举例:当输入文字时自动对部分文字改变颜色,可当我输入汉字时,
下面的语句无效,好象没执行一样!
procedure TForm1.RichEdit1Change(Sender: TObject);
begin
//奇怪的是如果在这加一句showmessage('气死我了');就可以了,是否未刷新的原因?可我用了
//richedit1.Repaint;和richedit1.Refresh;也不行!!为什么??
richedit1.SelStart:=0;
richedit1.SelLength:=2;
richedit1.SelAttributes.Color:=clblue;
end;
(我用的是onchange事件。)
如何在允许汉英混输的情况下判断当前字符是汉字英文?判断当前输入法状态?
还有一个办法,就是判断字符的代码?因为ASCII码最高位是0,
而汉字占两个字节,(GB)好象至少有一个字节的最高位为1??
还有一个问题,就是想实现模拟按键以选中部分文本,用的是API
(我知道可用selstart和sellength,只是作技术探讨)
keybd_event(VK_SHIFT,mapvirtualkey(VK_SHIFT,0),0,0);
//SHIFT键
keybd_event(VK_RIGHT,mapvirtualkey(VK_RIGHT,0),0,0);
//'向右'方向键
keybd_event(VK_RIGHT,mapvirtualkey(VK_RIGHT,0),keyeventf_keyup,0);
keybd_event(VK_SHIFT,mapvirtualkey(VK_SHIFT,0),keyeventf_keyup,0);
结果只动光标,不选中,为什么?
想做一个象‘金山打字通’的程序,可以练习输入汉字,错误的话就将错误的汉字显示为红色。
问题是,中文输入有时候可能传给文本框的是几个汉字(词组),所以我想到了在onchang事件
中判断输入是否正确。现在关键的问题是,需要将文本框中已经存在的(刚打入的)字改颜色,我
用的方法是先自动选中错的文字,再edchedit.selattributes.color:=clred;,变颜色....
可是上面的方法不行,只有直接输入e文时才会变颜色,输入汉字时无效。(即使被选中的是e文)
不知如何解决?是否有这样的事件:在改变前触发或每进入文本框一个汉字时触发??
还有没有别的方法可以改变个别字符的颜色?(不要告诉我‘画’,这是万不得已的方法)
我的qq:71892967,欢迎喜欢编程的朋友加我
举例:当输入文字时自动对部分文字改变颜色,可当我输入汉字时,
下面的语句无效,好象没执行一样!
procedure TForm1.RichEdit1Change(Sender: TObject);
begin
//奇怪的是如果在这加一句showmessage('气死我了');就可以了,是否未刷新的原因?可我用了
//richedit1.Repaint;和richedit1.Refresh;也不行!!为什么??
richedit1.SelStart:=0;
richedit1.SelLength:=2;
richedit1.SelAttributes.Color:=clblue;
end;
(我用的是onchange事件。)
如何在允许汉英混输的情况下判断当前字符是汉字英文?判断当前输入法状态?
还有一个办法,就是判断字符的代码?因为ASCII码最高位是0,
而汉字占两个字节,(GB)好象至少有一个字节的最高位为1??
还有一个问题,就是想实现模拟按键以选中部分文本,用的是API
(我知道可用selstart和sellength,只是作技术探讨)
keybd_event(VK_SHIFT,mapvirtualkey(VK_SHIFT,0),0,0);
//SHIFT键
keybd_event(VK_RIGHT,mapvirtualkey(VK_RIGHT,0),0,0);
//'向右'方向键
keybd_event(VK_RIGHT,mapvirtualkey(VK_RIGHT,0),keyeventf_keyup,0);
keybd_event(VK_SHIFT,mapvirtualkey(VK_SHIFT,0),keyeventf_keyup,0);
结果只动光标,不选中,为什么?