AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Diagramm zeichnen...
Thema durchsuchen
Ansicht
Themen-Optionen

Diagramm zeichnen...

Ein Thema von EConvertError · begonnen am 10. Sep 2006 · letzter Beitrag vom 13. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#1

Diagramm zeichnen...

  Alt 10. Sep 2006, 20:16
Hallo!

Ich möchte ein Diagramm zeichnen, wie es der Taskmanager von Windows XP (Tab: Netzwerk) hat. Grundsätzlich habe ich an die Verwendung einer TPaintbox in Verbindung mit einem TBitmap im Hintergrund gedacht.
Wie schaffe ich es außerdem, dass sich das Diagramm immer nach links "verschiebt". Klar mit einem Timer, aber wie funktioniert das aus der Sicht der Grafikprogrammierung?
Und wie verändert man die Größe der Kurve, die man da reinzeichnet, wenn man den Maßstab verändern muss?

Vielen Dank,
Andreas
Andreas N.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Diagramm zeichnen...

  Alt 10. Sep 2006, 20:19
Schau dir mal TChart an.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Diagramm zeichnen...

  Alt 10. Sep 2006, 20:31
Was willst du denn Anzeigen? Messwerte oder Funktionen?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#4

Re: Diagramm zeichnen...

  Alt 10. Sep 2006, 20:36
Wenn du ein Beispiel brauchst bei den JEDI Komponenten ist in der Unit JvSimScope ein solche Komponente, kanst dir ja mal den Source angucken.
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#5

Re: Diagramm zeichnen...

  Alt 11. Sep 2006, 19:00
Vielen Dank für die Antworten!

Zitat:
Schau dir mal TChart an.
Ich wusste gar nicht, dass TChart so eine "Verschiebung" nach links unterstützt.
In meinem Fall ist das egal, da ich es auf jeden Fall selbst schreiben will. Unter anderem deshalb, weil mir TChart etwas übertrieben dafür scheint.

Zitat:
Was willst du denn Anzeigen? Messwerte oder Funktionen?
Ich möchte meinen Netzwerk-Monitor mit einem Graphen ausstatten. Im Prinzip also genau das gleiche wie im Taskmanager unter Netzwerk. Allerdings will ich absolute Angaben bei der Skala (keine Prozent).

Deshalb bauche ich auch das verändern des Maßstabs, da ich z.B. anfangs die Skala bis 15kb/sec mache. Wenn dann aber jemand ein wesentlich schnelleres Internet/Netzwerk hat, soll das Diagramm auch noch sinnvoll sein.

Zitat:
Wenn du ein Beispiel brauchst bei den JEDI Komponenten ist in der Unit JvSimScope ein solche Komponente, kanst dir ja mal den Source angucken.
Inspiration ist immer gut, danke!

Ich werde mal mein Hauptprobleme bei der Geschichte etwas genauer erläutern:
Das Zeichnen der Punkte und Kurven, bzw. des Rasters ist nicht wirklich ein Problem. Verwendung von TPaintBox, TImage, TBitmap ist mir auch bekannt.
Leider ist es mir ein komplettes Rätsel, wie ich diese Verschiebung nach lins bewerkstelligen soll. Zwei Ideen habe ich:
  • Ein Bitmap immer nach links verschieben. Mit diesem Ansatz komme ich leider nicht weiter.
  • Ein array/eine Liste mit den ganzen Punkten, die ich nach der Reihe zeichne. Wenn ich einen Punkt hinzufüge, lösche ich auch wieder einen aus der Liste. Meine Sorge bei diesem Ansatz ist, dass ich viel Speicher brauche. Da ich jede Sekunde neue Daten hole und somit einen neuen Punkt habe, erhalte ich zum Beispiel, wenn ich die letzen 5 Minuten im Diagramm anzeige: 5*60= 300 Punkte. Klar ist das nicht soooo viel Speicherplatz, aber vielleicht gibt es ja Idealeres.

Vielen Dank,
Andreas
Andreas N.
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Diagramm zeichnen...

  Alt 11. Sep 2006, 19:28
Nimm dir doch ein Array mit so vielen Einträgen, wie du Punkte anzeigen willst. (Sagen wir mal 60). Das schreibst du erst mal voll und benutzt in der ersten Minute noch eine Integer-Variable, an der du ablesen kannst, wie viele Einträge schon gefüllt sind. Nach dem du eine Minute gewartet hast, überschreibst du den ersten Wert mit dem 61. und setzt deine Variable von vorhin auf 2. Daran kannst du dann ablesen, dass zuerst Wert nr.2 gezeichnet werden soll, dann Werte 3 bis 60 und dann der erste. Dann überschreibst du nr. 2 und passt deine Markierung an.
Somit brauchstdu zeitunabhängig nur 60 Speicherplätze für deine Daten.

Das hier könntest du dann einsetzen:
Delphi-Quellcode:
for i:=k to (length+k) do
 memo1.Lines.Add(inttostr(i mod (length+1) ));
Zu Maßstab:
Geh einfach deine Liste durch und suche den höchsten Wert. Wenn der dann durch einen 100Px hohen Balken dargestellt werden soll, errechnest du die Höhen der Balken einfach per IrgendEinMesswert/MaximalerMesswert*100;
Speicher am Besten den Höchsten Wert und überprüf nur wenn ein neuer dazu kommt, das sollte die schnellste Methode sein.


Mein 1000. Post
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#7

Re: Diagramm zeichnen...

  Alt 11. Sep 2006, 19:39
Danke!

Dein Ansatz ist der selbe, wie mein zweiter (nur habe ich Liste statt array geschrieben, was aber dann relativ egal ist). Nur zeige ich sicher 300 Punkte auf einmal an und deshalb frage ich mich, ob es da nicht vielleicht etwas Besseres gäbe.
Immerhin hat man dann vielleicht mehrere Netzwerk-Schnittstellen, dann kannst du die 300 Punkte schon mal mit der Anzahl der Schnittstellen multiplizieren.

Dieser Ansatz geht außerdem davon aus, dass ich alles in einer Paintbox zeichne und selbst für die Speicherung der Punkte verantwortlich bin. Seid ihr/bist du der Meinung, dass das die beste Lösung ist, oder wäre eine Lösung mit TImage/TBitmap (wobei ich nicht wüsste, wie ) im Hintergrund unter umständen besser?
Sehe ich das richtig, dass ich um das Speichern aller Punkte nicht herum komme?

Vielen Dank,
Andreas
Andreas N.
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Diagramm zeichnen...

  Alt 11. Sep 2006, 19:49
Mal ein paar Tausend Werte zu speichern wird dich/deinen Computer nicht umbringen. Auch 100000 32bit integer wären nur 4mb (oder so was). Das sollte das kleinste Problem sein. Wenn du nicht alle Werte immer griffbereit hast, wird die Anpassung der Skala problematisch.
Wenn du unbedingt nicht alles speichern willst, könntest du dein Schaubild malen, alle Daten vergessen, dann per Copyrect das Bild etwas nach links verschieben und dann rechts was neues dranmalen. Aber das wäre schlechter Stilund extrem unflexibel.
Ob du in eine Paintbox oder eine Image malst, dürfte recht egal sein, wobei ich noch nicht mit ersterem gearbeitet habe, aber images, haben da bis jetzt wunderbar funktioniert.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#9

Re: Diagramm zeichnen...

  Alt 12. Sep 2006, 19:39
Danke!

Ich habe mir jetzt den Source von TJvSimScope angesehen. Das arbeitet mit:
CopyRect(...) Das wäre eigentlich eine perfekte Lösung für mich, wenn da nur nicht das Ändern der Skala wäre. Hat da jemand eine Idee, wie ich das dennoch auf diese Art schaffen könnte?
Oder bleibt mir, sofern ich die Skala ändern will, gar keine andere Möglichkeit?


Eine andere Idee wäre auch, dass im Falle einer Änderung der Skala eine neue Skala rechts auftaucht und sich ebenfalls nach links mitbewegt. Was sagt ihr dazu? Würde das gut aussehen? Lieber wäre mir natürlich eine richtige Änderung der Skala, aber wer weiß: Ich bin offen für Alles.

Anmerkung: Denn in Wirklichkeit soll dieses Diagramm zwar schon sinnvoll sein und stimmen, aber eigentlich dient es nur dazu, dem Eye-Candy zu frönen.

Vielen Dank,
Andreas

PS: Dass es nicht viel Speicher wäre, habe ich jetzt eingesehen.
Andreas N.
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#10

Re: Diagramm zeichnen...

  Alt 12. Sep 2006, 20:09
Du könntest das kopierte Bild einfach vergrößern/verkleinern, wenn ein neuer Maßstab eingeführt wird. Ich glaube dafür musst du bei Copyrect einfach nur ein kleineres Zielbild als das Ursprungsbild angeben, wenn ich mich nicht irre.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:02 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