GDI+ Projektbetreuung - diverse Probleme / Dynamisches Diagramm

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von FreakJNS.

    GDI+ Projektbetreuung - diverse Probleme / Dynamisches Diagramm

    Hallö'chen Leute,
    ich hab mich heute Morgen mal an das Thema GDI+ gewagt, und ein bisschen experimentiert, doch Tatsache ist ,dass nur Müll dabei rumkommt.

    Mein Ziel : Ein dynamisches Flankendiagramm.

    Dieses Flankendiagramm soll sich selbst permanent updaten , und wie aus Flankendiagrammen bekannt , Flanken anzeigen. Ich habe es in so fern ,dass er die Y-Koordinate für das Zeichnen der Linie ändert ,wenn die Variable des "Schalters" umspringt (0 bzw. False und 1 bzw. True)
    Jedoch bekomme ich nur wunderschöne Dreiecke auf den Screen gemalt. Meine erste Frage wäre , ob man das gezeichnete einfach verschieben kann, ohne die Punkte an denen neu gezeichnet wird zu bewegen.

    Die Zeichenlogik die dahinter steht , macht mir zu schaffen. Hoffe ihr könnt mir helfen. Und bitte "Anfängerfreundliche" Erklärungen bereit halten.

    RodFromGermany schrieb:

    Mit welchem Code passiert das (nicht)?

    Für den Code , verdiene ich eigentlich 10 Hiebe auf die Fingerspitzen, aber naja. Hoffe ihr könnt mit etwas Verständniss dahinter blicken.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Dim A As Boolean
    4. Dim X As Integer = 250
    5. Dim XF As Integer = 250
    6. Dim Nullpunkt As Integer = 250
    7. Dim Y As Integer = 100
    8. Dim YF As Integer = 50
    9. Dim YG As Integer = 100
    10. Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
    11. Dim Points As New List(Of Point)
    12. If A = False Then
    13. Points.Add(New Point(Nullpunkt, YG))
    14. Points.Add(New Point(X, YG))
    15. Else
    16. Points.Add(New Point(X, YG))
    17. Points.Add(New Point(XF, YF))
    18. Points.Add(New Point(Nullpunkt, YG))
    19. Points.Add(New Point(X, YG))
    20. End If
    21. Dim PointArray() As Point = Points.ToArray
    22. 'Zeichnen
    23. Draw(e.Graphics, PointArray)
    24. End Sub
    25. Sub Draw(ByVal Gra As Graphics, ByVal points() As Point)
    26. Dim Pen As New Pen(Color.Black, 5)
    27. With Gra
    28. .Clear(Color.White)
    29. .DrawLines(Pen, points)
    30. End With
    31. End Sub
    32. Private Sub cmd_var_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_var.Click
    33. If A = False Then
    34. tb_var.Text = "A = True"
    35. A = True
    36. Else
    37. tb_var.Text = "A = False"
    38. A = False
    39. End If
    40. End Sub
    41. Private Sub timer_dia_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timer_dia.Tick
    42. If X > 0 Then
    43. X = X - 10
    44. End If
    45. XF = XF - 10
    46. PictureBox1.Invalidate()
    47. End Sub
    48. Private Sub cmd_draw_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_draw.Click
    49. If timer_dia.Enabled = False Then
    50. timer_dia.Enabled = True
    51. Else
    52. timer_dia.Enabled = False
    53. End If
    54. End Sub
    55. End Class


    Dass es fehlerhaft und überladen ist , weiß ich , ist auch nur ein reines Testprogramm. Aber wie gesagt. Meine Ausgangsfrage ist ,ob ich das "alte" gezeichnete durch irgendeinenBefehl einfach verschieben kann , und die "Neuzeichnung" immer an ein und der selben Stelle geschieht. Wie zB bei alten Oszilloskopen.
    Gugst Du GraphicsPath, da kannst Du alles skalieren und positionieren.
    Und noch eine Kleinigkeit:

    VB.NET-Quellcode

    1. Private Sub cmd_var_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_var.Click
    2. A = Not A
    3. tb_var.Text = "A = " & A.ToString
    4. End Sub
    5. Private Sub cmd_draw_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_draw.Click
    6. timer_dia.Enabled = Not timer_dia.Enabled
    7. End Sub
    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!
    A: Danke , die Art das so zu definieren kannte ich nicht (In Bezug auf A = Not A)

    B:

    RodFromGermany schrieb:

    Gugst Du GraphicsPath, da kannst Du alles skalieren und positionieren.

    tun wir doch mal so , als würde ich daraus nicht schlau werden. Welcher dieser Befehle hilft mir dort in wie fern?
    Ich frage hier nicht umsonst , "reale" Fachleute, wenn mir nur Links von Seiten entgegen geschmissen werden, mit denen ich ohne Erklärung nichts anfangen kann. Ich zitiere an dieser Stelle gern "Schenk dem Obdachlosen einen Fisch und er ist morgen wieder hungrig, aber bringst du ihm das Fischen bei, wird er nie wieder hungrig sein" was in diesem Forum gern genutzt wird. Doch mit dem Link hast du mir lediglich eine Angel in die Hand gedrückt und gesagt "Mach mal." -Meine Meinung.

    Also könntest du mir vielleicht , ein , zwei Schritte erklären damit ich Anschluß finde?

    Danke im Voraus.
    Ich habe dir den Link schon in deinem anderem Post gegeben:
    [VB 2012] Erstellen eines einfachen Tracker-Controls
    Hier ist alles schön erklärt, und es wird mit GraphicPath gearbeitet.
    Ebenfalls ist es ein Flanken-Diagramm das du benötigst.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    DannyDee schrieb:

    tun wir doch mal so , als würde ich
    nicht in der Lage sein, die Suchfunktion zu benutzen ... X(
    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!

    DannyDee schrieb:

    Immer alle so unfreundlich.
    Gugst Du 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!
    @DannyDee
    Jo, der Hungernde braucht nur warten bis das Ergebnis anbeißt. Beim Programmieren läuft das so aber nicht, da musst du selbst dahinter bleiben. Warum sollte dir jemand die Arbeit (das Lernen der Programmiersprache bzw das Kennenlernen des Frameworks) abnehmen?

    Und um deine Frage nach dem Verschieben zu beantworten: Das ist für mich ein klarer Fall von keine Datenstruktur vorhanden. In deinem anderen Thread hab ich dir ja erklärt, wie man sowas machen könnte. Fakt ist jedenfalls, dass du gezeichnetes nicht verschieben kannst - du kannst höchstens neuzeichnen (oder kratzt du die Farbe von einem Bild ab um sie dann 5cm nach links zu verschieben?)

    Um mal "Butter bei die Fische" zu machen: das Ganze soll wie das CPU-Diagramm im Taskmanager werden? Tja, regelmäßig werden Messungen gemacht (=>Messpunkte) und das Diagramm-Control zeichnet die letzten x Messpunkte. Fertig. Kommt ein Neuer dazu, wird neugezeichnet und es wirkt, als würde sich der 'Rest' nach links verschieben - ganz automatisch.