Am 30.05.2005 um 20:21 schrieb Norbert Kraemer:
Hallo,
ich möchte eine Linie zeichnen und anschließend irgendwie
verschieben können.
Dazu habe ich in mein Fenster ein Canvas und einen Slider eingebaut
und in den ValueChanged-Event des Sliders folgendes geschrieben:
canvas1.graphics.drawline(10,me.value,200,me.value)
Die Linie wird bloß nicht verschoben, sondern immer eine neue
gezeichnet.
So einfach geht das nicht, du musst die Linie an der alten Postion
zuerst löschen und dann eine neue an der neuen Position zeichen.
Am einfachsten geht das, wenn du dir eine eigene Klasse von Typ
Canvas erstellst. Dann kannst du in dieser Klasse über vier Propertys
die Linie definieren, speichern an welcher Position sie ist.
Im Paintevent der Klasse schreibst du jetzt folgenden code:
'Alles löschen:
g.clearRect(0,0,g.width,g.height)
'Linie neu zeichen:
g.drawLine(x1,y1,x2,y2)
Wenn du die Linie verschieben willst, veränderst du die x1 oder y1
und y2 werte und rufst dann die Refresh Methode deines Canves aus:
meinCanvas.refresh
Zusatzfrage: Kann man die Linie auch mit der Maus draggen, wie das
in einem objektorientierten Zeichenprogramm möglich ist?
Das geht auch, dazu musst du im MouseDown Event der Klasse eine
"Kollisionsabfrage" machen, der Event übergibt dir die X und Y
Koordinaten wo man mit der Maus geklickt hat, jetzt musst du
vergleichen ob mit der Maus auf deine Linie geklickt wurde.
Um das ganze zu dragen musst du dann im MouseDown event true
zurückgeben und mit dem MouseDrag Event arbeiten
Beim return true bin ich mir jetzt nicht 100% sicher aber das sollte
auch in der online Hilfe von RB stehen.
Ich hoffe das war so weit verständlich, der Code hier ist nur
Beispielcode und er ist nicht besonders Geschwindigkeitsoptimiert
(und unter Windows wird das ganze noch Flackern).
gruss V
|