![]() |
Rechtecke und Probleme =(
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Ich habe da ein Problem beim auslesen der Punkte von einem Rechteck. Wenn ich ein oder mehrere Rechtecke per Randomize erstelle.. Und mir die lage der/des Punktes, und die Lage von wight und height ausgeben lasse passiert folgendes: Das Rechteck wird mal von oben-links nach rechts-unten "aufgezogen" und mal von rechts-unten nach oben-links...usw. Folge: Ist ne ziemlich dumme Sache wenn man die Punkte zu weiteren Rechnungen brauch. Ich habe euch mal den Quellcode gepostet. Und des weiteren die Projekt.exe. Ich hoffe ihr schaut euch das ganze mal an. Und noch eins, falls ihr euch die Projekt.exe anschaut. Gebt eine 1 bei der Eingabe ein und klickt so oft auf rechteck erstellen... bis das Problem anhand der Werte sichtbar wird. Danke an alle die versuchen werden mir zu helfen !
Delphi-Quellcode:
[edit=Admin]BBCodes aktiviert. Mfg, Daniel[/edit]
var
Form1: TForm1; a1,a2,a,aa,x2,y2:integer; implementation {$R *.dfm} procedure zeichneRechteck(canv: Tcanvas; x1, y1,x2,y2: integer; farbeRand:Tcolor); const dicke = 3; begin with canv do Begin Pen.Width := dicke; Pen.Color := farbeRand; Brush.Style := bssolid; Pen.Mode:=pmNotXor; x1:=random(200); y1:=x1; x2:=random(200); y2:=x2 div 2; Rectangle (x1 -dicke, y1-dicke, x2-dicke, y2 - dicke); a:=x1; aa:=y1; a1:=x2; a2:=y2; End end; procedure TForm1.Button1Click(Sender: TObject); var w, h,w2,i,n:integer; begin randomize; n:=strtoint(form1.Edit1.text); sg1.ColCount :=2; sg1.RowCount :=n+1; for i:=1 to n do begin with image1 do begin zeichneRechteck(image1.canvas,a, aa, a1,a2,clgray); label1.Caption:= inttostr(a)+(',')+inttostr(aa)+(',')+inttostr(a1)+(',')+inttostr(a2); end; sg1.Cells[0,i]:=inttostr(a)+(',')+inttostr(aa); sg1.Cells[1,i]:=inttostr(a1+a)+(',')+inttostr(a2+aa); end; end; end. |
Re: Rechtecke und Probleme =(
Zitat:
Du hast zwei X-Koordinaten und zwei Y-Koordinaten.
Delphi-Quellcode:
procedure SwapInteger(var a, b : Integer); // Hilfsfunktion
var t : Integer; begin t := a; a := b; b := t; end; ..... x1:=random(200); y1:=x1; x2:=random(200); y2:=x2 div 2; if x1 > x2 then SwapInteger(x1, x2); // Tausche X-Koordinaten if y2 > y1 then SwapInteger(y1, y2); |
Re: Rechtecke und Probleme =(
Hm..
Also ich habe dein Vorschlag übernommen jedoch stimmen die Werte immernoch nicht überrein...Nun haut er irgendwie die Werte durcheinander...glaub ich jedenfalls auf die schnelle Also ich möchte immer den linken oberen Punkt und den rechten unteren Punkt ausgegeben haben. Egal für welches Rechteck Oder eben den rechten oberen Punkt und den linken unteren.. Nach deiner Lösung würde das ganze nun wie folgt aussehen:
Delphi-Quellcode:
var
Form1: TForm1; a1,a2,a,aa,x2,y2:integer; implementation {$R *.dfm} procedure SwapInteger(var a, b : Integer); // Hilfsfunktion var t : Integer; begin t := a; a := b; b := t; end; procedure zeichneRechteck(canv: Tcanvas; x1, y1,x2,y2: integer; farbeRand:Tcolor); const dicke = 3; begin with canv do Begin Pen.Width := dicke; Pen.Color := farbeRand; Brush.Style := bssolid; Pen.Mode:=pmNotXor; x1:=random(200); y1:=x1; x2:=random(200); y2:=x2 div 2; if x1 > x2 then SwapInteger(x1, x2); // Tausche X-Koordinaten if y2 > y1 then SwapInteger(y1, y2); Rectangle (x1 -dicke, y1-dicke, x2-dicke, y2 - dicke); a:=x1; aa:=y1; a1:=x2; a2:=y2; End end; procedure TForm1.Button1Click(Sender: TObject); var w, h,w2,i,n:integer; begin randomize; n:=strtoint(form1.Edit1.text); sg1.ColCount :=2; sg1.RowCount :=n+1; for i:=1 to n do begin with image1 do begin zeichneRechteck(image1.canvas,a, aa, a1,a2,clgray); label1.Caption:= inttostr(a)+(',')+inttostr(aa)+(',')+inttostr(a1)+(',')+inttostr(a2); end; sg1.Cells[0,i]:=inttostr(a)+(',')+inttostr(aa); sg1.Cells[1,i]:=inttostr(a1+a)+(',')+inttostr(a2+aa); end; end; end. |
Re: Rechtecke und Probleme =(
Mal kurz OT: Formatier mal den unteren Teil des Codes, denn der is echt :kotz:
Noch ein kleiner Tipp:
Delphi-Quellcode:
Schau dir mal den Format-befehl an
statt dem ganzen IntToStr(...) + ',' + ...
Delphi-Quellcode:
ann wird der Code auch mal etwas sauberer...
Format('%d, %d, %d, %d', [a, aa, al, a2]);
|
Re: Rechtecke und Probleme =(
Danke ;)
Hab ich gemacht....sieht besser und übersichtlicher aus nur man kann sowas auch nur machen wenn man es kennt...und ich kannte es nicht. <-- Unwissender Und nun zurück zum Thema =/.. |
Re: Rechtecke und Probleme =(
Also der code sieht nun so aus:
Und ich möchte das er ein Rechteck immer von oben links nach unten rechts zieht
Delphi-Quellcode:
var
Form1: TForm1; a1,a2,a,aa,x2,y2:integer; implementation {$R *.dfm} procedure zeichneRechteck(canv: Tcanvas; x1, y1,x2,y2: integer; farbeRand:Tcolor); const dicke = 3; begin with canv do Begin Pen.Width := dicke; Pen.Color := farbeRand; Brush.Style := bssolid; Pen.Mode:=pmNotXor; x1:=random(200); y1:=x1; x2:=random(200); y2:=x2 div 2; Rectangle (x1 -dicke, y1-dicke, x2-dicke, y2 - dicke); a:=x1; aa:=y1; a1:=x2; a2:=y2; End end; procedure TForm1.Button1Click(Sender: TObject); var w, h,w2,i,n:integer; begin randomize; n:=strtoint(form1.Edit1.text); sg1.ColCount :=2; sg1.RowCount :=n+1; for i:=1 to n do begin with image1 do begin zeichneRechteck(image1.canvas,a, aa, a1,a2,clgray); label1.Caption:= Format('%d, %d, %d, %d', [a, aa, a1, a2]); end; sg1.Cells[0,i]:=inttostr(a)+(',')+inttostr(aa); sg1.Cells[1,i]:=inttostr(a1+a)+(',')+inttostr(a2+aa); end; end; end. |
Re: Rechtecke und Probleme =(
Moin!
Wenn du das TRect erstellt hast, dann einmal damit diese Funktion aufrufen:
Delphi-Quellcode:
MfG
Function CorrectRect(Const ARect : TRect): TRect;
Begin Result.Top := Min(ARect.Top, ARect.Bottom); Result.Bottom := Max(ARect.Top, ARect.Bottom); Result.Left := Min(ARect.Left, ARect.Right); Result.Right := Max(ARect.Left, ARect.Right); End; Muetze1 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 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