下面这段用来选中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;又可以正常工作...这是怎么回事啊?
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;又可以正常工作...这是怎么回事啊?
begin
with Self.RichEdit1 do begin
SelStart := Perform(EM_LineIndex,3,0); //第四行是3
SelLength := Length(Lines[3]);
SelAttributes.Color := clRed;
end;
end;
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;