2 saseku saseku 于 2014.11.18 20:41 提问

VBA中pictureBox在持续位移时,保持帧动画(延迟LoadPicture)?

请教大神:
1.将一个PictureBox做成帧动画(用timeGetTime来延迟LoadPicture从而逐帧实现)
2.将这个PictureBox进行持续位移(用timeGetTime来延迟持续改变其Left值)

那么问题来了:
位移时,原本进行的帧动画会暂停.
或者帧动画时,原来进行的位移会暂停
各自都使用了DoEvent也没用
请问有解决方案吗?

4个回答

caozhy
caozhy   Ds   Rxr 2014.11.18 20:46

问题的关键是移动PictureBox造成了gif的重绘,打乱了它的播放,必须放弃使用PictureBox移动这个方法,改为直接连续绘制/擦除gif在窗口中,你需要首先分解gif的帧,然后绘制。

saseku
saseku 不过我本来就是使用单帧gif通过不停地延迟loadpicture出来的,并不是直接放入gif动画的
3 年多之前 回复
saseku
saseku 感谢你的回答~
3 年多之前 回复
Topc008
Topc008   Rxr 2014.11.19 08:46

在vba里模拟动画播放多费劲啊,你直接上个webbrowser多省事啊。

saseku
saseku 重要的是我用这个方法的话,就可以自主控制动画的速率,位置等等.说不定还可以做个小游戏出来
3 年多之前 回复
saseku
saseku   2014.11.18 20:42

不能贴附件

Private Declare Function timeGetTime Lib "winmm.dll" () As Long

Sub Img1_LoadPic()
Dim Cycle As Integer
Dim PicNum As Integer
Dim Savetime As Double

For Cycle = 1 To 10
        For PicNum = 1 To 3
                Image1.Picture = LoadPicture(ThisWorkbook.Path & "\IMG\" & PicNum & ".gif")
                DoEvents
            Savetime = timeGetTime
            While timeGetTime < Savetime + 500
                DoEvents
            Wend
        Next
Next

End Sub

这是我先实现的帧动画

saseku
saseku   2014.11.18 20:43

Sub Img1_Mov()
Dim Savetime As Double
Dim NowMovNum As Integer
Dim AddMovNum As Integer
Dim AddValue As Integer
For AddValue = 1 To 5
NowMovNum = Image1.Left
AddMovNum = NowMovNum + AddValue
Image1.Left = AddMovNum
DoEvents

        Savetime = timeGetTime
        While timeGetTime < Savetime + 500
        DoEvents
        Wend
    Next

End Sub

这是我实现的picturebox持续位移

两个同时运行时会中断另一个
请问有解决方案可以两个sub同时产生效果么?
大神教我怎么改~~~

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!