Linie per Mouse verschieben
-
Hallo,
ich würde gerne eine auf ein Panel gezeichnete Linie mit der Mouse verschieben!
Diese ganze vorgehensweise würde ich gerne in einer Klasse verpacken.Für das Zeichnen habe ich z.B. die Methode drawLinie in der folgendes steht:
path->Reset(); path->AddLine(point_Anfang,point_Ende); grfx->DrawPath(pen, path);
Den GraphicsPath habe ich im Konstruktor erstellt
dann habe ich bisher noch eine Mehtode hitLinie, die feststellt ob der Mousezeiger die Linie trifft, oder nicht. Diese wird im mouseOver-Ereignis des Panels aufgerufen.
bool hitLinie(PointF point) { if(path->IsOutlineVisible(point.X,pointt.Y,pen)) { return (true); } else { return (false); } }
Wobei ich jetzt aber Probleme habe, ist die Mousedown, MouseOver und MouseUp Ereignisse unter einen Hut zu bekommen? Bis jetzt könnte ich die Linie per Mousedown verschieben, wenn ich der drawLinie Methode bei jedem Click die Position übergebe. Aber so solls nicht sein! Zum zeichnen der Linie benötige ich nur die x Koordianten, denn Sie läuft immer vertikal über das Panel!
Kennt heir jemand ein gutes Beispiel oder hat schon Erfahrung damit gesammelt??
Über Ideen bin ich auch sehr dankbar!VIELEN DANK
-
Du könntest mit einem Region arbeiten. Dieses hat ne Funktion Translate, mit der sich das Objekt nachträglich verschieben lässt. Schau mal auf MSDN nach!
-
Also dass versetzen der Linie sollte jetzt nicht das Hauptproblem sein, denn da muss ich ja eigentlich nur die Koordinaten der Mouseposition übergeben. Mir geht es eher darum, wie ich die Mouse-Events verwenden muss, damit ich die Linie nur verschieben kann, wenn sich die Mouse über der Linie befindet ich die Mousetaste betätige und solange die Linie verschieben kann bis ich die Taste wieder loslasse!Den ersten Fall habe ich ja eigentlich schon mit der hitLinie Methode abgedeckt, nur wie baue ich jetzt den Fall Mousdown und MouseUp ein ??? Etwa mit einer boolschen Variablen und if-Anweisungen, oder ...? Ich benötige doch auch irgendwie zwei Punkte, Postion alt und neu .. in der drawLinie-Methode???
-
Ich male eine Linie Mittels Maus. Du benötigst ein Variable Typ Boolean, die prüft, ob du dich gerade im "Verschiebemodus" befindest und du benötigst eine Variable Typ Point, wo du Bildschirmkoordinaten zwischenspeichern kannst.
Dann gehst du wie folgt vor.MouseDown:
Du prüfst, ob sich die Maus auf der Linie befindet. Wenn ja, setzt du deine Verschiebekontrolle auf true. Als nächstes speicherst du die Startposition deiner Linie in der Point-VariableMouseMove:
Du prüfst zuerst die Verschiebekontrolle. Wenn true, zeichnest du die Linie mit der gespeicherten Startposition neu. Damit verschwindet diese. Jetzt holst du dir die X-Position deines Mauszeigers und addierst diese auf die X-Position der gespeicherten Variable. Jetzt hast du deinen neuen Startpunkt. Jetzt zeichnest du die Linie mit dem neuen Startpunkt und speicherst diesen gleich wieder in der Point-Variable.MouseUp:
Ist der letzte Schritt. Wieder die Verschiebekontrolle prüfen. Wenn true, dann auf false setzen und fertig.Hoffe, geholfen zu haben.
Gruß
physici