Linie zeichnen

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?

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.

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.

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

[quote=485531:@Michael Eckert]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.[/quote]

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!

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.

[quote=485645:@Beatrix Willius]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.[/quote]

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

Ich versuch mal!

Danke!

Gruß
Leffe

jo invalidate heit es ist ungltig und es mchte sich neu malen.
bei MouseDrag mut Du beachten das dieses Event sehr oft kommt daher sollte man die alte und neue Maus Position vergleichen
bevor man auf der Stelle unntig was neu zeichnet.

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

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

Theoretisch abhngig vom Parameter eraseBackground in Invalidate.
Dieses Canvas hat aber keinen permanenten Speicher.