Transparant form

Status
Niet open voor verdere reacties.

henk54

Gebruiker
Lid geworden
17 aug 2005
Berichten
7
Wie weet hoe je een transparant form kan maken, met daarop enkele knoppen die WEL zichtbaar zijn?
 
dit is een code die ik voor Visual Basic gebruik... Dus GEEN VBA.. Wellicht kun je er iets mee.

Code:
Option Explicit 

Private Declare Function CreateRectRgn Lib _ 
    "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, _ 
    ByVal X2 As Long, ByVal Y2 As Long) As Long 

Private Declare Function CombineRgn Lib _ 
    "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, _ 
    ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long 

Private Declare Function SetWindowRgn Lib _ 
    "user32" (ByVal hWnd As Long, ByVal hRgn As Long, _ 
    ByVal bRedraw As Boolean) As Long 

Private Declare Function DeleteObject Lib _ 
    "gdi32" (ByVal hObject As Long) As Long 

' Constants used by the CombineRgn function 
Private Const RGN_AND = 1 
Private Const RGN_OR = 2 
Private Const RGN_XOR = 3 
Private Const RGN_DIFF = 4 
Private Const RGN_COPY = 5 

Private Sub Form_Activate() 
    Dim rgnForm As Long, rgnCombined As Long 
    Dim rgnControl As Long, x As Long 
    Dim formWidth As Single, formHeight As Single 
    Dim borderWidth As Single, titleHeight As Single 
    Dim ctlLeft As Single, ctlTop As Single 
    Dim ctlWidth As Single, ctlHeight As Single 
    Dim ctl As Control 

    ' Calculate the form area 
    borderWidth = (Me.Width - Me.ScaleWidth) / 2 
    titleHeight = Me.Height - Me.ScaleHeight - borderWidth 
    ' Convert to Pixels 
    borderWidth = ScaleX(borderWidth, vbTwips, vbPixels) 
    titleHeight = ScaleY(titleHeight, vbTwips, vbPixels) 
    formWidth = ScaleX(Me.Width, vbTwips, vbPixels) 
    formHeight = ScaleY(Me.Height, vbTwips, vbPixels) 
    ' Create a region for the whole form 
    rgnForm = CreateRectRgn(0, 0, formWidth, formHeight) 
    rgnCombined = CreateRectRgn(0, 0, 0, 0) 

    ' Make the graphical area transparent by combining the two regions 
    x = CombineRgn(rgnCombined, rgnForm, rgnForm, RGN_DIFF) 
    ' Make the controls visible 
    For Each ctl In Controls 

        ' Make the regions of controls whose container is the form visible 
        If ctl.Visible = True Then 'checks to see if the control is visible 
            If TypeOf ctl.Container Is Form Then 
                    ctlLeft = ScaleX(ctl.Left, vbTwips, vbPixels) + borderWidth 
                    ctlTop = ScaleX(ctl.Top, vbTwips, vbPixels) + titleHeight 
                    ctlWidth = ScaleX(ctl.Width, vbTwips, vbPixels) + ctlLeft 
                    ctlHeight = ScaleX(ctl.Height, vbTwips, vbPixels) + ctlTop 
                    rgnControl = CreateRectRgn(ctlLeft, ctlTop, ctlWidth, ctlHeight) 
                    x = CombineRgn(rgnCombined, rgnCombined, rgnControl, RGN_OR) 
            End If 
        End If 
    Next ctl 

    ' Set the clipping area of the window using the resulting region 
    SetWindowRgn hWnd, rgnCombined, True 
    ' Tidy up 
    x = DeleteObject(rgnCombined) 
    x = DeleteObject(rgnControl) 
    x = DeleteObject(rgnForm) 
End Sub
 
Code werkt perfect!
Nog 1 vraagje: ik heb een command-button op het form geplaatst. Hoe maak ik die tijdens runtime weer onzichtbaar (en vervolgens weer zichtbaar) ?
 
Dat wordt met deze code iets ingwikkelder, omdat je gebruik maakt van Each Control. Je zult daar even mee moeten knoeien. Let op... Het is niet gemakkelijk en mij even iets te veel werk. ben je niet zo maar klaar mee. (Sorry :o )
 
Van bovenstaande code geen KAAS. Maar je kan toch besturings elementen zichtbaar en onzichtbaar maken met de eigenschap: Visible (vb: Command1.Visible = false) zorgt voor een niet zichtbare knop...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan