VB4-VB6
Von: Tobias Schikora [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".