Entwickler-Ecke
Multimedia / Grafik - Freihandzeichnen: Linien, statt einzelne Punkte zeichnen
fusco123 - Sa 01.12.07 16:14
Titel: Freihandzeichnen: Linien, statt einzelne Punkte zeichnen
Hey Leutz,
bin neu hier am Bord.
Hab vor kurzem angefangen mich mit Delphi zu beschäftigen und nen kleines Programm geschrieben mit dem man malen kann.
Hab damit auch schon nen Problem: Wenn man die Maus zu schnell zieht, erscheinen nur einzelne Ellipsen statt eine Linie, wenn man die Maus langsam zieht, dann nicht, wißt ihr ne Möglichkeit das zu verhinden ?
Vielen Dank für eure Beiträge, fusco
Moderiert von
Gausi: Topic aus Freeware Projekte verschoben am Sa 08.12.2007 um 18:52
Moderiert von
Christian S.: Topic aus VCL (Visual Component Library) verschoben am Sa 08.12.2007 um 18:52
Moderiert von
Narses: Titel nach erfolgloser Ermahnung angepasst am Di 11.12.2007 um 23:07
Timosch - Sa 01.12.07 16:28
Wie wärs mit dem Quelltext? Die compilierte Exe hilft uns nicht weiter.
Ach ja: :welcome: in der EE.
fusco123 - Di 04.12.07 17:19
Hat keiner ne Idee bezüglich des "schnellen Ziehens" ???
fusco
golgol - Mi 05.12.07 09:20
fusco123 hat folgendes geschrieben: |
Hat keiner ne Idee bezüglich des "schnellen Ziehens" ???
fusco |
Eine gute Möglichkeit sowas zu verhindern ist, dass du beim Freihandzeichnen nicht einzelne Punkte setzt, sondern immer eine Gerade zwischen den beiden letzten Koordinaten zeichnest. Auf diese Weise können keine Lücken entstehen. Wenn du dann zusätzlich an den Endpunkten einen entsprechenden Kreis zeichnest, fällt der Unterschied nicht auf.
fusco123 - Sa 08.12.07 18:58
@golgol
danke für den tipp. Nur leider bringt mir das nichts. Weil, wenn man die Maus ohne zu drücken weiterzieht und dann drückt geht automatisch ne Linie zu dem letzten Punkt.
Wenn man es aber mit lineto () UND moveto() macht, ist wieder genu das problem wie vorher da, also mit den einzelnen punkten.
fusco
Christian S. - Sa 08.12.07 19:53
Hallo!
Bitte ändere den Titel so, dass man weiß, was Deine Frage ist. Danke! :-)
Grüße
Christian
Atreyu - Sa 08.12.07 20:29
fusco123 hat folgendes geschrieben: |
@golgol
danke für den tipp. Nur leider bringt mir das nichts. Weil, wenn man die Maus ohne zu drücken weiterzieht und dann drückt geht automatisch ne Linie zu dem letzten Punkt.
Wenn man es aber mit lineto () UND moveto() macht, ist wieder genu das problem wie vorher da, also mit den einzelnen punkten.
fusco |
Du arbeitest doch mit MouseDown. Dann könntest du mit MouseUp die letzte Koordinate löschen, sodass sie beim erneuten MouseDown neu gespeichert wird.
Zorro - Di 11.12.07 23:25
fusco123 hat folgendes geschrieben: |
@golgol
danke für den tipp. Nur leider bringt mir das nichts. Weil, wenn man die Maus ohne zu drücken weiterzieht und dann drückt geht automatisch ne Linie zu dem letzten Punkt.
Wenn man es aber mit lineto () UND moveto() macht, ist wieder genu das problem wie vorher da, also mit den einzelnen punkten.
fusco |
Dann solltest du ENTWEDER lineto ODER moveto verwenden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| var unten : boolean;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin unten := True; end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin unten := False; end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if unten then canvas.lineto(x,y) else canvas.moveto(x,y);
end; |
ist ein voll funktionierendes Kritzelproggi.
Greetz
Zorro
Tante Edith sagte: Mach die Delphi-Tags rein. ok
fusco123 - Mi 12.12.07 18:19
hmm irgendwie versteht mein problem keiner, hab jetzt den Quelltext von zorro in meine proggi überschrieben und es geht trotzdem nicht, also die linie ist durchgehend, knüpft aber an den letzten Punkt an.
Weshalb ist da eigentlich keine durchgehende Linie, liegt dass daran dass das Programm mit den funktionen nicht so schnell arbeiten kann oder warum?
Könnte vllt jemand wenn er es geschaft hat, den quelltext von meinem programm so zu ändern dass geht, den gesamten quelltext hier posten ????
vielen danke für eure mühen fusco
P.S.: hab noch gar nicht gefragt wie ich findet ihr eig. mein Programmm so ?
Biergeneral - Mi 12.12.07 22:53
Warum der nur hin und wieder was malt ist eigentlich ganz einfach nachzuvollziehen.
Jedesmal wenn du die Maus bewegst, wird ne Nachricht von an das Fenster geschickt.
Die Nachricht beschreibt allerdings nicht die Bewegung, sondern nur die neue Position.
Bewegst du die Maus schnell, steht in der Nachricht nur drin " Jo, ich bin jetzt bei x=200, y=200"
Und genau da malt der die Ellipse jetzt auch hin..
Das ganze kannst du allerdings sehr leicht umgehen..
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| procedure TForm13.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Checkbox1.Checked:=true; Image1.Canvas.MoveTo(X,Y); end;
procedure TForm13.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var xpos, ypos:Integer;
begin xpos:=X; ypos:=Y;
if (Checkbox1.checked=true) and (Checkbox2.Checked=False) and (Checkbox4.Checked=False) and (Checkbox5.Checked=False) and (Radiobutton1.checked=false) and (Radiobutton2.Checked=false) and (Radiobutton3.Checked=false) and (Radiobutton4.Checked=false) then begin Image1.Canvas.Pen.color:=RGB(0,255,0); Image1.Canvas.Brush.Color:=RGB(0,255,0); Image1.Canvas.Pen.Width := 10; Image1.Canvas.LineTo(xpos, ypos); end; |
fusco123 - Do 13.12.07 18:45
Jo danke, jetzt gehts ..
werde bald die aktualisierte Version hochladen, habe aber heute leider keine Zeit mehr dafür ...
fusco
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!