您现在的位置:首页 >> VCL >> VCL >> 内容

Delphi怎样实现TMemo、TRichEdit行跳转

时间:2011/9/3 16:25:36 点击:

  核心提示:以下是代码(很简单):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这个消息,问题迎刃而解了。

作者:webfly 来源:转载
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
本类推荐
  • 没有
本类固顶
  • 没有
  • 盒子文章(www.2ccc.com) © 2020 版权所有 All Rights Reserved.
  • 沪ICP备05001939号