vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2019
 
zurück
Rubrik: Grafik und Font · Sonstiges   |   VB-Versionen: VB4, VB5, VB631.08.04
Kreisregion erstellen

Dieses Beispiel zeigt, wie man mittels der API-Funktion CreateEllipticRgn Kreisregionen erstellt.

Autor:   DonBewertung:     [ Jetzt bewerten ]Views:  9.375 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

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 9.375 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2019 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel