![]() |
Polygon verschieben???
Hallo Leute!
Groooooooooooooßes Problem! Ich muß unbedingt für einen Beleg ein Polygon erstellen und dieses ist auch noch so in x-Richtung zu verschieben, dass der punkt mit der kleinsten x-Koordinate auf der y-Achse liegt. Hab auch schon angefangen das Polygon zu zeichnen und zu schließen und zu löschen aber wie zum teufel kann ich das nur verschieben? ich hab keine Ahnung. Bitte bitte helft mir!!! bis jetzt bin ich so weit: var Form1: TForm1; xp,yp,xs,ys:array[0..100] of integer; ss,n: integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i : integer; begin for i := 1 to n do begin xp[i] := 0; yp[i] := 0; end; end; procedure TForm1.Beenden1Click(Sender: TObject); begin close; end; //Polygon erzeugen mit Mausklick procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if button=mbLeft then begin n:=n+1; xp[n]:=x; yp[n]:=y; image1.Canvas.Rectangle(x-1,y-1,x+1,y+1); image1.canvas.Ellipse(xp[1]-2,yp[1]-2,xp[1]+2,yp[1]+2); if n>1 then begin image1.Canvas.MoveTo(xp[n-1],yp[n-1]); image1.Canvas.LineTo(xp[n],yp[n]); if ssAlt in shift then image1.Canvas.LineTo(xp[1],yp[1]); end; end; end; //Polygon löschen, Koordinaten auf null setzen procedure TForm1.Lschen1Click(Sender: TObject); var i:integer; begin image1.canvas.Pen.color:=clwhite; image1.canvas.brush.color:=clwhite; image1.canvas.brush.Style:=bssolid; image1.canvas.rectangle(0,0,image1.width,image1.He ight); image1.canvas.pen.color:=clblack; n:=0; for i := 1 to n do begin xp[0] := 0; yp[0] := 0; end; end; // Polygon Schließen, zurück um Ursprung procedure TForm1.Polygonschlieen1Click(Sender: TObject); begin image1.Canvas.LineTo(xp[1],yp[1]); end; //Butten zum Befehl Verschieben (ohne Inhalt) procedure TForm1.ten1Click(Sender: TObject); var v:integer; begin end; end. Also bin über jede Idee glücklich. |
Re: Polygon verschieben???
Erstmal herzlich willkommen in der DP! :party:
Dann setze bitte mal die Tags, um den Quellcode zu verdeutlichen ;) Benutze dazu bitte den Edit-Button oben rechts! |
Re: Polygon verschieben???
Ich hoffe das hilft dir weiter. hab davon nämlich nicht viele ahnung. :pale:
|
Re: Polygon verschieben???
Poste doch bitte nur den interessanten Teil deines Codes. Die Deklarationen für dein Form sind doch eher nebensächlich. Schau dir mal die Funktion
![]() Ps: Zum Überzeichnen ist penmode pmxor sehr hilfreich. Da du mit diesem Stift die Hintergrundfarbe invertierst, kannst du einfach das Polygon doppelt zeichnen und schon ist es wieder weg. @ Ulimator: Doch eher 'Verschiebungsvektor' |
Re: Polygon verschieben???
Du musst dafür sorgen, dass das "alte" Polygon mit der Hintergrundfarbe "übermalt" wird, damit man es nicht mehr sieht, und es dann wieder ganz normal malen, halt mit den um den Verschiebungsfaktor vergrößerten/verkleinerten Koordinaten.
|
Re: Polygon verschieben???
tja
da du das polygon zeichnest, kannst du es auch nicht verschieben du müsstest, um es "verschieben zu können" das ganze bild neu zeichnen, mit den neuen koordinaten du musst also alles temporär speichern ( alle objekte und koodinaten und eigenschaften ) und die dann jedes mal neu auf dein image zeichnen, wenn sich etwas verändert |
Re: Polygon verschieben???
ja oder wie es ulti sagt.. aber das geht nur, wenn der hintergrund nicht irgend ein bild war oderso
|
Re: Polygon verschieben???
Mit dem speichern der Koordinaten hab ich mir auch überlegt, weiß aber nicht wie ich dem das verklickere das der die kleinste x- koordinate nimmt.Ich denke das ich diese x Koordinate ja irgendwie in eine Länge umrechnen muß und dann von allen kordinaten abziehen muß. Aber wie?? geht das überhaupt?
|
Re: Polygon verschieben???
Zitat:
Mach doch eine Schleife über alle PunktKoordinaten und lass dir den kleinsten ausgeben, etwa so:
Delphi-Quellcode:
Was willst du wie in welche Länge umrechnen???
min:= ertserPunkt.xkoordinate
for i:= 0 to AnzahlDerPunkte do if iterPunk.xKoordinate < min then begin min:=iterPunk.xKoordinate PunktMitKleinsterKoordinate:= i; end; |
Re: Polygon verschieben???
Ok. Super Idee. Wenn ich dann den kleinsen x-Wert habe, dann brauch ich doch diese entfernung von 0 zu kleinstem x-Wert um diesen dann von allen koordinaten abziehen zu können. Und da dachte ich ich muß diese entfernung von 0 zur x Koordinate wie eine Länge umrechnen um dann das abzuziehen. ich weiß doch auch nicht :cry:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz