Linie zeichnen

  1. 6 weeks ago

    Andreas A

    Apr 22 Testers, Xojo Pro

    Hallo!

    Ich möchte im Desktop Programm eine Linie zeichnen.

    Dies kann über das Paint Event ja scheinbar nur ein Canvis?

    Dort dann g.draline(x,y,x1,y1)

    Ich möchte das aber per Mausklick machen. Also beim Klick wird der Anfangspunkt der Linie auf die Mausposition gesetzt.

    Wie funktioniert das?

    Höre gern.

    Gruß
    Leffe

    P.S. Das Realbasic.de Forum gibt es nicht mehr?

    In dem Paint-Event eines Canvas-Controls kann man mit

    g.DrawLine 0,0,g.Width, g.Height

    eine Linie zeichnen. Das Beispiel erzeugt eine Linie von links oben nach rechts unten.

  2. Christian S

    Apr 22 Testers, Xojo Pro, XDC Speakers, Third Party Store Germany

    Das alte Forum ist leider weg.

    Hast Du die Beispiele bei Xojo mal angeschaut?

    Du brauchst da MouseDown und MouseDrag in einem Canvas um die Koordinaten mit zu bekommen.
    Dazu dann noch etwas Code, der sich die merkt und dann im Paint event neu malt.

  3. Michael E

    Apr 22 Answer Europe (Deutschland, Heggen)

    In dem Paint-Event eines Canvas-Controls kann man mit

    g.DrawLine 0,0,g.Width, g.Height

    eine Linie zeichnen. Das Beispiel erzeugt eine Linie von links oben nach rechts unten.

  4. Markus R

    Apr 22 Testers, Xojo Pro Europe / Germany / Lower Saxon...
    Edited 6 weeks ago

    Nutze ein Property vom Type Point und speichere den Anfang und das Ende im Ereignis.
    Dann Canvas1.invalidate und es will sich neu malen wo du dann die position ein setzt.

    Playlist, schaust Du bei 10. Canvas.
    youtube

  5. Andreas A

    Apr 22 Testers, Xojo Pro

    @Michael E In dem Paint-Event eines Canvas-Controls kann man mit

    g.DrawLine 0,0,g.Width, g.Height

    eine Linie zeichnen. Das Beispiel erzeugt eine Linie von links oben nach rechts unten.

    Hab leider versehentlich den " This answers my question" gedrückt.

    Das mit dem DrLine im Oaint verstehe ich ja soweit.

    Aber wie verbinde ich das mit Dem MouseDown?

    Ich möchte ja, dass eine neue Linie gezeichnetb wird, wenn man die Maus klickt.

    Wann wird das Paint Event denn normalerwise ausgeführt?

    Danke!

  6. Beatrix W

    Apr 22 Testers, Third Party Store Europe (Germany)
    Edited 6 weeks ago

    Nein, das Paint-Event wird dann nicht ausgeführt.

    Füge eine Property "Malen" als Boolean zum Fenster hinzu.
    Im Button machst Du:

    Malen = true
    Canvas1.invalidate

    Im Paint-Event machst Du:

    if not Malen then return
    g.DrawLine 0,0,g.Width, g.Height

    Das macht eine Linie.

  7. Andreas A

    Apr 23 Testers, Xojo Pro

    @Beatrix W Nein, das Paint-Event wird dann nicht ausgeführt.

    Füge eine Property "Malen" als Boolean zum Fenster hinzu.
    Im Button machst Du:

    Malen = true
    Canvas1.invalidate

    Im Paint-Event machst Du:

    if not Malen then return
    g.DrawLine 0,0,g.Width, g.Height

    Das macht eine Linie.

    Achso! Das heißt ich fodere das Canvis durch "invalidtae" daz auf, das paint Event auszuführen.

    Ich versuch mal!

    Danke!

    Gruß
    Leffe

  8. Markus R

    Apr 23 Testers, Xojo Pro Europe / Germany / Lower Saxon...
    Edited 6 weeks ago

    jo invalidate heißt es ist ungültig und es möchte sich neu malen.
    bei MouseDrag mußt Du beachten das dieses Event sehr oft kommt daher sollte man die alte und neue Maus Position vergleichen
    bevor man auf der Stelle unnötig was neu zeichnet.

  9. 5 weeks ago

    Andreas A

    Apr 24 Testers, Xojo Pro

    Dann noch ne Frage:

    Beim Aufruf des Paint Objektes wird der Canvis aber nicht jedes mal "geleert" und man muss alles neu "zeichnen",
    was schon drin ist, sondern man added sozusagen Objekte mit neuen Draw Anweisungen?

    Gruß
    Leffe

  10. Beatrix W

    Apr 24 Testers, Third Party Store Europe (Germany)

    Wenn Du kein ClearRect machst, dann wird einfach drüber gemalt.

  11. Markus R

    Apr 24 Testers, Xojo Pro Europe / Germany / Lower Saxon...
    Edited 5 weeks ago

    Theoretisch abhängig vom Parameter eraseBackground in Invalidate.
    Dieses Canvas hat aber keinen permanenten Speicher.

or Sign Up to reply!