Graphen zeichnen in Delphi

Also ich hätte eine etwas komplexere Aufgabe:

Es existiert ein Stringgrid (schreibt man das so?) bei dem 24 Stunden am Tag alle 2 Miinuten mehrere Werte zwischen 0 und 100 abgespeichert werden.

Minuten.........A.................B.............C................D

0..................3................17............34..............11....................
2..................4................35.............2.........................................
4..................5.................1.....................................................
6
8
...

Die Anzahl der Werte kann theoretisch unendlich hoch sein. Diese Liste existiert und nun soll die Möglichkeit bestehen sie abzubilden. Als erstes
in der Listenform wie oben, als zweites als Graph es soll die Möglichkeit bestehen für jeden von den Wertekategorien (A,B,C....) einen farbigen Graphen anzuzeigen (Y-Achse: Die Werte X- Achse: Zeit in Stunden)
Auch sollten alle Graphen aufeinmal anzeigbar sein oder nur ausgewählte.


Dazu hab ich ein paar Fragen:
1. Wie schwierig ist das mit Delphi zu realisieren?
2.Wie mache ich die Achse Y immer nur so groß wie nötig,je nach größe der Werte möglichst klein?
3.Alle Graphen müssen eine unterschiedliche Farbe haben ist der Farbcode
so regelmäßig das man wenn man um einen bestimmten Wert steigt immer eine halbwegs deutlich unterscheidbare Farbe bekommt?
4.Allgemein wie würdet ihr die Aufgabe angehen.


Gut jetzt bin ich fertig.... :rolleyes:
Danke an jeden der es soweit durchgelesen hat und vielleicht sogar Antworten geben kann...

Bin wie man bestimmt gemerkt hat ziemlicher Delphi Neuling hab mir aber sagen lassen das diese Aufgabe grafisch ansprechend am besten mit Delphi machbar ist,
 
Hi!
Ich bin auch mehr oder weniger (gut ein bisschen weniger) Delphi Neuling.
Trotzdem hab ich mich mal mit deinem Problem auseinandergesetzt.
Ich hoffe der Quellcode nützt dir was. (Ich hab versucht ein paar Kommentare
einzubinden aber eigentlich müsste man erkennen was Sache ist.)


Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids;

type
  TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    Button2: TButton;
    ComboBox1: TComboBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x,y,z,b,a,m : integer;      //hierzu muss ich ja nix sagen

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);   //Generieren button gedrückt
begin
randomize;                  //Zufallsgenerator starten
b:=StrToInt(ComboBox1.Text);//Variable b wird aus der ComboBox ausgelesen
For x:=0 to  3 do      //For Schleife starten
begin
 For y:=0 to b-1 do   //2.Geschachtelte Forschleife
  begin
   z:=random(100);       //z eine zufallszahl zuweisen (bis 100)
   StringGrid1.cells[x,y]:=IntToStr(z)  ;
  end;         //Die xWerte der Tabelle 4 Spalten u.
 end;         //y Werte (b anzahl Zeilen)  ergeben sich damit aus
          // der Schleife, die Zellen werden mit Zufallszahlen ausgefüllt
end;


procedure TForm1.Button2Click(Sender: TObject);   //Zeichnen Button gedrückt
begin
Refresh;            //schirm "gelöscht"
randomize;          //zufallsgenerator angeworfen
begin
 with Canvas do
   begin
    Moveto(0,100); //Bewege Pinsel auf 0;100 (von links oben gesehen)
      begin
       M:=0;   //M nullsetzten
      end;
    Pen.Color := clred;   //Stiftfarbe
    m:=b;                //Wert übergeben
     for  b:=0 to b-1 do //for schleife die die einzelnen punkte zeichnen wird
      begin
       a:= StrToInt(Stringgrid1.Cells[2,b]); //x wert der tabelle=1
       LineTo((500 div m)*b,(100-a)); //Zeichne einen strich von vorigen move-
       MoveTo((500 div m)*b,(100-a));//punkt zu ... und bewge dich zum selbigen
      end;
      begin   //das ganze von vorne
       Moveto(0,100)      ;
        begin
         M:=0;
        end;
        Pen.Color := clYellow;
        m:=b;
         for  b:=0 to b-1 do
          begin
           a:= StrToInt(Stringgrid1.Cells[1,b]); //x wert der tabelle=1
           LineTo((500 div m)*b,(100-a));
           MoveTo((500 div m)*b,(100-a));
          end;
           begin
            Moveto(0,100)      ;
             begin
              M:=0;
             end;
             Pen.Color := cllime;
             m:=b;
              for  b:=0 to b-1 do
               begin
                a:= StrToInt(Stringgrid1.Cells[0,b]); //x wert der tabelle=1
                LineTo((500 div m)*b,(100-a));
                MoveTo((500 div m)*b,(100-a));
               end;
               begin
                Moveto(0,100)      ;
                begin
                 M:=0;
                end;
                Pen.Color := clwindowtext;
                m:=b;
                 for  b:=0 to b-1 do
                 begin
                  a:= StrToInt(Stringgrid1.Cells[3,b]); //x wert der tabelle=1
                  LineTo((500 div m)*b,(100-a));
                  MoveTo((500 div m)*b,(100-a));
                 end;
                end;
              end;
            end;
           end;
         end;
       end;
     end.

Naja, nicht schön aber selten .... .
Wenn man aus dem Quellcode eines Programmes darauf schlussfolgern kann, wie
es im Kopf seines Programmerierers aussieht, möchte ich manche Programme
garnicht preisgeben ... . 8o
Viel Spaß beim probieren.
 
Zurück
Oben