Die meisten VB'ler werden wahrscheinlich wissen, wie man ein rundes oder ovales Fenster in Visual Basic erstellt. Aber was ist, wenn man ein Fenster haben möchte, dass nur drei, oder sogar mehr als 4 Ecken hat. Kein Problem: Unser nachfolgender Tipp zeigt Ihnen, wie's geht. ' Zunächst die benötigten API-Funktionen 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 Private Declare Function CreatePolygonRgn Lib "gdi32" ( _ lpPoint As POINTAPI, _ ByVal nCount As Long, _ ByVal nPolyFillMode As Long) As Long Private Type POINTAPI X As Long Y As Long End Type Private P() As POINTAPI Dim hRgn As Long ' Hier wird dem Formular das Aussehen gegeben. ' DefinePolygon: Festlegen der Eckpunkte ' CreatePolygonWindow: Fenster modelieren ' [Formularname], [Breite], [Höhe] Private Sub Form_Load() DefinePolygon CreatePolygonWindow Form1, 200, 150 End Sub ' Polygones Objekt aus dem Speicher werfen Private Sub Form_Unload(Cancel As Integer) KillObject Form1 End Sub ' Jetzt erden die Eckpunkte definiert Sub DefinePolygon() ReDim P(11) ' Anzahl Eckpunkte P(0).X = 0: P(0).Y = 0 ' ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ P(1).X = 100: P(1).Y = 0 ' P(2).X = 100: P(2).Y = 15 ' P(3).X = 200: P(3).Y = 100 ' P(4).X = 100: P(4).Y = 100 ' P(5).X = 150: P(5).Y = 150 ' X- und Y-Koordinaten P(6).X = 50: P(6).Y = 150 ' P(7).X = 50: P(7).Y = 125 ' P(8).X = 25: P(8).Y = 125 ' P(9).X = 25: P(9).Y = 150 ' P(10).X = 0: P(10).Y = 150 ' ____________________ P(UBound(P)).X = P(0).X P(UBound(P)).Y = P(0).Y ' Hier werden alle Koordinaten erfasst Dim m Dim Wdth As Integer Dim Hght As Integer Wdth = 0: Hght = 0 For m = 0 To UBound(P) If P(m).X > Wdth Then Wdth = P(m).X End If If P(m).Y > Hght Then Hght = P(m).X End If Next End Sub ' Hier steht der Code um das ' Polygone Fenster zu erstellen Sub CreatePolygonWindow(Obj As Object, Wdth, Hght) Dim FF1 As Integer Dim FF2 As Integer If TypeOf Obj Is Form Then ' Wenn das Objekt ein Formular ist, ' Auflösung in Pixel festlegen FF1 = Screen.TwipsPerPixelX FF2 = Screen.TwipsPerPixelY Else Obj.Container.ScaleMode = vbPixels FF1 = 1: FF2 = 1 End If ' Wenn das Objekt kein Formular ist (z.B PictureBox), ' dann dessen größe in Pixel umberechnen Obj.ScaleMode = vbPixels Obj.Width = Wdth * FF1 Obj.Height = Hght * FF2 ' Benötigter API-Aufruf Dim Res As Long hRgn = CreatePolygonRgn(P(0), UBound(P), 0) Res = SetWindowRgn(Obj.hwnd, hRgn, True) Obj.Refresh End Sub ' Polygones Fenster aus dem Speicher werfen Sub KillObject(Frm As Object) Frm.Visible = False Call DeleteObject(hRgn) End Sub Anmerkung Dieser Tipp wurde bereits 15.664 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! sevDTA 3.0 Pro SEPA mit Kontonummernprüfung Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
|||||||||||||||||
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. |