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協作平台

範例檔案下載

http://www.megaupload.com/?d=ENKAY1HD
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專案,按下上方功能表「專案→設定使用元件」。

sshot-1

接著在「控制項」設定標籤頁面中,按下右邊的「瀏覽」按鈕。

sshot-2

找到要使用的OCX檔案,按下右下方「開啟」按鈕。

sshot-3

勾選要加入的控制項,按下下方「確定」按鈕。

sshot-4

接著就會看到工具箱多了新的元件了。

sshot-5

將元件控制項加入表單中,便可使用。

sshot-6

sshot-7

Window Transparent在VB中會命名為「WT」(很好記吧^^)。

sshot-8

如果要讓「WT」在程式執行時不要顯示出來,就將Visible屬性設定為False吧!(沒有設定會顯示本站的廣告XD)

sshot-9

設定完Visible屬性後,執行程式時,表單上就看不到「WT」啦!當然你也可以將「WT」縮到最小,或是移到表單之外。

sshot-10

加入Window Transparent元件後,便可以用程式碼輕鬆控制視窗透明度了,無需再另外宣告API!真是寫給自己方便的XD

文章分類:VB6.0|標籤:, , , , , ,

迴響已關閉