Autor |
Beitrag |
fusco123
      
Beiträge: 40
|
Verfasst: Sa 01.12.07 16:14
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
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von fusco123 am Sa 15.12.07 17:38, insgesamt 2-mal bearbeitet
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: Sa 01.12.07 16:28
Wie wärs mit dem Quelltext? Die compilierte Exe hilft uns nicht weiter.
Ach ja:  in der EE.
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
fusco123 
      
Beiträge: 40
|
Verfasst: Di 04.12.07 17:19
Hat keiner ne Idee bezüglich des "schnellen Ziehens" ???
fusco
|
|
golgol
      
Beiträge: 58
Win XP Prof. / Linux
C# (VS 2005)
|
Verfasst: 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 
      
Beiträge: 40
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 08.12.07 19:53
Hallo!
Bitte ändere den Titel so, dass man weiß, was Deine Frage ist. Danke!
Grüße
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Atreyu
      
Beiträge: 137
Delphi 7 Enterprise
|
Verfasst: 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
      
Beiträge: 76
Win 2000, Win XP Pro
Delphi 7 Architect
|
Verfasst: 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 
      
Beiträge: 40
|
Verfasst: 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
      
Beiträge: 35
WIN XP
Delphi 7 Ent., Delphi 2007 Ent., C/C++ (Eclipse)
|
Verfasst: 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..
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 
      
Beiträge: 40
|
Verfasst: 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
|
|
fusco123 
      
Beiträge: 40
|
Verfasst: Sa 15.12.07 17:40
Hab jetzt dank eurer Hilfe, das Proggi verbessert und die neue Version hochgeladen.
fusco
P.S. für alle nicht registrierten User zum Downloaden unter: rapidshare.com/files.../bildschirmmalen.exe
|
|