VB6如何做到透明視窗(OCX)
VB6用久了,就愈覺得它的視窗好單調,太古板。為了讓使用者有些新鮮感,就把視窗弄個透明度,可是VB6不像VB.net有內建的不透明屬性(Opacity),只能宣告API來達成。雖然可以直接用API來控制視窗的透明度,可是卻使用了不只一種的API函數,程式碼與VB.net比起來顯得相當冗長,不易撰寫,相當不便。有鑑於此,本站就製作了一個視窗透明專用的ActiveX控制項,並製成OCX檔案放到站上供需要的人使用。
ActiveX控制項下載:
Window Transparent 1.0
http://www.megaupload.com/?d=PT634XFI
Google協作平台範例檔案下載
此ActiveX不只是單純的視窗透明化,還增加了許多應用方法,像是漸次遞增(減)透明化,即視窗淡入(出)效果。ActiveX能控制的視窗還不只侷限於自己設計的VB程式,只要知道任意視窗的handle,均可控制,甚至還能達到淡入淡出的效果。有關此ActiveX控制項詳細使用方法,請繼續看下去。
各項控制屬性說明
Window Transparent在VB的預設名稱(NAME)是「WT」,要使用Window Transparent的各種屬性,就使用「WT號碼.屬性名稱」。以下就將Window Transparent名稱以「WT1」為例。
WT1.Alpha '控制WT1.InputhWnd(handle)所指的視窗透明度。範圍在整數0~255之間,數值愈小愈透明。當數值為0,則該目標視窗屬性如同Hidden。 WT1.Copyright '記錄著本OCX控制項的著作權 WT1.FindhWnd '尋找某個標題的視窗handle,通常會直接傳給WT1.InputhWnd。 WT1.Half '直接讓某標題的視窗半透明化 WT1.Hidden 'WT1.Unload淡出效果的關閉傳回值。通常WT1.Unload淡出效果會被用在表單載出的時候,當WT1.Unload淡出效果結束後WT1.Hidden的傳回值為True。預設為False。 WT1.InputAppear '設定WT1.Load淡入效果的動畫速度,即設定每單位時間的變化量。範圍為整數1~255,預設值為5。 WT1.InputAppearTime '設定WT1.Load淡入效果的動畫時間速度,即設定每單位變化量所需的時間。範圍為整數1~1000,預設值為1。 WT1.InputDisAppear '設定WT1.Unload淡出效果的動畫速度,即設定每單位時間的變化量。範圍為整數1~255,預設值為5。 WT1.InputDisAppearTime '設定WT1.Unload淡出效果的動畫時間速度,即設定每單位變化量所需的時間。範圍為整數1~1000,預設值為1。 WT1.InputhWnd '設定欲透明的對象視窗handle值,通常和Me.hWnd或WT1.FindhWnd併用。預設值為0。 WT1.Load '即淡入動作,當淡入動作正在執行時,傳回值為False。預設為True。 WT1.Percentage '控制WT1.InputhWnd(handle)所指的視窗透明度。範圍在整數0~100之間,數值愈小愈透明。當數值為0,則該目標視窗屬性如同Hidden。 WT1.Unload '即淡出動作,當淡出動作正在執行時,傳回值為False;執行完畢後WT1.Hidden為True。預設為True。 |
控制範例
Alpha
'WT1.InputhWnd = (輸入目標視窗handle值) 'WT1.Alpha = (輸入目標視窗的透明度值(0 - 255)) WT1.InputhWnd = Me.hWnd WT1.Alpha = 200 |
Copyright
Print WT1.Copyright '能直接取得著作權說明 |
FindhWnd
'(要存入handle的變數) =WT1.FindhWnd(視窗標題名稱) WT1.InputhWnd = WT1.FindhWnd("我的電腦") |
Half
'WT1.Half = (輸入要半透明的視窗標題名稱) WT1.Half = "我的電腦" |
InputAppear
'WT1.InputAppear = (輸入目標視窗的淡入透明度變化量(1-255))
WT1.InputAppear = 3 |
InputAppearTime
'WT1.InputAppearTime = (輸入目標視窗的淡入透明度時間變化量(1-1000))
WT1.InputAppearTime = 10 |
InputDisAppear
'WT1.InputDisAppear = (輸入目標視窗的淡出透明度變化量(1-255))
WT1.InputDisAppear = 3 |
InputDisAppearTime
'WT1.InputDisAppearTime = (輸入目標視窗的淡出透明度時間變化量(1-1000))
WT1.InputDisAppearTime = 10 |
InputhWnd
'WT1.InputhWnd = (輸入目標視窗handle值)
WT1.InputhWnd = Me.hWnd |
Load
'淡入效果通常用於載入表單時,因此應寫入表單Load事件程序中 Private Sub Form_Load() Dim Lrtn As Boolean '儲存WT1.Load(淡入效果)的傳回值 WT1.InputhWnd = Me.hWnd '先將表單視窗的hWnd值存入WT1.InputHwnd中 WT1.InputAppear = 5 '設定淡入效果的動畫速度,範圍整數1~255,數值愈大愈快。預設值為5。 WT1.InputAppearTime = 1 '設定淡入效果的動畫時間速度,範圍整數1~1000,數值愈大愈慢。預設值為1。 WT1.InputDisAppear = 5 '設定淡出效果的動畫速度,範圍整數1~255,數值愈大愈快。預設值為5。 WT1.InputDisAppearTime = 1 '設定淡出效果的動畫時間速度,範圍整數1~1000,數值愈大愈慢。預設值為1。 Lrtn = WT1.Load '執行WT1.Load(淡入效果),並將WT1.Load的傳回值儲存給Lrtn End Sub |
Percentage
'WT1.InputhWnd = (輸入目標視窗handle值) 'WT1.Percentage = (輸入目標視窗的透明度值(0 - 100)) WT1.InputhWnd = Me.hWnd WT1.Percentage = 75 '設定透明度為75% |
Unload
'淡出效果通常用於載出表單時,因此應寫入表單Unload事件程序中 Private Sub Form_Unload(Cancel As Integer) WT1.InputhWnd = Me.hWnd '結束前將表單視窗的hWnd值存入WT1.InputHwnd中 If WT1.Unload Then '判斷WT1.Unload(淡出效果)的傳回值是否為True。當WT1.Unload(淡出效果)正在執行時,WT1.Unload(淡出效果)傳回值為False While Not WT1.Hidden '判斷WT1.Hidden是否為False,為True跳出迴圈,結束程式(或結束表單)。當WT1.Unload(淡出效果)執行完後,WT1.Hidden會為True,此時會跳出While迴圈,繼續執行程式 DoEvents '讓其它程式碼(WT1.Unload的程式碼)也能執行 Wend End '關閉程式(亦可用表單.Hide) Else '若WT1.Unload為False,即WT1.Unload(淡出效果)還在執行中的時候,不能立即關閉表單 Cancel = True '取消關閉 End If End Sub |
淡入淡出效果(點擊圖片看動畫):
如何使用OCX檔
首先打開VB專案,按下上方功能表「專案→設定使用元件」。
接著在「控制項」設定標籤頁面中,按下右邊的「瀏覽」按鈕。
找到要使用的OCX檔案,按下右下方「開啟」按鈕。
勾選要加入的控制項,按下下方「確定」按鈕。
接著就會看到工具箱多了新的元件了。
將元件控制項加入表單中,便可使用。
Window Transparent在VB中會命名為「WT」(很好記吧^^)。
如果要讓「WT」在程式執行時不要顯示出來,就將Visible屬性設定為False吧!(沒有設定會顯示本站的廣告XD)
設定完Visible屬性後,執行程式時,表單上就看不到「WT」啦!當然你也可以將「WT」縮到最小,或是移到表單之外。
加入Window Transparent元件後,便可以用程式碼輕鬆控制視窗透明度了,無需再另外宣告API!真是寫給自己方便的XD