05-11-29 请教有关于Memo自动平滑滚屏的问题 高手们来看看 ( 积分: 50 )

  • 主题发起人 主题发起人 mayao
  • 开始时间 开始时间
M

mayao

Unregistered / Unconfirmed
GUEST, unregistred user!
坛子里的高手们,我想请教一个问题,就是怎么让Memo自动平滑滚屏,原先的文章我看了,但那些都是一行行往上跳的,看着不是很舒服,我想做成平滑滚动的效果。

我做一个程序,在里面放了一个memo,然后从数据库里读取数据(较长的文章),滚动到文章最后,再读下一条文章记录,再滚动...,循环,当鼠标移动动到memo上时,停止滚动。

这是我是参考别人的一段代码,滚动效果一般,但是只能一直向下滚动,不知道如何判断是否已滚动到当前文章的结尾,不知大家有何良策,代码如下:

procedure TForm1.Timer1Timer(Sender: TObject);

var x,x1:PRect;

begin

new(x);
new(x1);
x^ := Memo1.ClientRect;
x1^ := Memo1.ClientRect;
ScrollWindow(Memo1.Handle,0,-1,x,x1);

end;

谢谢关注! [:D]
 
坛子里的高手们,我想请教一个问题,就是怎么让Memo自动平滑滚屏,原先的文章我看了,但那些都是一行行往上跳的,看着不是很舒服,我想做成平滑滚动的效果。

我做一个程序,在里面放了一个memo,然后从数据库里读取数据(较长的文章),滚动到文章最后,再读下一条文章记录,再滚动...,循环,当鼠标移动动到memo上时,停止滚动。

这是我是参考别人的一段代码,滚动效果一般,但是只能一直向下滚动,不知道如何判断是否已滚动到当前文章的结尾,不知大家有何良策,代码如下:

procedure TForm1.Timer1Timer(Sender: TObject);

var x,x1:PRect;

begin

new(x);
new(x1);
x^ := Memo1.ClientRect;
x1^ := Memo1.ClientRect;
ScrollWindow(Memo1.Handle,0,-1,x,x1);

end;

谢谢关注! [:D]
 
得到你的文本框有多少行,再根据scrollwindow滚动的量算。
 
汗~~~ ... 那是别人发表上去的,有长有短,哪里能知道有多少行啊.
 
对了,还有一个,就是当memo为enable时,框里总有个小光标在那里闪啊闪的,看了不爽,如果不让他enable,那滚动条又不能起作用,头痛,不知道那位大侠顺便解决了吧!呵呵
 
当然可以知道多少行。
memo1.lines.count
 
kgm,huiyue两位兄弟,我明白了,受教了,多谢!

............再问一下,那scrollwindow滚动的量是怎么得到呢?
 
你那个-1就是
 
CreateCaret(hwnd); //显示光标 HideCaret(hwnd);//隐藏光标
 
kgm 太谢谢了! 哈哈 我赶紧去试试,估计能成,多谢了啊!
 
用这个岂不更好?已经提供OnLoop事件了
http://www.delphifans.com/infoview/Article_629.html
 
兄弟们,我用的那种方法有些纰漏,滚屏是滚了,但是滚动的只是开始显示出来的memo框内的行,往下滚的话就是空白了,但是用鼠标去点那些白色的地方,就会有字出来,由此,应该是数据行在滚动,但是没显示,这是为什么呢?那位弟兄试试,看是代码不完备还是我系统的问题啊。

arhaha,谢谢啦,我试试你说的那篇文章去了, [:D]
 
嗯,arhaha,你那个方法得外观和控制都不不能满足我要求啊,还是多谢你了。

兄弟们,帮我看看为什么memo框里的文字在滚动,但是却不显示呢?
 
明天我给你一个我自己写的控件,就是用memo实现的
 
hehe,竟然找到了,还好

http://www.delphibbs.com/keylife/iblog_show.asp?xid=18757
 
[:)] 厉害啊,兄弟,你还真是身手不凡,自己写的,说不得我要拜读了

我再试~~~~~.... 一定成功~!

呵呵,天黑了,回家吃饭洗澡玩游戏上床睡睡了~~~~~ 兄弟们明天见 [:D]

又附: 谁还有什么意见建议的,大家加油提啊。
 
arhaha,你的东西做得很不错啊,真是佩服你啊,只是,为什么滚动时会很闪烁呢?
 
顺带,哪位强人帮看看我开始那段代码,看是哪里有问题,才会不刷新显示。这样做其实效果还是不错的,真的很平滑,而且也不会闪,代码也很简单......。

呵呵,在这个知识的时代里,多学习些总不会错的,大家一起来修改一下,我想,会是一个很有用的功能的,很多地方都能用得着,群策群力嘛!

再次感谢 arhaha 兄的大力帮忙,多谢了!
 
如果改用双缓冲,而不是一行一行的直接画,就可以避免闪烁
 
呵呵 arhaha 你终于来啦 好久不见 近来还好啊

嗯 ... 那个双缓冲 ... 应该怎么做啊?
 

Similar threads

S
回复
0
查看
752
SUNSTONE的Delphi笔记
S
S
回复
0
查看
758
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部