下面是经常在网页中看到的"雄鹰展翅"的动画代码:<EMBED style="LEFT: -40px; POSITION: absolute; TOP: -70px" src="http://hexun.com/flash/dongwu_10.swf" width="1024" height="1000" type="application/x-shockwave-flash" quality="high" wmode="transparent"></EMBED>
<<麻烦朋友们把这段代码复制到记事本另成为HTML后打开看看>>但是此代码经过(罗刚君老师)重新用VBA+***语言组合后得到了不可思议的显示效果,下面是初始打开网页的动画效果截图与切换页面后动画显示的图片:
初始截图:
切换页面后的截图:
我不明白的是为什么"雄鹰展翅"动画总是置于当前活动窗口之上显示呢(平常的只能在初始网页中显示啊...不可思议)******.非常抱歉,没有分数了,请朋友们凉解!
<<麻烦朋友们把这段代码复制到记事本另成为HTML后打开看看>>但是此代码经过(罗刚君老师)重新用VBA+***语言组合后得到了不可思议的显示效果,下面是初始打开网页的动画效果截图与切换页面后动画显示的图片:
初始截图:
切换页面后的截图:
我不明白的是为什么"雄鹰展翅"动画总是置于当前活动窗口之上显示呢(平常的只能在初始网页中显示啊...不可思议)******.非常抱歉,没有分数了,请朋友们凉解!
http://excelbbx.cn/donghua.rar
2 在这个窗口上创建一个 Flash 控件,这个控件的背景透明。
3 在 Flash 控件中播放 swf 文件。这么说你明白了吗?
说明一下,这个代码仅仅是示例,用VB是无法实现你说的那个效果的,那个效果得用VC来做。
因为VB比较弱智,由于VB的局限,即使实现了透明窗体,鼠标事件也不会被透明部分下面的窗体捕获。
Option Explicit'' 本程序实现VB6的窗体背景透明,且在上面创建一个背景透明的Flash控件。
'' 说明:VB6IDE 因无法将“Shockwave Flash” 组件加载到控件工具箱中,所以只能动态创建该组件。
'' 本程序需引用 “Shockwave Flash” 组件Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Const WS_EX_LAYERED = &H80000
Private Const GWL_EXSTYLE = (-20)
Private Const LWA_ALPHA = &H2
Private Const LWA_COLORKEY = &H1Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const HWND_TOPMosT = -1
Private Const SWP_NOMOVE = &H2
Private Const SWP_NosIZE = &H1
Private Sub Form_Load()
Dim bg As Long '窗体背景色,同时作为透明色
bg = RGB(0, 0, 0)
Me.BackColor = bg
SetWindowPos Me.hWnd, HWND_TOPMosT, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NosIZE
Dim rtn As Long
rtn = GetWindowLong(hWnd, GWL_EXSTYLE)
rtn = rtn Or WS_EX_LAYERED
SetWindowLong hWnd, GWL_EXSTYLE, rtn
SetLayeredWindowAttributes hWnd, bg, 0, LWA_COLORKEY
Call CreateFlashObj
End Sub
Private Sub CreateFlashObj()
Dim c As Control, f As ShockwaveFlashObjects.ShockwaveFlash
Set c = Me.Controls.Add("ShockwaveFlash.ShockwaveFlash", "Flash")
With c
.Width = Me.Width
.Height = Me.Height
.Visible = True
Set f = .Object
End With
With f
.BackgroundColor = Me.BackColor
.WMode = "Transparent"
.Movie = "兽.swf"
End WithEnd Sub
我的意见是:窗体是透明的了,鼠标事件必然是被它下面的窗体捕获。
即使不能达到这个效果,也是跟 VB 无关的。
在默认情况下:窗体完全透明(Alpha = 0)的地方,必然是‘鼠标穿透’的;不透明或没完全透明(Alpha>0)
的地方,
鼠标是不会‘穿透’的。
要实现窗体‘完全鼠标穿透’,只要用 API 设置窗体的 GWL_EXSTYLE 增加 WS_EX_TRANSPARENT 标识即可。
②“'' 说明:VB6IDE 因无法将“Shockwave Flash” 组件加载到控件工具箱中,所以只能动态创建该组件。”
添加方法:
工具箱中点鼠标右键→‘部件……’(或菜单‘工程’→‘部件……’、或快捷键‘Ctrl+T’),再在弹出窗口的‘控件’标签中,把列表中的“Shockwave Flash”钩选上(或者点击右方的‘浏览’按钮,再打开system32\Macromed\Flash 目录下的Flash10d.ocx文件即可。注意这个文件名跟Flash的版本有关,不同版本文件名有区别。不过相信大家都能猜出来是哪个文件),最后点‘确定’,Shockwave Flash控件就在工具箱中了。
当然这些不属于‘标准控件’的东西,如果要用这种控件,每个工程都要这样添加一次。
-_-!!!