如何在RichEdit中跳将光标到指定的一行?(100分)

  • 主题发起人 主题发起人 TAXI
  • 开始时间 开始时间
T

TAXI

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在RichEdit中跳将光标到指定的一行?
 
看看以前的帖子把
发一条消息就行,忘了,呵呵
 
按行号列号:
procedure From1.gotoRowCol(r,c:integer);
var i,j:integer;
begin
i:=1;
for j := 0 to r do
begin
i:=i+Length(RichEdit1.Lines[1])+1;
end;
RichEdit1.SelStart:=i+c;
RichEdit1.SelLength:=0;
form1.caption:=inttostr(i);
RichEdit1.SetFocus;
end;
 
对不起,勘误:
...
for j := 0 to 2 do
begin
i:=i+Length(RichEdit1.Lines[j])+1;
end;
RichEdit1.SelStart:=i+2;
...
 
procedure TForm1.JumpTo(LnNumber: integer);
begin
dec(LnNumber);//变行号为索引号
richedit1.SelStart := Perform(EM_LINEINDEX, LnNumber, 0);
richedit1.Perform(EM_LINESCROLL, 0, 0);
end;
 
这样会更好一些,可以使选中行出现在可见区。
douh: 你有好些东西都没考虑到,最严重的就是Col大于选定行的情况。
procedure GotoRowCol(Row, Col : Integer; RichEdit : TRichEdit);
var
TextLen, i : Integer;
begin
if Row > RichEdit.Lines.Count then Exit;
TextLen := 0;
for i := 0 to Row - 1 do
TextLen := TextLen + Length(RichEdit.Lines) + 1;
if (Col <= Length(RichEdit.Lines[Row - 1])) and (Col > 0) then
TextLen := TextLen + Col - 1;
RichEdit.SelStart := TextLen - Length(RichEdit.Lines[Row - 1]);
SendMessage(RichEdit.Handle, EM_SCROLLCARET, 0,0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
GotoRowCol(2, 0, RichEdit1);//转到2行0第一个字符处
RichEdit1.SetFocus;
end;
 
unreal方法可以
 
多人接受答案了。
 
后退
顶部