RSS
StartseiteKnowledge LibraryTop 10Impressum

4.6 Wie schalte ich ein Formular transparent?

VB4-VB6

Von:  [Home]

Eine sehr einfache Methode, ein Formular transparent erscheinen zu lassen, ist das Setzen des Fensterstils WS_TRANSPARENT. Dies erfolgt über die API Funktion SetWindowLong, wobei über GetWindowLong die bereits gesetzten Fensterstile ausgelesen werden und der Fensterstil WS_TRANSPARENT hinzugefügt wird.

Aber auch wenn Formulare zunächst, wie gewünscht, transparent erscheinen, kann man diese nicht ernsthaft transparent bezeichnen, da es zu erheblichen Darstellungsfehlern kommt, wenn zum Beispiel vordergründige Fenster drüber geschoben werden. Die benötigten Funktionen und Konstanten:

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 Const GWL_EXSTYLE As Long = (-20)

Private Const WS_EX_TRANSPARENT As Long = &H20&

Private 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 SWP_NOSIZE       As Long= &H1
Private Const SWP_NOMOVE       As Long= &H2
Private Const SWP_NOZORDER     As Long= &H4
Private Const SWP_FRAMECHANGED As Long= &H20
Private Const SWP_REFRESH      As Long= SWP_NOSIZE Or _
                                        SWP_NOMOVE Or _
                                        SWP_NOZORDER Or _
                                        SWP_FRAMECHANGED

Um ein Form nun transparent zu schalten, verwenden Sie folgenden Code:

Dim lExStyle As Long

lExStyle = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
SetWindowLong Me.hwnd, GWL_EXSTYLE, lExStyle Or WS_EX_TRANSPARENT

SetWindowPos Me.hwnd, 0, 0, 0, 0, 0, SWP_REFRESH

Eine besser arbeitende Lösung, finden Sie unter "Links zum Thema".

Links zum Thema