Wollen Sie ihrem UserControl Transparenz hinzufügen, aber trotzdem alle Maus-Events (Klicks, etc.) erhalten? Also auch die Mausklicks, die im transparenten Bereich ausgelöst werden? Dann kopieren Sie einfach den Hintergrund des Control-Containers in den Hintergrund ihres Controls. Code für das UserControl Option Explicit ' Benötigte API-Deklarationen Private Declare Function BitBlt Lib "gdi32" ( _ ByVal hDestDC As Long, _ ByVal X As Long, _ ByVal Y As Long, _ ByVal nWidth As Long, _ ByVal nHeight As Long, _ ByVal hSrcDC As Long, _ ByVal xSrc As Long, _ ByVal ySrc As Long, _ ByVal dwRop As Long) As Long Private Const SRCCOPY As Long = &HCC0020 Private Declare Function GetDC Lib "user32.dll" ( _ ByVal hwnd As Long) As Long Private Declare Function SendMessage Lib "user32.dll" _ Alias "SendMessageA" ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByRef lParam As Any) As Long Private Const WM_PAINT As Long = &HF& Public Event Click() Private Sub UserControl_Click() ' Klick-Event auslösen RaiseEvent Click End Sub Private Sub UserControl_Initialize() ' ScaleMode auf Pixel festlegen UserControl.ScaleMode = vbPixels End Sub Public Sub Refresh() ' UserControl transparent machen Dim nScaleMode As Integer With UserControl ' UserControl ausblenden, damit der dahinter liegende ' Hintergrund kopiert werden kann .Extender.Visible = False ' Inhalt löschen .Cls ' ScaleMode auf Pixel festgelegen nScaleMode = .Parent.ScaleMode .Parent.ScaleMode = vbPixels ' Wichtig! .AutoRedraw = True ' Neuzeichnen-Nachricht an das Container-Objekt senden, ' auf das sich das UserControl befindet SendMessage .ContainerHwnd, WM_PAINT, GetDC(.ContainerHwnd), 0 ' Hintergrundbild kopieren BitBlt .hDC, 0, 0, .Width, .Height, GetDC(.ContainerHwnd), .Extender.Left, .Extender.Top, SRCCOPY ' Hintergrund als neues Bild unseres UserControls setzen .Picture = .Image ' optional: ' Rahmen zeichnen UserControl.Line (0, 0)-(.ScaleWidth - 1, .ScaleHeight - 1), vbRed, B ' und bspw. noch einen Text ausgeben .CurrentY = 3: .CurrentX = 3 UserControl.Print "Klick me!" .AutoRedraw = False ' UserControl wieder sichtbar machen .Extender.Visible = True End With End Sub Private Sub UserControl_Show() ' Beim erstmaligem Anzeigen des UserControls ' Hintergrund transparent machen Static bShown As Boolean If bShown Then Exit Sub If Not Ambient.UserMode Then Exit Sub bShown = True Refresh End Sub Wichtig: Wann immer sich der Hintergrund des Container-Objekts ändert, müssen Sie die Refresh-Methode des UserControls aufrufen, damit sich der Hintergrund des UserControls an den neuen Hintergrund anpasst. Dieser Tipp wurde bereits 13.438 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. TOP! Unser Nr. 1 Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |