我要自杀了(100分)

  • 主题发起人 刘麻子
  • 开始时间
richedit1.SelStart:=4;<br>richedit1.SelLength:=4;<br>richedit1.SelAttributes.Color:=clred;<br>Sleep(10);
 
i'm sorry,我不会~~~~~[:(]
 
你可以用两个RICHEDIT控件啊。其中一个实现操作的,不可见的。一个是可见的,用来显示的。
 
我救不了你,刘麻子。我说过的,我是做数据库方面的 <br>潇洒哥,说的你可试一试
 
看了半天觉得很是不明白?
 
我再看看吧
 
procedure TForm1.RichEdit1Change(Sender: TObject);<br>begin<br>&nbsp; Timer1.Enabled :=True;<br>end;<br><br>procedure TForm1.Timer1Timer(Sender: TObject);<br>begin<br>&nbsp; Timer1.Enabled :=False;<br>&nbsp; RichEdit1.SelStart :=0;<br>&nbsp; RichEdit1.SelLength :=2;<br>&nbsp; RichEdit1.SelAttributes.Color :=clRed;<br>end;
 
帮你up一下吧,我没有什么好办法。
 
刘麻子,听我的,没错的。不过里面编程时有技巧的。
 
1、在初始化的时候加一个<br>richedit1.Text:='s' ;<br>richedit1.Text:='' ;<br>我试了一下好像可以,但不晓得是什么原因。
 
但是这样的话好象并不能改边选中字的颜色。帮你顶一下
 
谢谢大家的帮助,上面的朋友提到的几个方法我都试了!现在讲给大家听!<br><br>改变焦点好象不行耶!无论两个控件的setfocus;<br>怎么搭配,怎么变换位置,也不行的!哪位朋友作成功的<br>可以教教我吗?您具体是怎么做的?????<br>(还有,不可见的组件能获得焦点吗?这是不可能的^_^)<br>procedure TForm1.RichEdit1Change(Sender: TObject);<br>begin<br>//模仿showmessage();时的情况<br>&nbsp; richedit2.SetFocus; &nbsp; &nbsp; //失去焦点<br>&nbsp; richedit1.SelStart:=0;<br>&nbsp; richedit1.SelLength:=2;<br>&nbsp; richedit1.SelAttributes.Color:=clblue;<br>&nbsp; richedit1.setFocus; &nbsp; &nbsp; //获得焦点<br>end;<br><br>另外,一位朋友提醒了我。用按钮是可以的,(变色程序放在按钮单击事件里)<br>我就想,当需要变颜色时,调用按钮的click。<br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>&nbsp; richedit1.SelStart:=0;<br>&nbsp; richedit1.SelLength:=2;<br>&nbsp; richedit1.SelAttributes.Color:=clblue;<br>end;<br><br>procedure TForm1.RichEdit1Change(Sender: TObject);<br>begin<br>&nbsp; keybd_event(9,mapvirtualkey(9,0),0,0); //模拟按下TAB键<br>&nbsp; keybd_event(9,mapvirtualkey(9,0),keyeventf_keyup,0);<br>&nbsp; button1.Click;//此时焦点在按纽上,其实这里的改变焦点没什么意义,<br>&nbsp; //前面已经试过了,没有用的!只是抱着试试看的想法加上去的<br>&nbsp; keybd_event(9,mapvirtualkey(9,0),0,0);<br>&nbsp; keybd_event(9,mapvirtualkey(9,0),keyeventf_keyup,0);<br>end;<br><br>还是不行。只好用Windows API来模拟鼠标点击按钮,这下可以了^_^<br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>&nbsp; dof:=(dof+1)mod 10;//防止因改变颜色而触发onchange事件<br>&nbsp; richedit1.SelStart:=dof;<br>&nbsp; richedit1.SelLength:=1;<br>&nbsp; richedit1.SelAttributes.Color:=clblue;<br>end;<br>procedure TForm1.RichEdit1Change(Sender: TObject);<br>var<br>ylpt,anpt:TPOINT ;//原来的位置,按纽的位置<br>begin<br>&nbsp; if (dof mod 2)&lt;&gt;0 then//防止因改变颜色而触发onchange事件<br>&nbsp; begin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //否则会一直互相调用 <br>&nbsp; &nbsp; dof:=(dof+1)mod 10; //为下次用户输入时触发onchange事件准备<br>&nbsp; &nbsp; exit;<br>&nbsp; end;<br>//模拟用鼠标单击按纽<br>&nbsp; getcursorpos(ylpt);//鼠标当前的位置<br>&nbsp; anpt:=button1.ClientToScreen(point(4,4));<br>&nbsp; setCursorpos(anpt.X,anpt.Y); &nbsp; &nbsp; //移到按纽的位置<br>&nbsp; mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//按下<br>&nbsp; mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); &nbsp;//抬起<br>&nbsp; setcursorpos(ylpt.x,ylpt.y); //恢复原来的位置<br>end;<br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>&nbsp; dof:=0;//全局变量<br>end;<br>无论输入的是汉字还是英文而导致的onchange事件,都会变颜色了!!<br><br>但是,问题还没有得到实际解决,因为我做的打字程序不可能上面放一个按钮<br>的啊,如果将按纽设为visible:=false,单击又没用了呀?怎么办?<br><br>还有一位朋友讲了,当用‘万能五笔’输入汉字时就可以,我试了一下,的确是这样,<br>为什么??但是实际使用中总不能限制用户只能用‘万能五笔输入法’吧?我想,这样<br>不好,那拼音就不能用了!(我就是用拼音的:))我不想这样!<br><br>另外,有人讲不要用onchange事件,那用什么呢??我试过了,其他的都不行。比如:<br>onkeydown: &nbsp;切换输入法状态时会触发事件处理过程,当前是汉字输入法时,按键盘<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;上按键时也会触发事件!<br>onkeypress: 输入中文时无效,因为他接受的只是ASCII码。<br>onkeyup: &nbsp; &nbsp;与onkeydown情况相似,且根本无法输入汉字!<br>不知道还可以用什么事件?或者怎么正确使用上面的事件以达到我的需要?<br><br>(虽然情况好转,让我放弃了死亡的念头。但还是有困难的,我随时可能想不开的哦)<br>(各位朋友,救人一命胜造..,一定要帮我呀!我的qq:71892967,欢迎加我^_^)
 
自己在程序里,写一个:*。BAT代码段就OK了。
 
吧按钮放在一个隐蔽的地方
 
在DOS批处理中改变颜色?<br>你异想天开吧??<br>或着,真的可以?您能作到的话<br>请告诉我!
 
发现一个新的问题。<br>当我们在一个事件处理过程中,导致另一个事件的发生,<br>这时必须等到前面一个事件处理完,才可处理第二个事件<br>,对吧?那么就算允许在窗体上存在可见的按钮,也不行<br>因为:(请看下面的例子)<br><br>编辑框onchange事件处理过程<br>begin<br>&nbsp; while 这次输入的汉字串没处理完 do<br>&nbsp; begin<br>&nbsp; &nbsp;当前汗字错就模拟鼠标单击按钮;<br>&nbsp; &nbsp;指针转到下一个字符;<br>&nbsp; end<br>end;<br><br>按钮的onClick事件处理过程<br>begin<br>&nbsp; 将指针指向的汉字改颜色;<br>end;<br><br>现在不存在输入汉字时,不会改变颜色的问题,<br>但是汉字串(一次输入的)前面的错误不会表现<br>出来,虽然前面有点按钮动作,但是因为程序当<br>时在onchange中,出不来!<br>难道要用多线程??那谁知道可以将事件作成子线程的??<br>也就是说当事件发生,立即建立子线程,处理之,而不管<br>主程序执行到哪里了.好象不行吧?
 
先获得原字符串的长度<br>再获得新字符串的长度<br>用新的减旧的就是用户新输入的<br>然后一个一个的和原文比较<br><br>
 
GB 2312-80 规定,“对任意一个图形字符都采用两个字节(Byte)表示。每个字节均采用 GB 1988-80<br>及 GB 2311-80 中的七位编码表示。两个字节中前面的字节为第一字节,后面的字节为第二字节。”<br>习惯上称第一字节为“高字节”,第二字节为“低字节”。<br>  GB 2312-80 将代码表分为 94 个区(Section),对应第一字节;每个区 94 个位(Position),<br>对应第二字节。两个字节的值,分别为区号值和位号值各加 32(20H)。<br>  GB 2312-80 规定,01~09 区(原规定为 1~9 区,为表示区位码方便起见,今改称 01~09 区)<br>为符号、数字区,16~87 区为汉字区。而 10~15 区、88~94 区是有待于“进一步标准化”的“空白<br>位置”区域。但第 10 区推荐与第 3 区的 94 个图形字符(即 GB 1988-80 中的 94 个图形字符)相同,<br>字形宽度为其宽度的一半。
 
如果内码前后字节都大于0x80就是国标码如果内码前后字节存在一个大于0x80 一个大于0x40 <br>就是big5码。<br>
 
汉字到区位码:<br>procedure GetQw(hz: String; var qm, wm: Integer);<br>begin<br>&nbsp; if (Ord(hz[1])&lt;161)or(Ord(hz[2]&lt;161) then Exit;<br>&nbsp; qm := hz[1]-160;<br>&nbsp; wm := hz[2]-160;<br>end;<br>汉字的两字节都大于161,首位当然都是1了
 
顶部