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 16.223 mal aufgerufen.
Anzeige
![]() ![]() ![]() (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 ![]() Matthias Kozlowski Umlaute konvertieren Ersetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Neu! sevPopUp 2.0 ![]() Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... |
|||||||||||||||||
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. |