核心提示:以下是代码(很简单):1)Memo:var linenum :Integer; //要跳往的行号begin SendMessage(Memo1.Handle,WM_VSCROLL,MakeWParam...
以下是代码(很简单):1)Memo:
var
linenum :Integer; //要跳往的行号
begin
SendMessage(Memo1.Handle,WM_VSCROLL,MakeWParam(SB_THUMBPOSITION,linenum-1),0);
end;
2)RichEdit:
var
linenum :Integer; //要跳往的行号
begin
RichEdit1.Perform(EM_LINESCROLL,0,-RichEdit1.Lines.Count);
RichEdit1.Perform(EM_LINESCROLL,0,linenum-1);
RichEdit1.SetFocus;
end;
不得不多说两句。Memo那个,查了一下Win32 SDK,知道了用WM_VSCROLL这个消息很容易实现,但是如果直接套用在RichEdit中却行不通。这个是因为在RichEdit中,滚动是以像素而不是以行数的,如果要用WM_VSCROLL消息的话,WParam必须做一下处理:
MakeWParam(SB_THUMBPOSITION,(linenum-1) * 行高)
这也是我一开始的思路。不过在查找资料的过程中,找到EM_LINESCROLL这个消息,问题迎刃而解了。