![]() |
Verschiebung eines Graphen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
wenn der Graph den Fensterrand erreicht, soll er verschoben werden, damit man die aktuellen Werte noch sehen kann.
Delphi-Quellcode:
In dem Code wird erstmal mit MoveTo Punkt1 festgelegt und mit LineTo die nötige Verbindungslinie zu Punkt2 gezeichnet. GrpX ist der aktuelle X-Wert, GrpY der aktuelle Y-Wert. Also wird GrpX immer um 20 erhöht und auf der Basis des neuen GrpX wieder der nächste Schritt berechnet. Um es zu vereinfachen habe ich die Berechnung von GrpY in dem Codeausschnitt weggelassen.
GrpDX := 0;
... with Grp.Canvas do // Grp = Graph = TBitmap begin MoveTo(GrpX , GrpY); LineTo(GrpX+20, ...)); GrpX := GrpX+20; GrpY := ...; if GrpX > frmMain.Width then GrpDX := GrpDX-20; end; Canvas.Draw(GrpDX, 16, Grp); Nun wird mit der If geschaut, ob der nächste X-Wert schon zu weit draußen liegt. Wenn ja, wird GrpDX um 20 verkleinert. GrpDX ist der X-Wert welcher von Canvas.Draw genutzt wird um das Bitmap Grp zu zeichnen. Ich will also einfach Grp weiter links zeichnen um rechts mehr Platz zu erhalten. Dies funktioniert nicht. Es wiederholt sich sobald der Graph den Fensterrand erreicht hat der Graph immer wieder. Der rote Kasten auf dem Screenshot markiert den sich ständig wiederholenden Bereich. Mein Fehler muss ein ganz simpler sein. Seht ihr ihn ? |
Re: Verschiebung eines Graphen
Hallo,
wen ich es richtig sehe rechnest du erst
Delphi-Quellcode:
und dann kurz danach wieder
GrpX := GrpX+20;
Delphi-Quellcode:
wenn Dx > Breite des Formulars ist. Ist es nicht normalerweise so, dass sich die gessamte Linie nach links bewegen muss, wenn GrpDX den Rand des Formulars überschreitet.
GrpDX := GrpDX-20;
Müsste mann dafür nicht eher eine Liste mit allen Punkten die sich auf dem Graph befinden nehmen. Oder man kopiert ein Teil des Bildes und verschiebt ihn nach links und hängt hinten den nächsten Wert an. Man könnte ansonsten dafür auch die Komponente TChart nehmen. |
Re: Verschiebung eines Graphen
GrpDX ist die Position des Bitmaps. Die erreicht bei einem nach rechts laufenden Graphen den rechten Fensterrand niemals. GrpX ist der X-Wert, welcher den Fensterrand erreichen kann. Ein Graph wird ja immer weiter nach rechts gezeichnet und der X-Wert muss dementsprechend erhöht werden. GrpX wird immer weiter erhöht. Das heißt ich kann den Graphen verschieben wie ich will, der Graph wird außerhalb des Fensters weitergezeichnet und ist deshalb nicht sichtbar.
Delphi-Quellcode:
Lustigerweise ändert das nichts: Der Graph wiederholt sich am Ende nur noch. Die Wiederholung ist eine andere Geschichte, welche ich erst später lösen möchte. In Wirklichkeit wird der Graph nur an der falschen Position gezeichnet, bloß die Frage warum. Ich hoffe ich konnte es nun noch mal besser erklären, wenn nicht einfach schreien.
Flag := True;
... with Grp.Canvas do begin MoveTo(GrpX , GrpY); LineTo(GrpX+20, 62-Round((62/100)*cpu)); if Flag then GrpX := GrpX+20; GrpY := 62-Round((62/100)*cpu); end; Canvas.Draw(0, 0 , Bmp); if GrpX > frmMain.Width then begin Flag := False; GrpDX := GrpDX-20; end; Canvas.Draw(GrpDX, 16, Grp); |
Re: Verschiebung eines Graphen
Liste der Anhänge anzeigen (Anzahl: 1)
Unter einen Graph verstehe ich eher sowas, wie in meiner Demo.
So wie du das machst, müsste IMHO dein Bitmap doch immer breiter werden. |
Re: Verschiebung eines Graphen
Das Ergebnis sieht schonmal gut aus, aber werde mir den Code natürlich nochmal genauer anschauen, denn das Verständnis ist wichtiger. Danke :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 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