请给个思路(方法):如何实现文本的平滑滚动?

飘零风 2003-12-18 06:17:21
大家都见过大屏幕吧?文字从屏幕下方平滑滚动到上方。当文字出现在最下方的时候,不是一行一行的蹦出来,而是一点一点显示出来。上移到顶部的时候也是同样的效果。

现在要在程序里边实现同样的功能,要求可以控制文字的字体、大小,可以控制文字的颜色和背景色,可以控制文字的滚动速度。
...全文
145 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
northwolves 2003-12-20
  • 打赏
  • 举报
回复
这就可以了,闪的话TIMER的INTERVAL 长些:
PICTUREBOX + LABEL(AUTOSIZE=TRUE)+TIMER
apple_001 2003-12-19
  • 打赏
  • 举报
回复
对label这样用应该差不多把,我经常这样做跑马灯。
wangxuejun 2003-12-19
  • 打赏
  • 举报
回复
《在图片上平滑移动文字》
http://www.vb60.com/wenzhang/data/wenzhang.asp?listID=2003-04-19 10:25:02
看看上面这篇文件是否可以满足你
a11s 2003-12-19
  • 打赏
  • 举报
回复
真要想实现平滑移动只有画出来
由于VB的图像处理能力出奇的差,只能借助API
比如bitblt,这样您再C1.0GHz下200x200的范围内CPU 100%时可以实现平滑移动
如果您想全屏幕实现平滑移动,那么...
只有DirectDraw了,可以在1024x768下轻松超过60fps,(这个是我移动图片的结果)
实现电影级效果,当然,您也可以使用窗口模式
缺点,接口比较麻烦,当年看不懂愣是把微软的例子背下来了(虽然DDraw是DX中最简单的一个)
LemonRain 2003-12-19
  • 打赏
  • 举报
回复
加一个Label控件。
Option Explicit

Dim iStep As Integer

Private Sub Form_Load()
Label1.Top = Me.ScaleHeight
iStep = Me.ScaleHeight \ 200
Me.Show
Timer1.Enabled = True
End Sub

Private Sub timer1_Timer()
Label1.Top = Label1.Top - iStep
If Label1.Top < -Label1.Height Then
Timer1.Enabled = False
Unload Me
End
End If
End Sub
看看这个是不是你想要的。
飘零风 2003-12-19
  • 打赏
  • 举报
回复
To 楼上:不是我不相信你的方法,只是还不能完全解决我的问题。
一首歌的歌词毕竟是有限长度的。你可以在显示完毕一首歌以后,将文字清空,再显示下一首。因此这个文字的长度,包括控件的height,都是在可以控制的范围以内。

但是对于我的应用来说,如果不能解决height无限增长的问题,就没有意义了。

我的email:eports at 21cn.com。
liyan010 2003-12-19
  • 打赏
  • 举报
回复
就用我的吧,实在不信,告我你的mail,把我做过的例子发给你!
SoHo_Andy 2003-12-19
  • 打赏
  • 举报
回复
这个是窗体标题右向左循环滚动的例子
看看有什么启发没有

Dim num As Long
Const X = "滚动的标题"
Dim i As Long


Private Sub Form_Load()
Timer1.Interval = 100
num = (Me.Width - Me.TextWidth(X)) / Me.TextWidth(" ")
i = num
End Sub

Private Sub Timer1_Timer()
i = i - 1
Me.Caption = String(i, " ") & X
If i = 0 Then i = num
End Sub
wangzhe200 2003-12-19
  • 打赏
  • 举报
回复
UP
飘零风 2003-12-19
  • 打赏
  • 举报
回复
闪也罢,耗费资源也罢,我得先有一个能解决问题的办法才行啊。
liyan010 2003-12-19
  • 打赏
  • 举报
回复
To eports(飘零风):

哥们,你搞没搞错啊?这还是个好主意啊~ 很占系统资源的,知道不?

To huluobowangmeng(胡萝卜):

世界上没有绝对的事,我们的目的只要你的肉眼看起来感觉还不错就可以了~
想要真正的不闪,那还要麻烦您用flash给我们做一个~
嘿嘿
huluobowangmeng 2003-12-19
  • 打赏
  • 举报
回复
一般来讲,以上方法都不是绝对的平滑,都是一闪一闪的。我上学的时候老师就出了到题了。
难道了一片兄弟。各种控件试了一遍,还是闪。电视上常说:“不闪的才是好的,因为它不伤眼睛!”
飘零风 2003-12-19
  • 打赏
  • 举报
回复
多个label倒是个好主意,但是这样又如何控制字体大小呢?因为字体大小变化,每行显示的文字数量就会发生变化。

To SnHnBn(大可达):DirectDraw 我想是个好主意。可惜我从来没有研究过,现在开始学的话,恐怕是来不及了 :( 不过还是要谢谢你
maskzha 2003-12-19
  • 打赏
  • 举报
回复
用多个LABLE,每个显示一行文字。同时滚动
最上方和最下方可用个东西档住。超过遮挡物体就移到底端,更新文字。
就可循环使用LABLE了。
SnHnBn 2003-12-19
  • 打赏
  • 举报
回复
DirectDraw
飘零风 2003-12-19
  • 打赏
  • 举报
回复
我是比较担心“richtextbox的height跟着不停的变”最后会出问题。因为这个系统一直在运行,最后一定会造成height的数值非常非常大,以至于最后造成溢出。

这样的话,必须要有一个合适的方法减少height的值。也就是说,对于已经显示过的文字(已经滚动出屏幕),要把它们从顶部去掉,同时不能影响正在显示的文字。这个又应该如何做?
liyan010 2003-12-19
  • 打赏
  • 举报
回复
To 楼主eports(飘零风):
"我要显示的文本是不断增加的。一开始的时候,并不能确定文本的全部内容。"


这个好办啊,richtextbox的height跟着不停的变不就行了。
我以前就做过(以前是在做mp3播放器的歌词秀插件的时候就是这样的),记得好象显示1行的时候,richtextbox的height值应该是120左右,然后你就每加一行,richtextbox1.height再加120就可以了。
脆皮大雪糕 2003-12-19
  • 打赏
  • 举报
回复
创建一个窗体,窗体上放置一个picture1,然后在picture1里面放上一个picture2,picture2里面爱放什么放什么了,比如lable text buttom shape之类的,看你喜欢什么东西拿来滚动了。然后在窗体上访一个timer1

年贴下面的代码:
Option Explicit

Private Sub Form_Load()
Picture2.Width = Picture2.Width
Picture2.BorderStyle = 0
Timer1.Enabled = True
Timer1.Interval = 10
End Sub

Private Sub Timer1_Timer()
Picture2.Top = Picture2.Top - 10
If Picture2.Top < -Picture2.Height Then Picture2.Top = Picture1.Height
End Sub

现在picture2里面的东西开始平滑循环滚动了,程序里面可以对picture2所容纳的东西进行随意控制,可以作出非常眩的效果
飘零风 2003-12-19
  • 打赏
  • 举报
回复
对于我的应用来说,以上这几种方法都面临同一个问题,那就是:我要显示的文字是不停变化(不断增加)的。我并不能在程序初始化的时候确定文本的内容。这个比较麻烦。
飘零风 2003-12-18
  • 打赏
  • 举报
回复
我要显示的文本是不断增加的。一开始的时候,并不能确定文本的全部内容。
加载更多回复(2)
《Delphi 7 新概念百例》是一本通过讲解Delphi实例,来说明使用Delphi编程时通常采用的编程思路以及具体方法的计算机书籍。通过对每个实例从编程思路和代码实现的详细分析和讲解,力求带领读者快速地提高自己的程序设计水平,并达到举一反三的目的。很多实例的重要部分都做了特别注意和技巧等提示,目的是强调一些技巧的使用或使读者尽量避免一些常见的错误,以使更高效地利用Delphi这个强大的程序开发工具。  该书精选了100多个经典的实例从易到难、由浅入深、由简单到综合地进行讲解,内容涉及面也很广泛,基本上涵盖了用Delphi进行应用程序设计的方方面面,凝聚了作者多年的Delphi编程经验,相信对启发读者的思想并提高读者的编程水平台有很大帮助。  该书主要面向中高级读者,但对那些熟悉Object Pascal语法并有一定编程经验的初级读者也很有帮助。本书也可以作为初涉Delphi的实例教材使用。  本文件是《Delphi 7 新概念百例》的配书源代码,包含编译好的可执行文件。内容如下:├─综合应用篇│ ├─87 用TreeView来显示数据库信息│ ├─86 显示彩色数据表格│ ├─85 文件切割器│ ├─84 加密解密器│ ├─83 TButton增加OnMouseLeave事件│ ├─82 将IE收藏夹导出为HTML文件│ ├─81 NT Win2000中发送Winpop消息│ ├─80 制作无闪烁的动画│ ├─79 定制自己的幽灵程序│ ├─78 简单的文件查看器│ ├─77 简单的文件夹浏览器│ └─76 实现自己的控制面板├─练习提高篇│ ├─99 获取TRichEdit控件中光标所在行号│ ├─98 获取内存信息│ ├─97 获取CPU 信息│ ├─96 获取Windows的版本│ ├─95 临时文件的操作│ ├─94 获取Windows和System目录│ ├─93 将窗体大小限定在一定范围内│ ├─92 闪烁窗口│ ├─91 在窗体客户区用鼠标拖曳窗体│ ├─90 使TMemo组件带边界│ ├─89 给ListBox控件增加水平滚动条│ ├─88 运行时拖动控件│ ├─104 防止程序或系统关闭│ ├─103 设置屏幕分辨率│ ├─102 获取系统和显卡的BIOS信息│ ├─101 使应用程序不出现在任务栏上│ └─100 隐藏或显示桌面上的图标└─基础实例篇 ├─8第八节 数据库技术 │ ├─75 通过注册表在程序中增减和修改数据源 │ ├─74 获取BDE的配置信息 │ ├─73 动态建立和使用别名 │ │ ├─在程序中动态地建立和使用别名(四) │ │ ├─在程序中动态地建立和使用别名(二) │ │ ├─在程序中动态地建立和使用别名(三) │ │ └─在程序中动态地建立和使用别名(一) │ ├─72 自动检测、建立数据库别名和数据表 │ ├─71 用Delphi进行数据库之间转换 │ ├─70 图像数据的存取 │ ├─69 压缩、反删除dBase或FoxPro数据表 │ ├─68 处理数据库日期型字段的显示与输入 │ │ └─数据库 │ └─67 在数据库中存取Word文档 ├─7第七节 网络编程 │ ├─66 动态更改DNS │ ├─65 网络资源树形浏览 │ ├─64 实现网络驱动器的映射和断开 │ ├─63 在网络邻居上得到某台机器的磁盘空间 │ ├─62 在网络邻居中获取指定工作组内的所有计算机及其共享资源信息 │ ├─61 在WinNT-2000网络邻居中获取所有的工作组 │ ├─60 计算机名与IP地址的互相获取 │ ├─59 实现Ping操作 │ ├─58 网页浏览器 │ └─57 获取本机机器名、IP信息以及网卡的MAC地址 ├─6第六节 多媒体技术 │ ├─56 实现图像之间的平滑过渡 │ ├─55 制作能播放Midi、Wav和Avi文件的播放器 │ ├─54 检测声卡是否安装 │ ├─53 获取Audio-CD的序列号 │ ├─52_关闭CD-ROM │ └─51 检测_设置CD-ROM是否自动运行 ├─5第五节 图像技术 │ ├─50 创建Jpeg图像的缩略图 │ ├─49 实现图像的翻转 │ ├─48 多种渐变色的实现 │ ├─47 TColor与RGB值的互相转换 │ ├─46 将文本转换成图像 │ ├─45 提高对位图象素的访问速度 │ ├─44 将彩色位图转换为灰度图 │ ├─43 将图像从jpg,ico,bmp,wmf格式转换为emf格式 │ ├─42 将图像从jpg,ico,emf,wmf格式转换为bmp格式 │ └─41 将图像从bmp格式转换为Jpg格式 ├─4第四节 VCL分析 │ ├─40 消除在TEdit控件中按下回车键时的声音 │ ├─39 在StringGrid中设置只读栏 │ ├─38 加速TTreeView控件的填充和清空 │ ├─37 加速TListBox控件的填充和清空 │ ├─36 在TStringGrid控件中删除整行 │ ├─35 动态创建主菜单和菜单项 │ ├─34 使程序能在循环中响应界面操作 │ ├─33 在TListbox、TCombobox中实现自动搜索 │ ├─32 用剪贴板复制和粘贴图像 │ └─31 实现.dfm文件和.txt文件的互相转换 ├─3第三节 Shell研究 │ ├─30 为程序创建快捷方式 │ ├─29 获取Windows的若干特殊文件夹路径(二) │ ├─28 获取Windows的若干特殊文件夹路径(一) │ ├─27 抽取程序关联图标 │ ├─26 磁盘格式化的实现 │ ├─25 将文件加入“开始”菜单的“文档”中 │ ├─24 文件的拖放 │ ├─23 整个目录的复制、移动、删除 │ ├─22 将指定文件类型设置为与自己的应用程序相关联 │ └─21 文件的自动打开和超链接的实现 ├─2第二节 系统探秘 │ ├─20 操作INI文件 │ ├─19 获取驱动器类型信息 │ ├─18 在自己的程序中关闭其它的程序 │ ├─17 使程序开机自动运行 │ ├─16 在自己的程序中打开或关闭IE窗口 │ ├─15 模拟鼠标的行为 │ ├─14 限制光标的移动区域 │ ├─13 获取或更改计算机名 │ ├─12 运行程序的单实例 │ └─11 隐藏任务栏 └─1第一节 界面设计 ├─09 在系统菜单上添加自定义菜单项 ├─08 使窗体始终最大化 ├─07 使窗体始终最小化 ├─06 为窗体创建动画光标 ├─05 制作始终位于最上层的窗体 ├─04 制作带背景窗体 ├─03 制作圆形窗体 ├─02 制作无标题栏窗体 ├─10 给窗体边框“镶边” └─01 制作不可移动的窗体

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧