| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1896 人关注过本帖
标题:如何解决闪动问题
只看楼主 加入收藏
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:2 
如何解决闪动问题
Testing.zip (1.83 KB)


如何解决闪动问题?
搜索更多相关主题的帖子: 如何 
2015-06-18 16:54
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:5 
回复 楼主 yuk_yu
字体还挺好看,我这儿不只是闪的问题,I还有拖尾.
可能这个问题跟用VB做动画一样,用DirectX画或许有点改善.以前试过做纵版打飞机,感觉在全屏模式下和用picturebox窗口下绘图差别不大.
但这是label控件,我再想想能不能找到解决办法.
不过代码中用不着在form_load 中Call Timer2_Timer
...
3楼风版方法真巧,实现也容易。不用我再费周折了。

[ 本帖最后由 lianyicq 于 2015-6-19 09:00 编辑 ]

大开眼界
2015-06-18 17:06
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:15 
在窗体上 放二个 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 编辑 ]

授人于鱼,不如授人于渔
早已停用QQ了
2015-06-18 19:35
快速回复:如何解决闪动问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.087474 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved