![]() |
Koordinatensystem zeichnen und......
Hi,
Also ich soll für meinen Lehrer ein Koordinatensystem auf Knopfdruck zeichnen lassen und anschließend soll es möglich sein durch eingabe des x und y wertes in 2 edit felder einen punkt in das koo. zu zeichen. Wer kann mir helfen??? Mfg. Bufu_Druese |
Re: Koordinatensystem zeichnen und......
ich würde es auf den Canvas einer TImgae Komponente zeichnen.
|
Re: Koordinatensystem zeichnen und......
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
hier ein kleines Quick & Dirty Beispiel. Dürfte für die Schule reichen. |
Re: Koordinatensystem zeichnen und......
Zitat:
Ein Beispiel(neuer 0 Punkt bei 100,100): Also eine Paintbox nehmen und breite und höhe auf 200 setzen Achensen zeichen:
Delphi-Quellcode:
Die Koordinaten umrechnen dürfte auch nicht das Problem sein.
Paintbox1.canvas.moveto(100,10);
Paintbox1.canvas.lineto(100,80); Paintbox1.canvas.moveto(10,100); Paintbox1.canvas.moveto(80,100); z.B.: ein Punkt 10,10 soll eingezeichnet werden.
Delphi-Quellcode:
So jetzt nur noch etwas "sexier" machen.(x,y und die Zahlen mit canvas.textout)
Paintbox1.canvas.pixels[100+10,100+10] := clred;
mfg |
Re: Koordinatensystem zeichnen und......
Danke für das Programm, hast du das auch mit 4 quadranten statt nur einem??
Mfg. |
Re: Koordinatensystem zeichnen und......
Manmal hilft es wenn man sich eine Anleitung(wie z.B. meine oben) durchliest und dan das Programm selber programmiert!
Wozu programmierst du sonst wenn du eh nur fertige Programme willst? Ich hab das Programm von oben mal überflogen und ich denke es ist schwerer das zu verstehen als selber ein neues zu schreiben. |
Re: Koordinatensystem zeichnen und......
Hallo,
hier ein bisschen Kommentar
Delphi-Quellcode:
Die Erweiterung auf 4 Quadranten musst Du schon selber machen
const
idYFromBottom = 4; // Abstand von der Unterkante der TPaintBox idYFromTop = 4; // Abstand von der Oberkante der TPaintBox idXFromLeft = 4; // Abstand von der linken Kante der TPaintBox idXFromRight = 4; // Abstand von der rechten Kante der TPaintBox iTicksCount = 10; // Anzahl er Teilstriche iTicksLen = 4; // Länge eines Teilstriches {$R *.DFM} { TForm1 } procedure TForm1.PaintCoord; var orgX : Integer; // Ursprung X orgY : Integer; // Ursprung Y iXcnt : Integer; // Zähler iYcnt : Integer; // Zähler Tick : Integer; // Max Werte der X- oer Y-Achse (für die Beschriftung) XAxisLen : Integer; // Länge der X-Achse YAxisLen : Integer; // Länge das Y-Achse; XPoint : Integer; // X-Koordinate des Punkte, der gezeichnet werden soll YPoint : Integer; // Y-Koordinate des Punktes, der gezeichnet werden soll TickCount : Integer; // Anzahl der Teilstriche, die gezeichnet wurden begin With PBCoord.Canvas do begin // Alles löschen Brush.Color:=clBtnFace; FillRect(PBCoord.ClientRect); // Zeichne Koordinatensystem // Berechne die Ursprungskoordinaten des Koordinatensystems (das ist er Punkt(0|0) ) // orgX:=Abstand von der linken Kante + Textbreite des Max-YWertes * 100 // Max-YWertes * 100 damit genügend Platz für die Nachkommastelle ist orgX:=idXFromLeft+TextWidth(IntToStr(spedtMaxY.Value*100)); // orgY:=Unterkante der PaintBox-Abstand von der Unterkante - Texthöhe des Max-XWertes orgY:=PBCoord.ClientHeight-idYFromBottom-TextHeight(IntToStr(spedtMaxX.Value))-iTicksLen; // Die Achslängen werden gebraucht, um die Teilstriche zu zeichnen um aus den Punktkoordinaten die // Pixelkoordinaten zu berechnen YAxisLen:=orgY-idYFromTop; // Berechne Länge der Y-Achse XAxisLen:=(PBCoord.ClientWidth-idXFromRight)-orgX; // Berechne Länge der Y-Achse // Setze die Stifteigenschaften Pen.Width:=1; Pen.Color:=clBlack; Pen.Style:=psSolid; // Zeichne die Linien MoveTo(orgX,orgY); LineTo(orgX,idYFromTop); MoveTo(orgX,orgY); LineTo(PBCoord.ClientWidth-idXFromRight,orgY); // Zeichne die Teilstriche auf der X-Achse Tick:=spedtMaxX.Value; // Tick erhält den Max-XWert TickCount:=1; For iXcnt:=1 to XAxisLen do // Schleifen beginnt bei 1, weil die Teilstriche für die 0 nicht gezeichnet werden sollen If iXcnt mod (XAxisLen div iTicksCount) =0 then // Wenn mod den Rest 0 ergibt soll ein Teilstrich gezeichnet werden begin MoveTo(orgX+iXcnt,orgY); // Setze Stift LineTo(orgX+iXcnt,orgY+iTicksLen); // Zeichne Linie // X-Pixelkoordinate für die Achsenbeschriftung // orgX+iXcnt-TextWidth(FloatToStr(Tick / iTicksCount * TickCount)) div 2 // Ursprung+Zähler iXcnt - der halben Textbreite der Teilstrichbeschriftung // Mit Tick / iTicksCount * TickCount errechnet sich die Beschriftung des Teilstriches TextOut(orgX+iXcnt-TextWidth(FloatToStr(Tick / iTicksCount * TickCount)) div 2,orgY+iTicksLen+1,FloatToStr(Tick / iTicksCount * TickCount)); Inc(TickCount); // Anzahl der gezeichneten Teilstriche um 1 erhöhen end; // Beschreibung für Y-Achse siehe X-Achse Tick:=spedtMaxY.Value; TickCount:=1; For iYcnt:=1 to YAxisLen do If iYcnt mod (YAxisLen div iTicksCount) =0 then begin MoveTo(orgX,orgY-iYcnt); LineTo(orgX-iTicksLen,orgY-iYcnt); TextOut(orgX-iTicksLen-TextWidth(FloatToStr(Tick / iTicksCount * TickCount))-1,orgY-iYcnt-TextHeight(IntToStr(Tick)) div 2,FloatToStr(Tick / iTicksCount * TickCount)); Inc(TickCount); end; // Setze Punkt // Mit Round(XAxisLen/spedtMaxX.Value)*spedtPointX.Value wir die X-Koordinate des Punktes in Pixelkoordinaten auf der Canvas umgerechnet XPoint:=orgX+Round(XAxisLen/spedtMaxX.Value)*spedtPointX.Value; // Mit Round(YAxisLen/spedtMaxY.Value)*spedtPointY.Value wir die Y-Koordinate des Punktes in Pixelkoordinaten auf der Canvas umgerechnet YPoint:=orgY-Round(YAxisLen/spedtMaxY.Value)*spedtPointY.Value; Brush.Color:=clRed; Ellipse(XPoint-4,YPoint-4,XPoint+4,YPoint+4); end; // With PBCoord.Canvas do end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 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