我要自杀了(100分)

  • 主题发起人 刘麻子
  • 开始时间

刘麻子

Unregistered / Unconfirmed
GUEST, unregistred user!
请教几个问题,谢谢!<br><br>想做一个象‘金山打字通’的程序,可以练习输入汉字,错误的话就将错误的汉字显示为红色。<br>问题是,中文输入有时候可能传给文本框的是几个汉字(词组),所以我想到了在onchang事件<br>中判断输入是否正确。现在关键的问题是,需要将文本框中已经存在的(刚打入的)字改颜色,我<br>用的方法是先自动选中错的文字,再edchedit.selattributes.color:=clred;,变颜色....<br>可是上面的方法不行,只有直接输入e文时才会变颜色,输入汉字时无效。(即使被选中的是e文)<br>不知如何解决?是否有这样的事件:在改变前触发或每进入文本框一个汉字时触发??<br>还有没有别的方法可以改变个别字符的颜色?(不要告诉我‘画’,这是万不得已的方法)<br><br>&nbsp; &nbsp;我的qq:71892967,欢迎喜欢编程的朋友加我<br><br>举例:当输入文字时自动对部分文字改变颜色,可当我输入汉字时,<br>&nbsp; &nbsp; &nbsp;下面的语句无效,好象没执行一样!<br>procedure TForm1.RichEdit1Change(Sender: TObject);<br>begin<br>//奇怪的是如果在这加一句showmessage('气死我了');就可以了,是否未刷新的原因?可我用了<br>//richedit1.Repaint;和richedit1.Refresh;也不行!!为什么??<br><br>&nbsp; richedit1.SelStart:=0;<br>&nbsp; richedit1.SelLength:=2;<br>&nbsp; richedit1.SelAttributes.Color:=clblue;<br>end;<br>(我用的是onchange事件。)<br><br>如何在允许汉英混输的情况下判断当前字符是汉字英文?判断当前输入法状态?<br>还有一个办法,就是判断字符的代码?因为ASCII码最高位是0,<br>而汉字占两个字节,(GB)好象至少有一个字节的最高位为1??<br><br>还有一个问题,就是想实现模拟按键以选中部分文本,用的是API<br>(我知道可用selstart和sellength,只是作技术探讨)<br>keybd_event(VK_SHIFT,mapvirtualkey(VK_SHIFT,0),0,0); &nbsp; &nbsp;//SHIFT键<br>keybd_event(VK_RIGHT,mapvirtualkey(VK_RIGHT,0),0,0); &nbsp; &nbsp;//'向右'方向键<br>keybd_event(VK_RIGHT,mapvirtualkey(VK_RIGHT,0),keyeventf_keyup,0);<br>keybd_event(VK_SHIFT,mapvirtualkey(VK_SHIFT,0),keyeventf_keyup,0);<br>结果只动光标,不选中,为什么?<br><br>
 
我进来了。
 
第二个问题,我的连光标也不会动呀,我也不清楚。
 
回答的都有分
 
Oh!我理解錯樓主的意思了<br>
 
我在那个里面回答的方法不行?如果不行我再看看。
 
有这样写自杀宣言的吗?
 
richedit1.SelStart:=4;<br>richedit1.SelLength:=4;<br>richedit1.SelAttributes.Color:=clred;<br>中文也是没问题的,可能是你的事件的问题。我以前也编过类的程序,我当时是在onkeyup上判断字符的正确率的。
 
你在showmessage('气死我了');的地方加一句<br>Application.ProcessMessages; 试试看
 
用100分就想买回你的命啦!
 
去自杀吧,顺便把麻子带走
 
因为是汉字输入可能进入文本框的是词组,不好用onkeyup的
 
嘿嘿——<br><br>procedure TForm1.RichEdit1Change(Sender: TObject);<br>begin<br>//奇怪的是如果在这加一句showmessage('气死我了');就可以了,是否未刷新的原因?可我用了<br>//richedit1.Repaint;和richedit1.Refresh;也不行!!为什么??<br>&nbsp;richedit1.SelStart:=0;<br>&nbsp;richedit1.SelLength:=2;<br>&nbsp;richedit1.SelAttributes.Color:=clblue;<br>end;<br>上面这个问题不存在————————<br><br>下面这个问题:<br>keybd_event(VK_SHIFT,mapvirtualkey(VK_SHIFT,0),0,0); &nbsp; &nbsp;//SHIFT键<br>keybd_event(VK_RIGHT,mapvirtualkey(VK_RIGHT,0),0,0); &nbsp; &nbsp;//'向右'方向键<br>keybd_event(VK_RIGHT,mapvirtualkey(VK_RIGHT,0),keyeventf_keyup,0);<br>keybd_event(VK_SHIFT,mapvirtualkey(VK_SHIFT,0),keyeventf_keyup,0);<br>我写到speedbutton(加速按钮)里可以<br>写到button/bitbtn里是不行的<br>
 
现在关键的问题是,当我用中文输入法输入汉字时,其中的前两个字符的确<br>会被选中,但是不会变颜色。(也就是说是输入汉字触发的onchange事件)<br><br>另外,再提以下,如果在上面我讲的程序中加一个showmessage('奇怪');<br>就可以了,无论你第一次输入的是否汉字。(第一次触发onchange时),而且<br>可以清楚看到变化过程。(再追加一句richedit1.Selstart:=0;看的更清楚)<br><br>还有,richedit1中的文字我没改,直接用的默认的‘RichEdit1’。<br><br>关于模拟按键的问题,如果根本不会动,这是因为输入框默认当前光标在底部,<br>需要先模拟向上方向键,请在前面加上:<br>keybd_event(VK_UP,mapvirtualkey(VK_UP,0),0,0); &nbsp; &nbsp;<br>keybd_event(VK_UP,mapvirtualkey(VK_UP,0),keyeventf_keyup,0);<br>请注意,我要实现的是选中文本!!不是快捷键!!
 
老兄:<br>我用speedbutton来触发,就行了。可以选中文本的啊
 
showmessage的话richedit就失去了焦点,可能要先失去焦点再得到焦点才会刷新
 
用按钮触发对我意义不大,第一个问题,如果用按钮触发也可以的
 
同意yinju,可能是失去焦点了。<br>RichEdit有时会失去焦点,但光标还是在上面。这时从新设置焦点也没有用 :(<br>这好像和RichEdit版本以及使用的操作系统有关。
 
我救不了你,刘麻子。
 
可能是和焦点有关,我试一下
 
顶部