Irgendwie ist Windows schon ganz schön langweilig... Private Type POINTAPI x As Long y As Long End Type 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 CreateRoundRectRgn Lib "gdi32" ( _ ByVal X1 As Long, _ ByVal Y1 As Long, _ ByVal X2 As Long, _ ByVal Y2 As Long, _ ByVal X3 As Long, _ ByVal Y3 As Long) As Long Private Declare Function CreatePolygonRgn Lib "gdi32" ( _ lpPoint As POINTAPI, _ ByVal nCount As Long, _ ByVal nPolyFillMode As Long) As Long Private Declare Function CreateEllipticRgn 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 ' CombineRgn 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 Diese Funktionen sind nun relativ leicht anzuwenden. Wie man mehrere Regionen Kombinieren kann, wird weiter unten erklärt. ' Natürlich nur ein Beispiel raussuchen Dim rgn&, pt(7) As POINTAPI ' Rechteckige Region rgn& = CreateRectRgn(0, 0, 400, 400) ' Rechteckige Region mit Runden Ecken rgn& = CreateRoundRectRgn(5, 5, 400, 400, 10, 10) ' Runde/Elliptische Region ' Wenn X1 = Y1 und X2 = Y2 dann Kreisrund rgn& = CreateEllipticRgn(10, 10, 400, 300) ' Polygon - Region ' Der Erste Wert zeigt auf den ersten beschriebenen Punkt ' Der Zweite Wert(hier 8) beschreibt die Anzahl der Punkte ' Das Polygon muß nicht geschlossen werden. ' Dies macht Windows automatisch pt(0).x = 10: pt(0).y = 10 pt(1).x = 10: pt(1).y = 50 pt(2).x = 50: pt(2).y = 80 pt(3).x = 100: pt(3).y = 500 pt(4).x = 500: pt(4).y = 550 pt(5).x = 500: pt(5).y = 80 pt(6).x = 100: pt(6).y = 500 pt(7).x = 500: pt(7).y = 550 rgn& = CreatePolygonRgn(pt(0), 8, 1) ' Region an ein Fenster verweisen. (dabei ist es egal welche ' Fensterklasse. d.H. auch Textboxen, Comboboxen...) SetWindowRgn Me.hwnd, rgn, True ' Danach wird der Speicherberich der Region freigegeben ...und fertig DeleteObject rgn Um mehrere Regionen zu Kombinieren, muß man erstmal mehrere anlegen. Danach kann man immer 2 zu einer machen.(wobei eine von beiden überschrieben wird) ' 2 Regionen vereint.... rgn1& = CreateRectRgn(0, 0, 200, 200) rgn2& = CreateRectRgn(300, 300, 400, 400) CombineRgn rgn1, rgn1, rgn2, RGN_XOR SetWindowRgn Me.hwnd, rgn1, True DeleteObject rgn1 DeleteObject rgn2 Dieser Tipp wurde bereits 30.851 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. |
Neu! sevEingabe 3.0 Einfach stark! Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Tipp des Monats Januar 2025 Dieter Otter Zeilen einer MultiLine-TextBox ermitteln (VB.NET) Dieser Zipp zeigt, wie man die Zeilen einer MultiLine-TextBox exakt so ermitteln kann, wie diese auch in der TextBox dargestellt werden. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
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. |