Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Koordinatensystem zeichnen und...... (https://www.delphipraxis.net/9330-koordinatensystem-zeichnen-und.html)

Bufu_Druese 24. Sep 2003 10:50


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

Dagon 24. Sep 2003 11:16

Re: Koordinatensystem zeichnen und......
 
ich würde es auf den Canvas einer TImgae Komponente zeichnen.

Jens Schumann 24. Sep 2003 13:28

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.

Gandalfus 24. Sep 2003 15:30

Re: Koordinatensystem zeichnen und......
 
Zitat:

Zitat von the_master
ich würde es auf den Canvas einer TImgae Komponente zeichnen.

eine Paintbox ist doch wohl besser.

Ein Beispiel(neuer 0 Punkt bei 100,100):
Also eine Paintbox nehmen und breite und höhe auf 200 setzen

Achensen zeichen:
Delphi-Quellcode:
Paintbox1.canvas.moveto(100,10);
Paintbox1.canvas.lineto(100,80);
Paintbox1.canvas.moveto(10,100);
Paintbox1.canvas.moveto(80,100);
Die Koordinaten umrechnen dürfte auch nicht das Problem sein.
z.B.: ein Punkt 10,10 soll eingezeichnet werden.
Delphi-Quellcode:
Paintbox1.canvas.pixels[100+10,100+10] := clred;
So jetzt nur noch etwas "sexier" machen.(x,y und die Zahlen mit canvas.textout)

mfg

Bufu_Druese 24. Sep 2003 15:51

Re: Koordinatensystem zeichnen und......
 
Danke für das Programm, hast du das auch mit 4 quadranten statt nur einem??

Mfg.

Gandalfus 24. Sep 2003 17:17

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.

Jens Schumann 24. Sep 2003 19:23

Re: Koordinatensystem zeichnen und......
 
Hallo,
hier ein bisschen Kommentar
Delphi-Quellcode:
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;
Die Erweiterung auf 4 Quadranten musst Du schon selber machen


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz