都可以使用 API 函数 Bitblt 实现
因第一个问题较简单,故将自创源码Copy于下:
Option ExplicitPublic Declare Function GetTickCount Lib "kernel32" () As Long
Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As LongPrivate Const SRCAND = &H8800C6
Private Const MERGEPAINT = &HBB0226Public Sub Scring(ByVal BGPic As Object, ByVal ScrPic As Object, ByVal StartYPos As Integer, EndYPos As Integer)
    Dim T
    Dim G As Integer
    ScringY = BGPic.ScaleHeight + 1
    Scrolled = False
    Do
        Do: Loop Until GetTickCount - 25 > T
            T = GetTickCount
                With BGPic
                    .Cls
                    BitBlt .hdc, 177, ScringY + 1, 316, 2107, ScrPic.hdc, 0, 0, MERGEPAINT
                    ScringY = ScringY - 1: If ScringY < EndYPos Then ScringY = .ScaleHeight + StartYPos
                    .Refresh
                End With
        DoEvents
    Loop Until Scrolled
End Sub
准备两张Picture,并Load到PictureBox中,
使用Scring(背景图片框, 文字图片框, 开始位置, 结束位置)即可
调整左右位置,请调整Bitblt那一行的数字

解决方案 »

  1.   

    楼上的兄弟不行啊。他提是我
    编译错误:
    常数、固定长度字符串、数组、用户定义类型以及Declare语句不润徐作为对象模块的Pblic成员。
    另外优美有更简单的办法?例如利用Timer?
      

  2.   

    不可能用Timer能做出平滑滚动(VB.NET除外)
    另外,您是不是有病哦?
    我给您的是一个模块的代码,可以在程序的任意地点调用。
    有问题电我:
    [email protected]