首页  编辑  

设置光标位置

Tags: /超级猛料/VCL/Memo&Edit&Richedit/   Date Created:

]、。·ˉˇ¨〃々—~‖…’”〕〉》」』〗】∶!"'),.:;?]` procedure SetCaret(RTF: TRichEdit; var row, col: word);

var

 i,iStopLine,iSelStart:integer;

 Strings:TStrings;

begin

 if (RTF=nil) then exit;

 Strings:=RTF.Lines;

 if Row=0 then Row:=1;

 if Col=0 then Col:=1;

 //到第Row列,Col行共几个字元

 iStopLine:=Row-1;

 iSelStart:=0;

 for i:=0 to Strings.Count-1 do

 begin

   if i=iStopLine then

   begin

     if Length(Strings[i])>Col then

       Inc(iSelStart,Col)

     else

       Inc(iSelStart,Length(Strings[i])+2);

     Break;

   end;

   Inc(iSelStart,Length(Strings[i])+2);

 end;

 if iSelStart>0 then Dec(iSelStart);

 //以设定标记的方式指定游标位置

 RTF.SelStart :=iSelStart;// + Length(RTF.Lines[i])+2;

 //再次侦测游标位置

 Row:=SendMessage(RTF.Handle,EM_LINEFROMCHAR,RTF.SelStart,0);

 Col:=RTF.SelStart-SendMessage(RTF.Handle,EM_LINEINDEX,Row,0);

 //卷到游标所在位置

 SendMessage(RTF.Handle,EM_SCROLLCARET,0,0);

end;