大家好,我在用delphi写一个简单的类似金山打字的打字练习程序,现在在memo1中有一段文章,在memo2中输入,如果与memo1中的文字不匹配,需要将打错的字用红色显示。查阅了一下,大家都说memo不能实现,要用richedit,可是我又不知道怎么用,连这个控件在哪里都不知道。下面是我的程序,大家帮帮忙。如果一定要用richedit,可不可以说清楚一点,谢谢啦!var p1,p2:pchar;procedure TForm2.Memo2MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   p1:=pchar(memo1.Text);
   p2:=pchar(memo2.Text);
   if p1<>p2 then
     begin
        memo1.SelText:=p1;
        memo2.SelText:=p2;
        //将memo1.seltext,memo2.seltext设置为红色
     end;
   p1:=p1+1;
   p2:=p2+1;
end;

解决方案 »

  1.   

    RichEdit1.SelStart := 0;
    RichEdit1.SelLength := 100;
    RichEdit1.SelAttributes.Color := clRed;ps: RichEdit控件在Win32下面,一般情况下是第4个。
      

  2.   

    換 RichEdit  ,MEmo  干不了這個。
      

  3.   

    我写了如下代码,结果很奇怪,如果一开始richedit2中的内容与richedit1中的内容相同,就没什么问题,但如果出现richedit2中的内容与richedit1中的不同,那么不管接下去输的内容是对是错,richedit2中接下去的内容都是红色。而richedit1中,如果richedit2中输对了,是黑色字体,输错了是红色。为什么richedit2中会有这样的现象?var pos:integer;
    procedure TForm1.RichEdit2KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
       richedit1.SelStart:=pos;
       richedit2.SelStart:=pos;
       richedit1.SelLength:=1;
       richedit2.SelLength:=1;
       if richedit1.SelText<> richedit2.SelText then
         begin
           richedit1.SelAttributes.Color:=clred;
           richedit2.SelAttributes.Color:=clred;
         end;
       richedit1.SelStart:=pos+1;
       richedit2.SelStart:=pos+1;
       richedit1.SelText:='';
       richedit2.SelText:='';
       pos:=pos+1;end;现象如下:
    richedit1  a b c d e f g h i
    richedit2  a b d d e w q h i
      

  4.   

    Memo干这个?
    除非你自己去改写了。
      

  5.   

    已经用了richedit了,看清下面的帖子,ok?
      

  6.   

      if richedit1.SelText <> richedit2.SelText then 
        begin 
          richedit1.SelAttributes.Color:=clred; 
          richedit2.SelAttributes.Color:=clred; 
        end;
      richedit1.SelAttributes.Color:=clWindowText;  //加上这两句
      richedit2.SelAttributes.Color:=clWindowText;