Linien mit maus zeichnen/löschen

  • VB6

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Neptun.

    Linien mit maus zeichnen/löschen

    Hallo zusammen,
    mein Problem ist folgendes: Ich will es ähnlich wie bei Paint machen, dass wenn man die Maus bewegt das eine Ende einer Linie der Maus folgt. Meine idee war diese:

    Visual Basic-Quellcode

    1. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    2. xv = X
    3. yv = Y
    4. If f = 2 Then
    5. Line (a, b)-(xv, yv)
    6. End If
    7. End Sub

    Leider zeichnet das Programm wie vielleicht unschwer zu erkennen ist nicht eine Linie die folgt sondern hunderte.
    Eine andere Idee von mir war statt MouseMove MouseDown zu benutzen, doch bei MouseDown zeichnet er ja immer nur dann nur eine Linie, wenn ich einmal die Maus drücke, die der gedrückten Maus aber nicht folgt.

    Könntet ihr mir vielleicht helfen bzw. Stichwörter für Google etc. geben.

    Visual Basic-Quellcode

    1. Private oldX As Integer,oldY As Integer
    2. MouseDown:
    3. oldX = X
    4. oldY = Y
    5. MouseMove:
    6. Line (oldX,oldY)-(X,Y)
    7. oldX= X
    8. oldY = Y

    soweit ich die Funktion noch richtig kenne sollte es funktionieren...
    Funktionsweise:
    Von dem Punkt, an welchem die Maus zuvor war zeichnet es zum aktuellen, von diesem dann wieder zum nächsten usw...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Hallo worldf3,
    probier' mal dies:

    Visual Basic-Quellcode

    1. Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    2. Me.PSet (X, Y), vbRed
    3. End Sub
    4. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    5. If Button = vbLeftButton Then
    6. Me.Line -(X, Y), vbRed
    7. End If
    8. End Sub
    Gruss,

    Neptun
    @ jvbsl danke für die Antwort. Es klappt alles super.
    Leider habe ich mich glaube ich etwas falsch ausgedrückt. Ich meinte, dass ich eine gerade Linie zeichnen möchte, wie bei Paint (manchmal findet man es auch bei spielen wie Billiard im internet usw.) wo man auf einen Punkt auf dem Bildschirm mit der Maus drückt, die Maus dann gedrückt hält (es ist mir nicht so wichtig ob man die Maus gedrückt halten muss oder nicht) und die gerade Linie folgt der Maus. Punkt1 ist der Punkt auf den man gedrückt hat und Punkt2 entspricht der Position der Maus.
    @ Neptun vielen Dank.
    Mein Code sieht nun folgendermaßen aus mit zwei Möglichkeiten me.cls zu verwenden:

    Visual Basic-Quellcode

    1. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    2. Me.Cls 'man kann die Linie der Maus folgen sehen
    3. If Button = vbLeftButton Then
    4. Line (oldX, oldY)-(X, Y)
    5. Me.Cls 'die Linie folgt nicht sichtbar der Maus, bleibt aber solange vorhanden, bis man wieder die Maus drückt
    6. End If
    7. End Sub
    8. Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    9. oldX = X
    10. oldY = Y
    11. End Sub

    Kennt vielleicht einem von euch eine andere möglichkeit ein als me.cls zu verwenden, weil dies ja den alles gezeichnete löscht.
    Hallo worldf3,
    du solltest Cls nach Möglichkeit nicht verwenden.
    Probier' mal dieses:

    Visual Basic-Quellcode

    1. ' Controls: 1 * Line-Control
    2. Private Sub Form_Load()
    3. Me.ScaleMode = vbPixels
    4. Me.AutoRedraw = True
    5. Line1.Visible = False
    6. Line1.BorderColor = vbBlue
    7. End Sub
    8. Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    9. With Line1
    10. If .Visible = False Then
    11. .X1 = X
    12. .Y1 = Y
    13. .X2 = X
    14. .Y2 = Y
    15. .Visible = True
    16. Else
    17. .Visible = False
    18. Me.Line (.X1, .Y1)-(.X2, .Y2), .BorderColor
    19. End If
    20. End With
    21. End Sub
    22. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    23. With Line1
    24. If .Visible = True Then
    25. .X2 = X
    26. .Y2 = Y
    27. End If
    28. End With
    29. End Sub
    Gruss,

    Neptun