控件:edit1,memo1
memo1有100行
当edit1取值50的时候,怎么让memo1自动下拉到第50行

解决方案 »

  1.   

    With Memo1 do
       SelStart := Perform(EM_LINEINDEX, Line, 0) ;
      

  2.   

    没有用阿,光标移动过去了
    但是不会自动下拉阿
    memo下拉框不会动,还是要手动下拉
      

  3.   

    一定要用Memo吗?能够实现,就是比较困难。要写很多代码。你可以使用象 SynEdit 这样的三方附源码控件。里面不仅有到达任意行数的函数还有让该行置可视面积中间的函数。
      

  4.   

    不一定需要用memo
    synedit下载好了
    怎么安装和使用
      

  5.   

    Memo1.SelStart := Memo1.Perform(EM_LINEINDEX, 50, 0);
    Memo1.SetFocus;
    SendMessage(Memo1.Handle,WM_VSCROLL,MakeWParam(SB_THUMBPOSITION,50),0);
      

  6.   

    有点小错误,改一改,只要这一句就OK了,刚才没测试好……
    BS一下自己 -_-#---------------
    var
      linenum :Integer;  //要跳往的行号
    begin
      linenum := 50;
      SendMessage(Memo1.Handle,WM_VSCROLL,MakeWParam(SB_THUMBPOSITION,linenum-1),0);
    end;
      

  7.   

    十分感谢,memo可以了
    我还有一个richedit,照样套用就找不准位置
    如果用在richedit上这一句该怎么改呢
      

  8.   

    RichEdit的,把 WM_VSCROLL 改为 EM_LINESCROLL :
    SendMessage(RichEdit1.Handle,EM_LINESCROLL,MakeWParam(SB_THUMBPOSITION,linenum-1),0);
      

  9.   

    不好意思,昨天晚上太晚了没有测试就想当然了……
    这样应该可以的……
    -----------------------------------------------
    var
      linenum :Integer;  //要跳往的行号
    begin
      RichEdit1.Perform(EM_LINESCROLL,0,-RichEdit1.Lines.Count);
      RichEdit1.Perform(EM_LINESCROLL,0,linenum-1);
      RichEdit1.SetFocus;
    end;