Dieses Beispiel zeigt, wie man mittels der CreateEllipticRgn Kreisregionen erstellt. Zudem lassen sich die Regionen mit der aktuellen FillColor-Farbe füllen und es läßt sich überprüfen, ob die Maus innerhalb oder außerhalb der Region ist. Die erstellte Region ist zunächst unsichtbar, sofern sie nicht mit einer gewählten FillColor-Farbe gefüllt wird. Um das zu tun, benötigen wir die PaintRgn API-Funktion, die die Region mit der aktuellen Fillcolor-Farbe füllt. Damit wir auch wissen, wo sich die Maus befindet, also innerhalb oder außerhalb der Region, benötigen wir noch eine weitere API-Funktion: PtInRegion. Der Funktion gibt einen Wert <> 1 zurück, wenn sich der angegebene Punkt innerhalb der Region befindet bzw. 0, wenn der Punkt außerhalb der Region liegt. Um das Ganze etwas spannender zu machen, habe ich ein Feld erstellt, das 1000 gleiche Regionen erzeugt. Fährt man nun mit der Maus über die Region wechselt der Mauskursor zu einem Kreuz. Zudem wird der Index der jeweiligen Region in einem Label-Control ausgegeben. Alles was benötigt wird ist eine Form und ein Label-Control, sowie nachfolgender Code: Option Explicit ' Benötigte API-Deklarationen 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 PtInRegion Lib "gdi32" ( _ ByVal hRgn As Long, _ ByVal x As Long, _ ByVal y As Long) As Long Private Declare Function PaintRgn Lib "gdi32" ( _ ByVal hdc As Long, _ ByVal hRgn As Long) As Long Private Declare Function DeleteObject Lib "gdi32" ( _ ByVal hObject As Long) As Long ' Regionen indexsieren! Dim Region(1000) As Long ' Variable zum Überprüfen der Region Dim Innen As Long Private Sub Form_Load() Dim i As Long Dim x As Long Dim y As Long With Me .AutoRedraw = True .ScaleMode = vbPixels .FillStyle = vbFSSolid Randomize -Timer For i = 0 To 1000 x = Int(Rnd * 700) y = Int(Rnd * 700) ' Denkbar ist natürlich auch eine elliptische Form. ' Hierzu braucht man nur einen der hinter x,y ' angegebenen Werte zu ändern. Region(i) = CreateEllipticRgn(x, y, x + 20, y + 20) ' Leere Kreisregion mit Fillcolor füllen Innen = PaintRgn(.hdc, Region(i)) Next i End With End Sub ' Mausposition prüfen Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _ x As Single, y As Single) Dim i As Long ' Alle Rgionen(0-1000) druchgehen For i = 0 To 1000 ' Wenn Maus innerhalb von Kreisregion ist: Innen = PtInRegion(Region(i), x, y) ' Verlassen der Schleif If Innen <> 0 Then Exit For Next i If Innen <> 0 Then Form1.MousePointer = vbCrosshair ' Den Index der Region in Label ausgeben Label1.Caption = i Else Form1.MousePointer = vbDefault End If End Sub ' Speicher wieder freigeben Private Sub Form_Unload(Cancel As Integer) Dim i% For i = 0 To UBound(Region) Call DeleteObject(Region(i)) Next i End Sub Dieser Tipp wurde bereits 10.669 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. |
TOP! Unser Nr. 1 Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. 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. |