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 11.116 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. |
Neu! sevCommand 4.0 ![]() Professionelle Schaltflächen im modernen Design! Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Tipp des Monats TOP Entwickler-Paket ![]() TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.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. |