AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verschiebung eines Graphen

Ein Thema von Nils_13 · begonnen am 16. Mär 2008 · letzter Beitrag vom 17. Mär 2008
Antwort Antwort
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

Verschiebung eines Graphen

  Alt 16. Mär 2008, 18:59
Hi,

wenn der Graph den Fensterrand erreicht, soll er verschoben werden, damit man die aktuellen Werte noch sehen kann.
Delphi-Quellcode:
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);
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.
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 ?
Miniaturansicht angehängter Grafiken
graph_136.png  
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Verschiebung eines Graphen

  Alt 16. Mär 2008, 20:30
Hallo,

wen ich es richtig sehe rechnest du erst GrpX := GrpX+20; und dann kurz danach wieder GrpDX := GrpDX-20; 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.

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.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#3

Re: Verschiebung eines Graphen

  Alt 17. Mär 2008, 18:48
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:
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);
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.
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Verschiebung eines Graphen

  Alt 17. Mär 2008, 20:45
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.
Angehängte Dateien
Dateityp: zip graph_593.zip (6,0 KB, 11x aufgerufen)
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#5

Re: Verschiebung eines Graphen

  Alt 17. Mär 2008, 21:01
Das Ergebnis sieht schonmal gut aus, aber werde mir den Code natürlich nochmal genauer anschauen, denn das Verständnis ist wichtiger. Danke
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 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