下面这段用来选中richedit的指定行:
procedure SelectLine(LineNO:integer);
var
  StartPos,EndPos:Integer;
begin
  with Form1.Richedit1 do
  begin
  //移动光标至选中行
  SetFocus;
  selstart:=perform(EM_LineIndex,LineNO-1,0);
  perform(EM_ScrollCaret,0,0);
  //选中指定行
  SendMessage(Form1.RichEdit1.Handle,WM_KEYDOWN,VK_HOME,0);
  keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), 0, 0);
  keybd_event(VK_End, MapVirtualKey(VK_END, 0), 0, 0);
  keybd_event(VK_END, MapVirtualKey(VK_END, 0), KEYEVENTF_KEYUP, 0);
  keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), KEYEVENTF_KEYUP, 0);
  end;
end;可以正常工作.然后想改变选中部分的颜色,按说可以用RichEdit1.SelAttributes.Color:=clBlue;这样来完成的,结果我执行
SelectLine(3);
RichEdit1.SelAttributes.Color:=clBlue;
可以选中但是不变色.然后我先执行个selectLine(3),然后另外放一个button,在click事件里放置代码RichEdit1.SelAttributes.Color:=clBlue;又可以正常工作...这是怎么回事啊?

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      with Self.RichEdit1 do begin
        SelStart := Perform(EM_LineIndex,3,0); //第四行是3
        SelLength := Length(Lines[3]);
        SelAttributes.Color := clRed;
      end;
    end;
      

  2.   

    按你的写法改:procedure SelectLine(LineNO: integer);
    begin
      with Form1.RichEdit1 do begin
        SelStart := Perform(EM_LineIndex,LineNo-1,0);
        SelLength := Length(Lines[LineNo-1]);
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      SelectLine(3); //第三行
      Self.RichEdit1.SelAttributes.Color := clBlue;
    end;