Entwickler-Ecke

Sonstiges (Delphi) - Daten aus einem StringGrid als Grafik anzeigen lassen


Kalak - Di 26.09.06 21:53
Titel: Daten aus einem StringGrid als Grafik anzeigen lassen
Hallo,

wie kann ich den Dateninhalt eines StringGrids in einem TChart grafisch darstellen lassen?
MeinStrinGrid besteht quasi aus einer XY Tabelle und genau diese Werte möchte ich per "Knopfdruck" gegeneinander auftragen (so wie ein XY- Diagramm in EXCEL). Dabei sollen immer alle xy- Daten geplottet werden, auch wenn die Tabellen unterschiedlich lang sein können!

Ich finde dazu keine Lösung! Ich habe bereits die Hilfedatei durchgesehen und mich im Internet schlau gemacht...nix zu finden...

Wäre toll, wenn mir jemand einen Tip geben könnte!

Grüße

Kalak

P.S. bitte einfach halten! weil wegen Neuling und so...^^


Lannes - Di 26.09.06 22:42
Titel: Re: Daten aus einem StringGrid als Grafik anzeigen lassen
Hallo,

erstmal :welcome: in der Entwickler-Ecke.(EE)

user profile iconKalak hat folgendes geschrieben:
...nix zu finden...

Wäre toll, wenn mir jemand einen Tip geben könnte!..
hast recht, es gibt nicht sehr viel Informationen zum TChart.

Aber eventuell hilft Dir das hier aus dem Forum weiter:
:arrow: StringGrid mit TChart anzeigen [http://www.delphi-forum.de/viewtopic.php?t=21804&start=0&postdays=0&postorder=asc&highlight=stringgrid+tchart]


Kalak - Mi 27.09.06 18:09

Hallo,

danke für die Begrüßung und den Tip!

Habe das Beispiel aus dem Link mal bei mir eingefügt...es scheint zunächst zu funktionieren. Zwei Dinge jedoch noch:


1. Wenn ich dann jedoch auf den Knopf zum Plotten der Daten klicke, dann bekomme ich die Fehlermeldung : List index out
of bounds(1).

2. Ich möchte mich nicht auf eine bestimmte Anzahl an Zeilen des Grids festlegen! Es soll also kein "for J := 1 to ? do"
da drin sein, sondern ein Ausdruck, mit dem ich immer bis zum Ende des Grids alle Zahlen aufnehmen kann! Wie kann ich
das lösen?

Hier mal der Code, den ich übernommen habe und wie er bei mir drinsteht für ein StringGrid mit 2 Spalten (x,y) und 1010 Zeilen (ein Spektrum).
Das StringGrid hat in den obersten Zeile jeweils eine Beschriftung und sieht skizziert etwa so aus:

Wellenzahl(x) Intensität(y)
3372.41 9748
... ...
... ...
bis Zeile +/- 1010


Der Code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
procedure TForm1.Button2Click(Sender: TObject);
var I,J : Integer;
 function lw(s:string):string;
begin repeat if copy(s,1,1)=' 'then s:=copy(s,2,length(s)-1);
      until (copy(s,1,1)<>' ')or(s='');
      repeat if copy(s,length(s),1)=' 'then s:=copy(s,1,length(s)-1);
      until (copy(s,length(s),1)<>' ')or(s='');
      lw:=s;
 end;

function alsD(s:string):double;
var c:integer; d:double;
begin for c:=1 to length(s) do if s[c]=',' then s[c]:='.';
val(lw(s),d,c);if c<>0 then alsD:=-0 else alsD:=d;end;

begin
 for I := 1 to 2 do  // Spalten des Grids
 begin
 Chart1.Series [I-1].Clear;
 for J := 1 to 1010 do  // Zeilen des Grids
 begin
 Chart1.Series [I-1].Add(alsD(StringGrid1.Cells[I,J]),'',
 Chart1.Series [I-1].SeriesColor);
 Chart1.Series [I-1].Marks.Visible := true;
 end;
 end;
end;

[/code]

So, bin für jeden Tip dankbar und hoffe, den Code hier richtig eingefügt zu haben!

Grüße

Kalak


jasocul - Do 28.09.06 08:30

Ändere Deine Schleife einfach wie folgt:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
procedure TForm1.Button2Click(Sender: TObject);
var I,J : Integer;
 function lw(s:string):string;
begin repeat if copy(s,1,1)=' 'then s:=copy(s,2,length(s)-1);
      until (copy(s,1,1)<>' ')or(s='');
      repeat if copy(s,length(s),1)=' 'then s:=copy(s,1,length(s)-1);
      until (copy(s,length(s),1)<>' ')or(s='');
      lw:=s;
 end;

function alsD(s:string):double;
var c:integer; d:double;
begin for c:=1 to length(s) do if s[c]=',' then s[c]:='.';
val(lw(s),d,c);if c<>0 then alsD:=-0 else alsD:=d;end;

begin
 for I := 1 to 2 do  // Spalten des Grids
 begin
 Chart1.Series [I-1].Clear;
// Hier Änderung:
// Alte Variante: for J := 1 to 1010 do  // Zeilen des Grids
 for J := 1 to StringGrid1.RowCount-2 do  // Es gibt die Eigenschaft RowCount im StringGrid
 begin
 Chart1.Series [I-1].Add(alsD(StringGrid1.Cells[I,J]),'',
 Chart1.Series [I-1].SeriesColor);
 Chart1.Series [I-1].Marks.Visible := true;
 end;
 end;
end;