var
Fmt   :TCharFormat2;
i:Integer;
begin
    
  Fmt.cbSize   :=   SizeOf(Fmt);//这里放传递的结构大小,系统通过这个知道传递的是CharFormat还是CharFormat2     Fmt.dwMask   :=   CFM_COLOR   or   CFM_BACKCOLOR;//告诉系统只有字体颜色和背景颜色两个字段的值有效   
    
  Fmt.crTextColor   :=   clRed;//设置字体颜色   
    
  Fmt.crBackColor   :=   clYellow;//设置字体背景色   
    
  RichEdit1.Perform(EM_SETCHARFORMAT,SCF_SELECTION,integer(@Fmt));//发EM_SETCHARFORMAT消息给RichEdit
    
  //其中SCF_SELECTION表示该设置只对选择的文字有效,具体用法参考win32   SDK   HELP
  for i:=0 To 1000 Do
     RichEdit1.Lines.Add(InttoStr(i)+'奇可想而知奇可想而知奇可想而知奇可想而知奇可想而知奇可想而知奇可想而知奇可想而知奇可想而知奇可想而知奇可想而知奇可想而知奇可想而知');//   插入一行新文字

解决方案 »

  1.   

    以前用过和你的用法不一样
    MemoReceive: TbsSkinRichEdit;
    //
    MemoReceive.SelAttributes.Color:=clmaroon;
    MemoReceive.Lines.Add(MsgHead);
    MemoReceive.SelAttributes.Color:=clblue;
    MemoReceive.Lines.Add(MsgMemo);
      

  2.   

    选中行改变颜色var  
          CharFormat:TCharFormat2;  
      begin  
          s:='123456789';  
          RichEdit1.Clear;  
          RichEdit1.Lines.Add(s);  
          RichEdit1.SelStart:=0;  
          RichEdit1.SelLength:=9;  
          FillChar(CharFormat,   SizeOf(CharFormat),   0);  
          CharFormat.cbSize:=   SizeOf(TCharFormat2);  
          CharFormat.dwMask:=   CFM_BACKCOLOR;  
          CharFormat.crBackColor:=clBlue;  
          SendMessage(richedit1.Handle,   EM_SETCHARFORMAT,SCF_SELECTION,   LPARAM     (@CharFormat));  
          CharFormat.dwMask:=CFM_COLOR;  
          CharFormat.crTextColor:=clYellow;  
          SendMessage(richedit1.Handle,   EM_SETCHARFORMAT,SCF_SELECTION,   LPARAM(@CharFormat));  
      end;
      

  3.   

    //其中SCF_SELECTION表示该设置只对选择的文字有效,具体用法参考win32   SDK   HELP
      for i:=0 To 1000 Do
         RichEdit1.Lines.Add(InttoStr(i)+'奇可想而知奇可想而知奇可想而知奇可想而知奇可想而知奇问题主要在这里,假如我要奇数行显示背景色是什么,偶数行的背景色是另外一种产颜色,这样发送一条或两条是没有问题,但是连续是增加,则什么产颜色也没有.