Dreieck zeichnen im Programm

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Dreieck zeichnen im Programm

    Hi,

    ich habe eine aufgabe bekommen in dem ich ein programm erstellen soll in dem ein dreieck gezeichnet wird und deren seiten und ecken sollen mit abc beschriftet sein.
    irgendwie bekomme ich die beschriftung nicht hin das die genau an den stellen steht wo sie hin sollen.

    hier ein pic vom prog.:

    derzeitiger stand:




    ... und so soll es aussehen:



    bin über jede hilfe dankbar :)
    mit freundlichen grüßen chris :)
    vmtl werden die meisten zu e.Graphics.DrawLine / e.Graphics.DrawString raten.

    Ich empfehle, die Zeichnung in einem GraphicsPath-Objekt anzulegen, mittels GraphicsPath.AddLine / GraphicsPath.AddString

    Diesen GraphicsPath kannstedir dann merken, und im Paint-Event immer mit e.Graphics.DrawPath painten.

    Konzentrierte Informationen über GraphicsPath findeste im ObjectBrowser, etwas umfassender inne MSDN.

    Dein Problem mitte Strings ist unzureichend erklärt: kannst du keinen String zeichnen, oder weißt du nicht, wie die Positionen ausrechnen?
    Offensichtlich hast Du dei Eckpunkte Deines Dreiecks, wenn Du die Mitte der Dreieck-Seite beschriften willst, solltest Du einfach den Mittlewert der Koordinaten verwenden.
    Da addierst Du noch einen empirischen Offset drauf, um den Text neben die Linien zu bekommen.
    Für Dateianhänge verwende bitte die Dateianhänge im Forum (Tab: Smileys, Einstellungen, Dateianhänge, Umfrage, Zitate). Dein Server müllt zu viel mit Werbung rum.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ok ich habe es soweit hinbekommen das ich die ecken beschriftet habe,
    leider gibt es ein problem mit B und C die verschmieren immer.
    langsam weiss ich nicht mehr weiter wäre echt super wenn mir jemand evtl. nen code adden würde damit B und C nicht mehr verschmieren.danke

    screenshot:



    hier der derzeitige code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
    3. Dim g As Graphics = CreateGraphics()
    4. g.TextRenderingHint = Drawing.Text.TextRenderingHint.ClearTypeGridFit
    5. Dim ptmitte As New PointF(CSng(ClientSize.Width / 2), CSng(ClientSize.Height / 2))
    6. Static ptmaus As New PointF(e.X, e.Y)
    7. Dim pp = New Pen(BackColor)
    8. Dim bb = New SolidBrush(BackColor)
    9. g.DrawLine(pp, ptmitte, ptmaus)
    10. g.DrawLine(pp, ptmaus, New PointF(ptmitte.X, ptmaus.Y))
    11. g.DrawLine(pp, ptmaus, New PointF(ptmaus.X, ptmitte.Y))
    12. Dim ptkoordinate = New PointF(ptmaus.X - ptmitte.X, ptmitte.Y - ptmaus.Y)
    13. Dim skoordinate = "(" & ptkoordinate.X.ToString & ", " & ptkoordinate.Y.ToString
    14. Dim szversatz As New Size(-40, -20)
    15. g.DrawString(skoordinate, New Font("Arial", 10.0), bb, PointF.Add(ptmaus, szversatz))
    16. ptmaus = New PointF(e.X, e.Y)
    17. pp.Color = Color.Black
    18. g.DrawLine(pp, ptmitte, ptmaus)
    19. 'Achsen
    20. pp.Color = Color.Black
    21. g.DrawLine(pp, ptmitte, New PointF(ptmitte.X, 0))
    22. g.DrawLine(pp, ptmitte, New PointF(CSng(ClientSize.Width), ptmitte.Y))
    23. 'Lote
    24. pp.Color = Color.Black
    25. g.DrawLine(pp, ptmaus, New PointF(ptmitte.X, ptmaus.Y))
    26. g.DrawLine(pp, ptmaus, New PointF(ptmaus.X, ptmitte.Y))
    27. 'Ausgabe der Koordinaten
    28. bb.Color = Color.Black
    29. ptkoordinate = New PointF(ptmaus.X - ptmitte.X, ptmitte.Y - ptmaus.Y)
    30. Static hypothenuse As Double
    31. Static Gegenkathete As Double
    32. Dim gs As Drawing2D.GraphicsState
    33. Dim fn As New Font("Arial", 14)
    34. gs = g.Save
    35. g.TranslateTransform(ptmitte.Y, ptmitte.Y)
    36. g.DrawString("A", fn, bb, hypothenuse, 0)
    37. g.Restore(gs)
    38. gs = g.Save
    39. g.TranslateTransform(ptmaus.X, ptmaus.Y)
    40. g.DrawString("B", fn, bb, hypothenuse, -10)
    41. g.Restore(gs)
    42. gs = g.Save
    43. g.TranslateTransform(ptmaus.X, ptmitte.Y)
    44. g.DrawString("C", fn, bb, hypothenuse, 0)
    45. g.Restore(gs)
    46. End Sub
    47. End Class
    Leider kann ich Deine hochgeladenen Bilder nicht in Ruhe ansehen, da ich mit Werbung zugeballert werde.
    Nutze bitte Dateianhänge hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Manawyrm schrieb:

    Hör du auf hier rumzuschreien und installier dir AdBlock Plus.
    Das sollte eine Frage der Höflichkeit der Forenmitglieder untereinander sein.
    Ansonsten müsste eine Forenmitgliedschaft mit einem Hinweis auf vorsorgliche Installation solcher Programme verbunden sein.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    user2100 schrieb:

    langsam weiss ich nicht mehr weiter wäre echt super wenn mir jemand evtl. nen code adden würde damit B und C nicht mehr verschmieren.danke

    Mit keinem Wort gehst du auf meine Hinweise ein - dabei führen die zur Lösung deines Probs.
    Dein Weg ist ein Holzweg - OwnerDrawing funktioniert nur im _Paint-Eventhandler.

    Einfach mal um zu gugge, was möglich ist: Control mit beweglicher Figur