AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Diagramme in Echzeit zeichnen - "Plots"
Thema durchsuchen
Ansicht
Themen-Optionen

Diagramme in Echzeit zeichnen - "Plots"

Ein Thema von bigg · begonnen am 16. Nov 2004 · letzter Beitrag vom 20. Nov 2004
Antwort Antwort
bigg
(Gast)

n/a Beiträge
 
#1

Diagramme in Echzeit zeichnen - "Plots"

  Alt 16. Nov 2004, 22:42
Ich versuche mich momentan daran ein Diagramm in Echtzeit zu zeichnen.
Mein Problem dabei ist, das ist nicht weiß, wie ich die Position setzen soll, wenn
das Daten-Array endet.

Das Daten-Array hat eine bestimmte Länge. (=Diagrammbreite / pro Wert ein Pixel)
Wenn ich das Array auf unendlich laufen lassen, wird alles richtig gezeichnet.
Ich steh da momentan auf dem Schlauch
Vieleicht bin ich auch falsch an die Sache ran gegegangen

Hier ist der bisherige Code:
Miniaturansicht angehängter Grafiken
diagramm.png  
Angehängte Dateien
Dateityp: zip ezd2_892.zip (2,5 KB, 38x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Mystic
Mystic

Registriert seit: 18. Okt 2003
Ort: Flerzheim
420 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Diagramme in Echzeit zeichnen - "Plots"

  Alt 17. Nov 2004, 00:00
Ich hab Schwachsinn geschrieben. Bitte löschen. *seufz*



Jan Steffens
Der Fachwortgenerator - 100% Schwachsinn --- Der UPnP Router Manager - Kommentare erwünscht!
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#3

Re: gelöst! - Diagramme in Echzeit zeichnen - "Plots&am

  Alt 17. Nov 2004, 02:00
Ich passe jetzt das Array dynamisch an.
  Mit Zitat antworten Zitat
Benutzerbild von Ben1
Ben1

Registriert seit: 11. Okt 2004
Ort: Rostock
36 Beiträge
 
Delphi 6 Personal
 
#4

Re: gelöst! - Diagramme in Echzeit zeichnen - "Plots&am

  Alt 17. Nov 2004, 08:18
Ich hab schon ein parr mal ähnliches geschrieben, in C, VB und Pascal. Dabei hatte ich ein festes Array genommen und über zwei Indizes ("erstes","letztes" Feld mit gültigem Wert) den Bereich im Array markiert der meine aktuellen Werte enthielt.

Immer wenn ein neuer Wert kam wurde "letztes" inkrementiert, sollte es dann das selbe sein wie "erstes" dann wurde zusätzlich auch noch "erstes" inkrementiert. Das heißt das alte Werte im Array überschreiben wurden, also eine Art Ringspeicherung.

Der Vorteil dieser Methode ist das man den Maßstab des Diagramms nicht anpassen muss. Die Werte die man überschreibt kann man bei Bedarf in ein anderes Array schreiben und wenn das voll ist ,in ne Datei quetschen.
Ben
---------------------------------------
Spielanleitung !? Wieso ? Wozu ?
Im Quelltext steht doch alles drin !
Zitat: Ich selbst (1998)
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#5

Re: gelöst! - Diagramme in Echzeit zeichnen - "Plots&am

  Alt 17. Nov 2004, 11:51
ich werde das diagramm mal zu einem späteren Zeitpunkt abändern.
Die Performance ist ja nicht so doll
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#6

Re: Diagramme in Echzeit zeichnen - "Plots"

  Alt 20. Nov 2004, 00:07
Für die diejenigen die es interessiert:
Ich habe nun das Flußdiagramm optimiert.
Miniaturansicht angehängter Grafiken
flu_diagramm.png  
Angehängte Dateien
Dateityp: zip flu_-diagramm.zip (2,9 KB, 52x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Diagramme in Echzeit zeichnen - "Plots"

  Alt 20. Nov 2004, 01:16
LOL:
Delphi-Quellcode:
{Länge des Arrays festlegen, Laufzeit ca. einen Monat nonStop
bei einer Aktualisierungs-Zeit von 1000ms}

  SetLength(Data, Month);
Mach dir ein dynamisches Array, das so groß ist, wie das Diagramm Pixel breit. Und dann füllst du es von hinten und zeichnest es von vorne:

Code:
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Code:
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3 |
Code:
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3 | 5 |
Code:
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3 | 5 | 2 |
Code:
| 0 | 0 | 0 | 0 | 0 | 0 | 3 | 5 | 2 | 4 |
Und wenn du vorne angekommen bist, fängst du wieder an es von hinten zu füllen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#8

Re: Diagramme in Echzeit zeichnen - "Plots"

  Alt 20. Nov 2004, 01:33
eigentlich ist der Weg, den ich gewählt habe gar nicht so schlecht, da man die Messdaten ja noch benutzen könnte.
Okay man könnte Sie auch in eine Datei schreiben

mal sehen wie sich das Ganze entwickeln wird.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Diagramme in Echzeit zeichnen - "Plots"

  Alt 20. Nov 2004, 02:02
So:
Delphi-Quellcode:
type
  TValueArray = array of Cardinal;

var
  ValueArray: TValueArray;

implementation

{$R *.dfm}


procedure PaintGraph(Bmp: TBitmap; Color: TColor; ValueArray: TValueArray);
var
  rect: TRect;
  i: Integer;
  len: Integer;
begin
  Bmp.Canvas.Brush.Color := clWhite;
  rect.Top := 0;
  rect.Left := 0;
  rect.Right := Bmp.Width;
  rect.Bottom := Bmp.Height;
  Bmp.Canvas.FillRect(rect);
  len := length(ValueArray);
  Bmp.Canvas.Pen.Color := Color;
  for i := 0 to Bmp.Width - 1 do
  begin
    Bmp.Canvas.MoveTo(i, Bmp.Height);
    Bmp.Canvas.LineTo(i, Bmp.Height-ValueArray[len-i-1]);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  OffScreenBmp := TBitmap.Create;
  OffScreenBmp.Width := ClientWidth;
  OffScreenBmp.Height := ClientHeight;
  SetLength(ValueArray, ClientWidth);
  Index := length(ValueArray) - 1;
  Randomize;
  Timer1.Interval := 50;
  DoubleBuffered := True;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(OffScreenBmp);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  BitBlt(Canvas.Handle, 0, 0, ClientWidth, ClientHeight, OffScreenBmp.Canvas.Handle, 0, 0, SRCCOPY);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i: Integer;
begin
  ValueArray[Index] := random(ClientHeight); //GetCPUUsage * 10;
  Dec(Index);
  if Index = 0 then
  begin
    for i := 0 to length(ValueArray) - 1 do
      ValueArray[i] := 0;
    PaintGraph(OffScreenBmp, clRed, ValueArray);
    Repaint;
    Index := length(ValueArray)-1;
  end;
  PaintGraph(OffScreenBmp, clRed, ValueArray);
  Repaint;
end;
In dem if-Zweig des OnTimer Ereignisses kannst du es ja dann in eine Datei wegspeichern.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 00:08 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