我使用2个picturebox的paint交替显示,还采用改变label的left属性、用API的TextOut方法但效果一直不好,画面有闪动,移动不够平滑,真着急,那位高手可以做到滚动的文字既不闪烁又流畅的,代码发往[email protected]  必定重谢!

解决方案 »

  1.   

    可以设置picturebox的AutoRedraw=true解决,这里是例子:
    http://www.freevbcode.com/code/scroll_text.zip
      

  2.   

    闪烁的原因是因为擦除的过程被用户看到所致。你只要保证擦除时不刷新显示,等新位置文本绘好后,再一次性刷新就可以了。
    流畅就不好说了,它与个人感觉有关,一般每次移动越少、时间间隔越短,越流畅,但要与效率与资源占用挂钩。过分追求没必要。用label的left属性的方法,肯定有闪烁,因为它的擦除是VB自动进行的。另两个办法要看代码怎么写,贴出你的代码,可以帮你改改。
      

  3.   

    Const strSamp = "滚动文本演示"
    Dim bShow As Boolean
    Dim iScroll As IntegerPrivate Sub Form_Load()
    Timer1.Interval = 10
    End SubPrivate Sub Timer1_Timer()
        If bShow Then
            bShow = False
            Picture1.Visible = False
            Picture2.Visible = True
            Picture1.Cls
            Picture1.CurrentX = iScroll
            Picture1.CurrentY = 30
            Picture1.Print strSamp
        Else
            bShow = True
            Picture1.Visible = True
            Picture2.Visible = False
            Picture2.Cls
            Picture2.CurrentX = iScroll
            Picture2.CurrentY = 30
            Picture2.Print strSamp
        End If
        iScroll = iScroll + 5
        If iScroll > 3000 Then
            Timer1.Enabled = False
        End If
    End Sub
      

  4.   

    为什么用两个PictureBox?人为制造闪烁感?看不懂你的意思,去掉Picture2后,改成下面这样就行了Const strSamp = "滚动文本演示"
    Dim iScroll As Integer
    Private Sub Form_Load()
    Timer1.Interval = 10
    End SubPrivate Sub Timer1_Timer()
        With Picture1
            .Cls
            .CurrentX = iScroll
            .CurrentY = 30
            Picture1.Print strSamp
        End With
        iScroll = iScroll + 5
        If iScroll > 3000 Then
            Timer1.Enabled = False
        End If
    End Sub
      

  5.   

    小吉,试了一下你的代码,这样更闪了,我的方法是用两个picturebox交替显示的,两个picturebox要大小一样,LEFT属性一样.
      

  6.   

    两个建议
    1.timer1.interval=100
    2.iScroll = iScroll + 15  15twip=1pixel 这样眼睛才会舒服点你试试看
      

  7.   

    twip是一种计量单位而pixel是像素。他们的转换关系大致15:1不知道你这样做后有没有解决问题
      

  8.   

    更闪了?在我机器上你的代码闪得历害,改过后基本没闪烁呀?
    你可新建一个工程,只用上面代码试试,可能是你的其它代码有问题autoredraw=true在这个代码中并不重要,可以不用。
      

  9.   

    都是治标不治本的方法,用VC好么?闪动是因为窗体每次更新时用默认的白色画刷(brush)显示了一下,看着当然闪了,用VC的话,把窗体的brush设为NULL。
      

  10.   

    其实在VC和DELPHI中都是容易实现的,但在VB中就很麻烦了
      

  11.   

    如果用PICTUREBOX的话还是用2个效果好点
      

  12.   

    小吉的代码加上autoredraw设置为true根本就不闪啊!
      

  13.   

    非常平滑的字幕滚动:
    http://www.mndsoft.com/blog/article.asp?id=206&keyword=%E5%B9%B3%E6%BB%91非常平滑的关于滚动字幕:
    http://www.mndsoft.com/blog/article.asp?id=493&keyword=%E5%B9%B3%E6%BB%91平滑文字滚动控件:
    http://www.mndsoft.com/blog/article.asp?id=665&keyword=%E5%B9%B3%E6%BB%91不够的话,自己再搜索吧,http://www.mndsoft.com