Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Polygon verschieben??? (https://www.delphipraxis.net/36427-polygon-verschieben.html)

unwissend 19. Dez 2004 20:29


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.

malo 19. Dez 2004 20:31

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!

unwissend 19. Dez 2004 20:40

Re: Polygon verschieben???
 
Ich hoffe das hilft dir weiter. hab davon nämlich nicht viele ahnung. :pale:

Nikolas 19. Dez 2004 20:46

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 Delphi-Referenz durchsuchendrawpolygon an. Damit kannst du recht einfach mehrere Punkte verbinden lassen. Um dann dein Polygon zu verschieben, reicht es einfach, wenn du in einer Schleife von den Koordinaten jedes Punktes, die Koordinaten des Punktes abziehst, der nachher im Origo liegen soll.

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'

Ultimator 19. Dez 2004 20:46

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.

supermuckl 19. Dez 2004 20:47

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

supermuckl 19. Dez 2004 20:48

Re: Polygon verschieben???
 
ja oder wie es ulti sagt.. aber das geht nur, wenn der hintergrund nicht irgend ein bild war oderso

unwissend 19. Dez 2004 20:53

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?

Nikolas 19. Dez 2004 20:57

Re: Polygon verschieben???
 
Zitat:

geht das überhaupt?
Mit Delphi fast geht alles.

Mach doch eine Schleife über alle PunktKoordinaten und lass dir den kleinsten ausgeben, etwa so:
Delphi-Quellcode:
min:= ertserPunkt.xkoordinate
for i:= 0 to AnzahlDerPunkte do
  if iterPunk.xKoordinate < min then
      begin
      min:=iterPunk.xKoordinate
      PunktMitKleinsterKoordinate:= i;
      end;
Was willst du wie in welche Länge umrechnen???

unwissend 19. Dez 2004 21:03

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:

Nikolas 19. Dez 2004 21:07

Re: Polygon verschieben???
 
??? Wenn du den kleinsten x Wert hast, hast du doch gleichzeitig auch den Zahlenwert um den du alle Punkte verschieben muss.
Nimm einfach diesen Wert, zieh in von allen Punkten ab und schau dir mal das Ergebniss an.

unwissend 19. Dez 2004 21:10

Re: Polygon verschieben???
 
Da steht dann aber immer boolean und integer stimmen nicht überein! was soll das denn schon wieder sein?

Nikolas 19. Dez 2004 21:12

Re: Polygon verschieben???
 
Frag im Wahrsager-Forum :roll:

Für welche Zeile wird denn der Fehler angezeigt?

Ps: Welcher Joghurt? Ich hoffe es ist wenigstens Ananas.

supermuckl 19. Dez 2004 21:13

Re: Polygon verschieben???
 
[OT]
Toxman: Die Macht des Joghurts wird mit dir sein ;)
[/OT]

unwissend 19. Dez 2004 21:20

Re: Polygon verschieben???
 
procedure TForm1.ten1Click(Sender: TObject);
var v:integer;
begin
min:= ertserPunkt.xkoordinate
for i:= 0 to AnzahlDerPunkte do
if iterPunk.xKoordinate < min then
begin
min:=iterPunk.xKoordinate
:= i;
end;
image1.Canvas.MoveTo(xp[n-1]-PunktMitKleinsterKoordinate,yp[n-1]);
image1.Canvas.LineTo(xp[n],yp[n]);
end;

hinter deiner Punktmitkleinsterkordinate. (Hab sie natürlich umbenannt in v) nur hier so gelassen damit du siehst wie ich mir das gedacht hab

Nikolas 19. Dez 2004 21:32

Re: Polygon verschieben???
 
?? Ich versteh nicht ganz, was der Code soll. [Formatier in am besten mal mit den [ delphi]-Tags]

Beschreib doch mal kurz, wie du deine Punkte speicherst. So sieht das etwas wir aus.
Für was für einen Beleg brauchst du das Programm?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:37 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