我想做一个打字的软件,请问在RichEdit组件中如何实现像金山打字通一样给每个字
给每个字加上背景色(打对的字为蓝色,打错的字为红色)?

解决方案 »

  1.   

    richedit能做到吗?偶不太清楚...
    以字的颜色区分不就行了吗?
      

  2.   

    uses ComCtrls, RichEditvar
      CF:TCharFormat;
    begin
      FillChar(CF, SizeOf(CF), 0);
      CF.cbSize := SizeOf(CF);
      CF.dwMask := CFM_COLOR;
      CF.crTextColor := clRed;//改为红色
      RichEdit.SelStart := 0;//从第1个字符开始选择
      RichEdit.SelLength := 5;//选择5个字符
      SendMessage(RichEdit.Handle, EM_SETCHARFORMAT,SCF_SELECTION,Integer(addr(CF)));//改变选择字符的外观
    end;
      

  3.   

    万分感谢ehom(?!)的回复不过我试了一下好像只能改变字的颜色,而不能改变字的背景色,有谁
    知道怎么样改变字的背景色吗?(或者知道有第三方控件可以用来实现该功能的吗?)
      

  4.   

    uses RichEdit;procedure TForm1.Button1Click(Sender: TObject);
    var Fmt :TCharFormat2;
    begin
      RichEdit1.SelStart := 1;
      RichEdit1.SelLength := 5;
      Fmt.cbSize := SizeOf(Fmt);
      //告诉系统只有字体颜色和背景颜色两个字段的值有效
      Fmt.dwMask := CFM_COLOR or CFM_BACKCOLOR or CFM_WEIGHT;
      //设置前景色
      Fmt.crTextColor := clWhite;
      //设置背景色
      Fmt.crBackColor := clRed;
      //发EM_SETCHARFORMAT消息给RichEdit
      RichEdit1.Perform(EM_SETCHARFORMAT,SCF_SELECTION,integer(@Fmt));
    end;
      

  5.   

    procedure TForSend.EditorSelectionChange(Sender: TObject);
    begin
      with Editor.Paragraph do
      try
        FUpdating := True;
        BoldButton.Down := fsBold in Editor.SelAttributes.Style;
        ItalicButton.Down := fsItalic in Editor.SelAttributes.Style;
        UnderlineButton.Down := fsUnderline in Editor.SelAttributes.Style;
        ColorDialog1.Color := Editor.Color;
        FontSize.Text := IntToStr(Editor.SelAttributes.Size);
        ComboBox1.Text := Editor.SelAttributes.Name;
        case Ord(Alignment) of
          0: LeftAlign.Down := True;
          1: RightAlign.Down := True;
          2: CenterAlign.Down := True;
        end;  finally
        FUpdating := False;
      end;end;
      

  6.   

    谢谢各位网友的回复,虽然分数不多,但我还是十分真诚的感谢大家热心的帮助。
    sysu网友,你给的代码我从别处也看到过,但我一直没有实现这个功能(我用过D6和D7),不知道你有没有实际调试过,如果你已经调试通过的话,可以给我说说除了你所给的代码外,还有其他地方需要修改的吗?如果你使用的是第三方控件而不是delphi自带的控件的话,可以告诉我在哪可以下载的吗?如果你的RichEdit是delphi面板上找不到另外安装的话,可以和我说说具体是怎么装的吗?总之,再次麻烦你了,请多多包涵!(如果那位网友也曾调试通过的话可以和我说说吗?)
      

  7.   

    当然是调试过的,在D6+Win2000下通过,
    用的就是Delphi自带的RichEdit,
    前提就是需要2.0版本的,也就是系统要有riched20.dll这个文件,
    现在一般都会有这个文件的。
      

  8.   

    当然可以RichEdit单元封装了相关RichEdit2.0的扩展内容详细帮助可查询MSDN
      

  9.   

    我刚才调试了,在win2000下是可以通过的,之前我一直在win98下调试的,没有通过。
    谢谢各位网友的回复,让我们以后一起携手并进吧。
      

  10.   

    你可以把2000,XP系统目录下的Riched20.dll文件复制过来,就可以在98下实现效果