Rubrik: Oberfläche · Effekte | VB-Versionen: VB4, VB5, VB6 | 11.01.01 |
Polygone Formen 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... | ||
Autor: Michael Wangler | Bewertung: | Views: 15.665 |
ohne Homepage | System: Win9x, Win8, Win10, Win11 | Beispielprojekt auf CD |
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.
Schnellstart:
1. Starten Sie Visual Basic und Erstellen ein ganz normales EXE-Projekt
2. Fügen Sie folgenden Code in das Code-Fenster der Form1:
' 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 funktioniert nicht unter Windows 2000.