|
| |

VB.NET - Ein- und Umsteiger| Re: Dreiecke zeichnen | |  | | Autor: Preisser | | Datum: 07.05.11 14:46 |
| Hallo,
Zu 1.: Ich denke, das kann man mittels eines System.Drawing.Region-Objekts machen, indem man einfach eine Intersektion (Schnitt) zweier Paths durchführt und anschließend prüft, ob das Ergebnis leer ist.
Hier auch mal ein Beispiel:
Option Strict On
Public Class Form1
Private dreieck As New System.Drawing.Drawing2D.GraphicsPath 'Dreieck
Private rechteck As New System.Drawing.Drawing2D.GraphicsPath 'Rechteck
Private rechteckRegion As System.Drawing.Region 'Region zur Bildung des
' Schnitts
Public Sub New()
InitializeComponent()
Me.DoubleBuffered = True
'Rechteck erstellen
rechteck.AddRectangle(New Rectangle(New Point(100, 100), New Size(70, _
60)))
rechteckRegion = New System.Drawing.Region(rechteck)
End Sub
Private Sub Form1_MouseMove(sender As Object, e As _
System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
Dim loc As Point = e.Location
dreieck.Reset() 'Neues Dreieck an der aktuellen Mausposition
dreieck.AddPolygon(New Point() {New Point(loc.X - 20, loc.Y - 10), New _
Point(loc.X + 20, loc.Y - 10), New Point(loc.X + 20, loc.Y + 30)})
Me.Invalidate() ' Repaint-Ereignis auslösen
Dim regIntersect As New System.Drawing.Region(dreieck) 'Region für das
' Dreieck
regIntersect.Intersect(rechteck)
Label1.Text = If(regIntersect.IsEmpty(Me.CreateGraphics()), "Nein", _
"Ja") 'Ist der Schnitt leer?
End Sub
Private Sub Form1_Paint(sender As Object, e As _
System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim g As Graphics = e.Graphics
g.FillPath(Brushes.Black, dreieck)
g.DrawPath(Pens.Blue, rechteck)
End Sub
End ClassDas Dreieck folgt immer dem Mauszeiger, und wenn das Dreieck das Rechteck berührt bzw. überlappt, zeigt der Label1 "Ja" an.
2. Ich glaub nicht, dass das geht, und ich glaub nicht, dass man sowas auch benötigen würde.
3. Wie meinst du das? "Object" ist die Basisklasse aller anderen Klassen, also kann eine mit Object deklarierte Variable beliebige Objekte aufnehmen, allerdings bietet sie nur die allgemeinen Methoden, die eben Object hat, außer man castet sie vorher in die entsprechende Unterklasse.
Wenn du in deinem Box-Array also Labels speichern willst, sollte die Deklaration nicht "Dim Box() as Object", sondern "Dim Box() as Label" lauten.
Ich versteh allerdings nicht, was du mit der While-Schleife unten meinst. Könntest du das noch etwas genauer beschreiben?
Beitrag wurde zuletzt am 07.05.11 um 14:52:10 editiert. |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
Neu! sevPopUp 2.0 
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere InfosTipp des Monats Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
| |
|
Copyright ©2000-2025 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
|
|