在窗体上 放二个 Picture,一个名叫 Picture1,一个叫 Picture2
其中 Picture1,的上下位置放到你要显示的位置,左右不用管。
Picture1
显示区
Picture2
缓冲区,不显示
WIN7+VB6 ,不闪烁。
程序代码:
Option Explicit
Dim step% '移动方向,1 向右,-1 向左
Const str = "IC Subtool Shortcut" '移动的文字内容
Dim strH As Long, strW As Long
Private Sub Form_Resize()
'载入窗体后本过程会被自动调用一次,不需要手动调用
'显示区和缓冲区随窗口大小而变化
Picture1.Move 0, Picture1.Top, Me.ScaleWidth '改变大小
Picture2.Move 0, 512, Me.ScaleWidth
Dim fs As Long
fs = 48 '字号初始为 48
Do
Picture2.Font.Size = fs '设置字号
strW = Picture2.TextWidth(str) '文字长度
If strW > Picture2.ScaleWidth Then '如果显示不了
fs = fs / 2 '字号减半
Else
Exit Do '能显示则退出循环
End If
Loop
strH = Picture2.TextHeight(str) '文字高度
Picture2.Height = strH '缓冲图像区高度
Picture1.Height = strH '显示区高度
End Sub
Private Sub Timer2_Timer()
Static strX As Long '坐标
'如果超出右边界并且是向右移动 或者 超出左边界并且是向左移动
If (strX + strW > Me.ScaleWidth And step = 1) Or (strX < 0 And step = -1) Then
step = -step '交换移动方向
Picture2.ForeColor = RGB(Int(Rnd * 256), Int(Rnd * 256), Int(Rnd * 256)) '换字体颜色
End If
strX = strX + Screen.TwipsPerPixelX * step '计算新的坐标,TwipsPerPixelX用来适应高分辨率屏
'把文字显示到缓冲区去
Picture2.Cls
Picture2.CurrentX = strX
Picture2.Print str
'把缓冲区的内容复制到显示区来,以达到不闪烁的目的
Picture1.PaintPicture Picture2.Image, 0, 0
End Sub
Private Sub Form_Load()
Timer2.Interval = 10 '设置定时器启动
Picture2.Visible = False '不显示
Picture2.BorderStyle = 0 '无边框
Picture2.Appearance = 0 '无3D
Picture2.BackColor = &H8000000F '背景色
Picture2.Font.Name = "Arial" '字体
Picture2.Font.Bold = True '字体加粗
Picture2.AutoRedraw = True '缓冲区设置自动重绘开,以确保能缓冲内容
Picture1.BorderStyle = 0 '显示区无边框
Picture1.Appearance = 0 '显示区无3D
'显示区不需要设置背景,字号什么的
'首次的颜色
Picture2.ForeColor = RGB(Int(Rnd * 256), Int(Rnd * 256), Int(Rnd * 256))
step = 1 '向右移动
End Sub
[
本帖最后由 风吹过b 于 2015-6-18 19:38 编辑 ]