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.689 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 Mai 2024 Hermann Röttger Wochentage eines Datumsbereichs ermitteln Wochentage eines Datumsbereichs ermitteln, optional mit Feiertagsberechnung sevWizard für VB5/6 Professionelle Assistenten im Handumdrehen Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) |
|||||||||||||||||
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. |