比如在memo中lines如下:a
                       b
                        ...
                       z  (共26行,但memo只能显示4行)
现假设按下一按钮后,让memo中出现的是:
                                      f
                                      g
                                      h
                                      i (即滚动到以f开头,lines中顺序不变)
请问如何实现?
谢谢!

解决方案 »

  1.   

    试了一下,下面的给你参考:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      // 先让光标移到最后,这样可以保证f在顶行
      Memo1.SelStart := Length(Memo1.Text);
      Memo1.SelLength := 0;
      // 光标移到f
      Memo1.SelStart := Pos('f', Memo1.Text);
      Memo1.SelLength := 0;
    end;
      

  2.   

    这样虽说可以让f出现在顶部,但这是因为f本来已经超出了第一页。
    如果我是想让第一页里的b或c出现在顶部就不行了,还有什么解决办法?
    谢谢!
      

  3.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
      myStrings:TStrings;
      iLoop:Integer;
    begin
      myStrings := TStringList.Create;
      for iLoop := 0 to 2 do
      begin
        myStrings.Add(Memo1.Lines.Strings[iLoop]);
        Memo1.Lines.Delete(iLoop);
      end;
      for iLoop := 0 to myStrings.Count-1 do
      begin
        Memo1.Lines.Add(myStrings.Strings[iLoop]);
      end;
    end;
      

  4.   

    楼下兄台,你这样的做法是先把指定行之前的先删除,并保存起来。
    使指定行出现在最顶,然后在把保存的数据再添回去,是吧。
    还没有没更好的方法?比如listbox中就可以通过sendmessage发送lb_settoindex来达到目的。我想memo中应该也有的。
      

  5.   

    刚才说错了,是楼上兄台( huangrenguang(湖))
      

  6.   

    sysu(死树) :
    如果不是针对字符,而是对行数,比如让memo中的第5行或第2行置顶怎么办?
      

  7.   

    我的主页上有个TSMemo,有这个能力,还有其它的位置能力。
    www.ahjoe.net
      

  8.   

    memo1.Perform(EM_SCROLLCARET, 4, 0)  //第五行
      

  9.   

    SendMessage(Memo1.Handle, EM_SCROLL, 0, 0)