PB 中在一个多行文本框中实现字幕上下滚动,首尾相连,循环滚动,
展开全部
使用MultiLineEdit控件。然后配合timer事件一起使用。
mle控件用来显示内容,而timer事件定时刷新,其实就是按照时间滚动。
不过首先你要设置所有的字幕行,然后给一个数组实例变量。
假设你的有5行,显示如下:
你好
PB测试
行文本滚动
首尾相连
循环滚动
这样5行循环滚动。
先定义一个实例变量string is_txt[]
在Open事件赋值
is_txt[1] = '你好'
is_txt[2] = 'PB测试'
is_txt[3] = '行文本滚动'
is_txt[4] = '首尾相连'
is_txt[5] = '循环滚动'
//显示
mle_1.text = is_txt[1] + '~r~n' + is_txt[2] + '~r~n' + is_txt[3] + '~r~n' + is_txt[4] + '~r~n' + is_txt[5]
timer(1) //1秒滚动一次
然后在timer事件写代码,改变每行显示的顺序。
string ls_tmp //定义一个临时的变量,为了交替数组的内容,mle控件始终显示1-5排列,所以只需改变原有数组的顺序,2到1,3到2.。。1到5这么改变一下,就形成滚动的效果了。
ls_tmp = is_txt[1]
is_txt[1] = is_txt[2]
is_txt[2] = is_txt[3]
is_txt[3] = is_txt[4]
is_txt[4] = is_txt[5]
is_txt[5] = ls_tmp
//显示
mle_1.text = is_txt[1] + '~r~n' + is_txt[2] + '~r~n' + is_txt[3] + '~r~n' + is_txt[4] + '~r~n' + is_txt[5]
mle控件用来显示内容,而timer事件定时刷新,其实就是按照时间滚动。
不过首先你要设置所有的字幕行,然后给一个数组实例变量。
假设你的有5行,显示如下:
你好
PB测试
行文本滚动
首尾相连
循环滚动
这样5行循环滚动。
先定义一个实例变量string is_txt[]
在Open事件赋值
is_txt[1] = '你好'
is_txt[2] = 'PB测试'
is_txt[3] = '行文本滚动'
is_txt[4] = '首尾相连'
is_txt[5] = '循环滚动'
//显示
mle_1.text = is_txt[1] + '~r~n' + is_txt[2] + '~r~n' + is_txt[3] + '~r~n' + is_txt[4] + '~r~n' + is_txt[5]
timer(1) //1秒滚动一次
然后在timer事件写代码,改变每行显示的顺序。
string ls_tmp //定义一个临时的变量,为了交替数组的内容,mle控件始终显示1-5排列,所以只需改变原有数组的顺序,2到1,3到2.。。1到5这么改变一下,就形成滚动的效果了。
ls_tmp = is_txt[1]
is_txt[1] = is_txt[2]
is_txt[2] = is_txt[3]
is_txt[3] = is_txt[4]
is_txt[4] = is_txt[5]
is_txt[5] = ls_tmp
//显示
mle_1.text = is_txt[1] + '~r~n' + is_txt[2] + '~r~n' + is_txt[3] + '~r~n' + is_txt[4] + '~r~n' + is_txt[5]
追问
可是这样一来是可以循环了,但是会有行的跳跃感,而且要改变内容的话 也很麻烦了啊,能不能用控制控制条或者控制PB的点来做呢
追答
控制条你可以做一个纵向拖动条,但是这种不用人操作自动滚动的效果,还是要借助timer定时触发事件才可以。只要有这个事件,肯定无法非常平滑的那种滚动。最好的效果就是把timer的触发时间调的小一点,这样会感觉不明显。
还有,使用mle,也可以多在上下加一些空行,这样滚动的感觉会更好。
还有这个数组,我这里只是写死了而已,你也可以动态装载的,不过在编辑文字的时候,要用回车把行与行之间分开才可以,否则数组无法动态的装载。可以利用pos(字符串,'~r~n'),来分别装载每一行。
我也只是提供一个思路,这样应该可行,不过写起来就没有我举的例子容易了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询