我想在程序主窗体中实现“水波特效”,我已经从网上找到了封装好的DLL可是使用。
可是,如果实现水波特效的背景图片尺寸稍大时,DLL的初始化将需要一段时间。(在我的调试工程里大概需要10秒)。
于是,我希望建立一个启动窗体,当DLL初始化时,在前台做一些类似滚动条的动画,不至于让用于觉得程序停止响应了。
该DLL初始化具体是这样的:Dim Pic As StdPicture
Set Pic = LoadPicture(App.Path & "\BackMain.jpg")
WaterInit Pic.handle
Set Pic = Nothing当执行到WaterInit Pic.handle这一句时,原来启动窗体类似滚动条的动画同样会出现“假死”。可能我的表述有点复杂,大家运行一下我的调试工程就能看到效果了。调试工程下载地址:http://dl.vmall.com/c0fom2kkbk所以,我希望在执行WaterInit Pic.handle时,启动窗体可以正常显示动画。我曾经尝试过多线程,可是可能由于小弟我水平有限,都失败了还望各位大神不吝赐教!
可是,如果实现水波特效的背景图片尺寸稍大时,DLL的初始化将需要一段时间。(在我的调试工程里大概需要10秒)。
于是,我希望建立一个启动窗体,当DLL初始化时,在前台做一些类似滚动条的动画,不至于让用于觉得程序停止响应了。
该DLL初始化具体是这样的:Dim Pic As StdPicture
Set Pic = LoadPicture(App.Path & "\BackMain.jpg")
WaterInit Pic.handle
Set Pic = Nothing当执行到WaterInit Pic.handle这一句时,原来启动窗体类似滚动条的动画同样会出现“假死”。可能我的表述有点复杂,大家运行一下我的调试工程就能看到效果了。调试工程下载地址:http://dl.vmall.com/c0fom2kkbk所以,我希望在执行WaterInit Pic.handle时,启动窗体可以正常显示动画。我曾经尝试过多线程,可是可能由于小弟我水平有限,都失败了还望各位大神不吝赐教!
Me.Show
DoEvents
虽然不能避免假死,但是可以把界面给刷出来。事实上,如果你找一个很破很破的计算机(PII 266或者以下),启动VB6.0,VB6.0自己都会假死。
关键是WaterInit是调用别人封装的DLL,我不知道他内部怎么实现的,如果我知道WaterInit的内部实现就不存在类似假死的问题了。
关键是WaterInit是调用别人封装的DLL,我不知道他内部怎么实现的,如果我知道WaterInit的内部实现就不存在类似假死的问题了。那唯一的办法就是你代码实现一个一样功能的替代掉这个函数了
新建一个ActiveX EXE工程,里边放置一个启动窗口.
然后再在你的主程序中调用那个函数之前调用ActiveX EXE显示启动窗口.
然后调用那个函数.
函数返回后,调用ActiveX EXE退出启动窗口.
这个我倒没试过。
但是如果我添加一个ActiveX EXE工程,在该工程里无法引用原工程呀,也就是说,我无法调用原工程的任一窗口过程,那我怎么显示原来的主窗体啊……
比如Class1,里边定义两个方法:
show/hide
具体实现就是在show里显示窗口,hide里边关闭窗口。
修改工程描述(比如改成Project2),然后编译成Exe文件。
打开你现在的工程,引用Project2,然后在适当的位置执行以下语句:
dim cls as new class1
call cls.show
' ...
call cls.hide
我只试过上边一种方法:
Project2 (ActiveX EXE)
+-启动窗体
+-Class1MainProject:
引用Project2
调用Class1的Show过程。
执行WaterInit Pic.handle
调用Class1的Hide过程。
注意,我希望Debug.Print "click"在Debug.Print "done"之前执行!