老蔡的幸福生活

人生真正的价值在于从何种意义与何种程度上摆脱自我
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一个字幕滚动控件

Posted on 2008-08-19 14:42  一棵芹菜  阅读(975)  评论(1)    收藏  举报

按照需求要做这么一个控件,通过简单设置控件的字符串属性为待展现字符串,字符串就可自动在控件上由下往上滚动,类似千千静听滚动歌词字幕功能,但是控件大小可调节,需要字符串自适应控件大小,需要展示的字符串比较多,这是个难点。我尝试过四种思路:

一:利用时钟移动控件坐标。

二:利用时钟移动控件内部标签。这两中思路显然不行,第二中可展示的字符串有限。

三:移动文本,按一定时间拼接一次字符串,造成字符滚动的假象,但是这只能左右移动。vb.net代码如下:

     

Code

 

 

四:把需要展示的字符串写到一副图像上,然后把图像写到图形设备上。实现代码如下,但是这个程序不完善,我在内存中固定设置了控件宽度*1000的bitmap图像,所以至多滚动这一副图像面接容量的字符串,然后我让时钟大约在500秒内在控件上滚动完这一副图像。这样的普遍现象是,譬如展现字符串几百个,在滚动完这些字符后,实际上程序还在运行,浪费资源。问题的主要困难在于,将一串字符串写入图像后,如何才能知道,这些字符串的面积或者说高度有多大?那就要计算字符大小,字符间距,字符个数,控件宽度之间的关系。也能计算,不过字符的间距不随字体的差异,大小而变化吗?

另外,不知道能否把web窗体嵌入到winform窗体中,因为在web窗体中实现字符串滚动比较简单。

 

Code