想让DEMO里的字,一个一个出现1。两个DEMO,DEMO1隐藏,DEMO2的数据逐渐从DEMO1里取出来,通过时间控件
---
代码如下:procedure TForm1.Timer1Timer(Sender: TObject);
 var  SI: TScrollInfo;
beginmemo2.Lines.Text:=copy(memo1.Text,1,i);
i:=i+1;
//把DEMO1的数据一个个取出  SI.cbSize := SizeOf(TScrollInfo);
  SI.fMask := SIF_ALL;
  GetScrollInfo(MEMO2.Handle, SB_VERT, SI);
SetScrollPos(memo2.Handle,1,si.nMax,true);
//当一页满了之后,设置 MEMO2的滚动条,到最下面
end;
-------------------
问题:
现在的功能都能实现了,只欠一个
就是一页满了之后,页面还是不会滚下来,设置了滚动条的SetScrollPos(memo2.Handle,1,si.nMax,true);
只是滚动条确实会下来了,但实际页面,还是第一页的使滚动条到最下面的,还有一种方法
memo2.Perform(EM_SCROLLCARET, 0, 0 );不过都是滚动条下来了,但页面还是没下来,还在第一页
----------
请教各位有什么做法???

解决方案 »

  1.   

    //供參考;
    procedure TForm1.Timer1Timer(Sender: TObject);
     var  SI: TScrollInfo;
    beginmemo2.Lines.Text:=copy(memo1.Text,1,i);
    i:=i+1;
    //把DEMO1的数据一个个取出  SI.cbSize := SizeOf(TScrollInfo);
      SI.fMask := SIF_ALL;
      GetScrollInfo(MEMO2.Handle, SB_VERT, SI);
    SetScrollPos(memo2.Handle,1,si.nMax,true);
    //当一页满了之后,设置 MEMO2的滚动条,到最下面
    SendMessage(Memo2.Handle,WM_KEYDOWN,VK_NEXT,0);//<--添加這句;
    end;
      

  2.   

    sailxia(小帆) (

    SendMessage(Memo2.Handle,WM_KEYDOWN,VK_NEXT,0);//
    之后,可以滚动一半了,前半页的能滚上去,但到中间的时候,就又停在那了知道什么原因吗???
      

  3.   

    奇怪啊,我這裡都是可以滾到底部的啊,看看還有沒有其它事件控制Timer或者控制memo2?
      

  4.   

    sailxia(小帆) 
    你的可能是MEMO1里的数据太少,你放多点数据就不行了前半部分是可以的,数据多一点就不行了
      

  5.   

    sailxia(小帆) 
    SendMessage(Memo2.Handle,WM_KEYDOWN,VK_NEXT,0);//这个的功能可能是相当于点一下 下面的滚动条,点一下,当然只能下去一点
    内容太多,滚动条太长的时候,是需要点很多次的才能到最下面有没有直接到最下面的??本来
    SetScrollPos(memo1.Handle,1,si.nMax,true);
    就是到最下面的
    不过用在TIMER控件里就不太行了
      

  6.   

    想不到了,我把下面的一篇小說都COPY進去了http://community.csdn.net/Expert/topic/3184/3184339.xml?temp=.3672602
    還是可以滾到底部哦
      

  7.   

    sailxia(小帆) (
    麻烦你把~
    你的这个发给我看一下行吗??
    整个压缩发给我[email protected]
      

  8.   

    我回頭看了,是出問題了,正在研究!不好意思,剛才把I的定義放在Timer1裡面了,我想你應該是把I定義全局變量吧?
      

  9.   

    折衷一下可以嗎?MEMO2改用RichEdit控件可以不?我又試了一試,RichEdit控件沒有這個問題;代碼:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, ComCtrls;type
      TForm1 = class(TForm)
        Timer1: TTimer;
        Memo1: TMemo;
        RichEdit1: TRichEdit;
        procedure Timer1Timer(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
        i:Integer;
    implementation{$R *.dfm}procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      RichEdit1.Text:=copy(memo1.Text,1,i);
      i:=i+1;
      SendMessage(RichEdit1.Handle,WM_KEYDOWN,VK_NEXT,0);
    end;end.
      

  10.   

    是啊,我的I是全局变量的哈哈
    原来是MEMO的问题
    怪不得好的
    就用RICHEDIT 试谢谢你,你真热心
      

  11.   

    哈哈
    用RICHEDIT就行了语句都一样的
    为什么DEMO不行??什么道理???