2025年11月10日 星期一  乙巳年 九月廿一 【蛇】丙戌月 癸未日
用户名: 密 码: 保存
您现在的位置:首页 >> VCL >> VCL >> 内容

Delphi怎样实现TMemo、TRichEdit行跳转

时间:2011/9/3 16:25:00 点击: 2191

  核心提示:以下是代码(很简单):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) © 2025 版权所有 All Rights Reserved.
  • 粤ICP备10103342号-1