evo za početak ovako nešto. Ne bi trebalo da bude problem da dodaš click event i šta već treba
Code (vbnet):
Dim p1() As Point = {New Point(0, 0), New Point(40, 0), New Point(30, 10), New Point(10, 10)}
Dim p2() As Point = {New Point(0, 0), New Point(10, 10), New Point(10, 30), New Point(0, 40)}
Dim p3() As Point = {New Point(0, 40), New Point(40, 40), New Point(30, 30), New Point(10, 30)}
Dim p4() As Point = {New Point(40, 40), New Point(40, 0), New Point(30, 10), New Point(30, 30)}
Dim p5() As Point = {New Point(10, 10), New Point(30, 10), New Point(30, 30), New Point(10, 30)}
Dim Pol()() As Point = {p1, p2, p3, p4, p5}
Public Shared Function IsInPolygon(poly As Point(), p As Point) As Boolean
Dim p1 As Point, p2 As Point
Dim inside As Boolean = False
If poly.Length < 3 Then
Return inside
End If
Dim oldPoint = New Point(poly(poly.Length - 1).X, poly(poly.Length - 1).Y)
For i As Integer = 0 To poly.Length - 1
Dim newPoint = New Point(poly(i).X, poly(i).Y)
If newPoint.X > oldPoint.X Then
p1 = oldPoint
p2 = newPoint
Else
p1 = newPoint
p2 = oldPoint
End If
If (newPoint.X < p.X) = (p.X <= oldPoint.X) AndAlso (p.Y - CLng(p1.Y)) * (p2.X - p1.X) < (p2.Y - CLng(p1.Y)) * (p.X - p1.X) Then
inside = Not inside
End If
oldPoint = newPoint
Next
Return inside
End Function
Private Sub Form1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
Dim g As Graphics = Me.CreateGraphics
For Each p In Pol
If IsInPolygon(p, e.Location) Then
g.FillPolygon(Brushes.Red, p)
Else
g.FillPolygon(New SolidBrush(Me.BackColor), p)
End If
g.DrawPolygon(Pens.Black, p)
Next
End Sub
Private Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim g As Graphics = Me.CreateGraphics
g.DrawPolygon(Pens.Black, p1)
g.DrawPolygon(Pens.Black, p2)
g.DrawPolygon(Pens.Black, p3)
g.DrawPolygon(Pens.Black, p4)
g.DrawPolygon(Pens.Black, p5)
End Sub
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu