Autor Beitrag
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Do 06.02.03 14:38 
Hi,

ich hänge hier an einem Chart fest. Ich will eine Liniengrafik über ein Jahr und das Vorjahr darstellen, also x-Achse die Monate anzeigen und y-Achse die entsprechenden Monatswerte. Ich vermute hierzu zwei Serien zu benötigen, für jedes Jahr eine. Ich kriege aber weder die Beschriftung mit den Monaten hin, noch die Anzeige der entsprechenden Werte. Vor allem weiß ich nicht wo ich da anfangen soll. Informationen zu dem Thema sind äußerst spärlich und in der OH merkt man direkt, daß das ein zugekauftes Produkt ist.

Gruß
Hansa
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Do 06.02.03 14:50 
Hallo,

wenn Du die TChart-Komponente benutzt, musst/kannst Du folgendermaßen vorgehen:

Doppelklick auf die Komponente und 2 Reihen hinzufügen. Dabei kannst Du festlegen welchen Diagramm-Typ die Reihen bekommen.

Dann kannst Du die Werte in etwa übergeben:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var i:Integer;

  ...
  with Chart1 do
  begin
    Series[0].Clear;
    Series[1].Clear;

    for i:=1 to 12 do
    begin
      Series[0].AddXY(i, Random(100));
      Series[1].AddXY(i, Random(100));
    end; // for i
  end; // for i
  ...

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
hansa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Do 06.02.03 17:30 
Wie siehts denn da mit DBchart aus ? Die Daten kommen aus der DB. Soll ich das verwenden, oder besser die Werte an ein normales Chart übergeben :?: Habe es mit DBchart probiert, aber wie kriege ich da die einzelnen Werte an die richtige Stelle ?

Gruß
Hansa
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Do 06.02.03 21:16 
Hallo,

das habe ich der Hilfe zu DBChart gefunden:

Zitat:

Bevor Sie irgendwelche Datenbankfunktionen nutzen können, müssen Sie die Borland Database Engine (oder ein Äquivalent) sowie die Komponenten der Borland Delphi VCL installieren.
Schrittweise Anleitung zur Erstellung eines datensensitiven Diagramms

- Plazieren Sie auf Ihrem Formular eine TTable-Komponente, und verbinden Sie sie mit der Datenbank "DBDEMOS" und der dBASE-Tabelle "ANIMALS.DBF".
- Plazieren Sie auf Ihrem Formular eine TDatasource-Komponente, und setzen Sie deren Eigenschaft DataSet auf Table1.

- Plazieren Sie auf Ihrem Formular eine TDBGrid-Komponente, und setzen Sie die Eigenschaft Datasource auf DataSource1.
- Setzen Sie die Eigenschaft Table1.Active auf TRUE, damit das Gitter mit Tabellendaten gefüllt wird.
- Plazieren Sie auf Ihrem Formular eine TDBChart-Komponente.
- Wählen Sie eine Tortenreihe, und definieren Sie sie, wie im Abschnitt Der Chart-Editor beschrieben.
- Wechseln Sie zur Seite Reihen des Chart-Editors, indem Sie entweder den Reihennamen doppelt anklicken oder die Reihe markieren und Bearbeiten wählen oder die Registerseite Reihen auswählen.

- Wählen Sie im Listenfeld Reihen die gewünschte Reihe, und wechseln Sie zur Registerseite Datenquelle.
Wählen Sie im Listenfeld den Typ Ihrer Datenquelle aus..
Es stehen 4 Typen von Datenquellen zur Verfügung. Der Datenquellentyp ist eine Komponenteneigenschaft, die einen der folgenden Werte annehmen kann:
Bei Keine Daten werden die Punkte programmgesteuert (per Quelltext) hinzugefügt.
Oder ...
Bei Zufallswerte wird die Grafik mit Zufallswerten gefüllt.

Oder ...
Funktion erfordert folgende Angaben:
Eine oder mehrere Reihen (wie z. B. LineSeries1, BarSeries2 usw.), die aus diesem Diagramm oder einem anderen Diagramm innerhalb Ihres Projekts stammen kann. Eine Funktion kann mit einer oder mit mehreren Reihen und einer algorithmischen Funktion (min, max, average etc.) arbeiten.
Oder ...
Eine Datenmenge, die aus folgenden Komponenten bestehen kann:
TTable, TQuery, TClientDataset oder jede andere TDataset-Komponente (wie z. B. Table1, TQuery1 usw.).

Eine Datenmenge hinzufügen
Für unser Beispiel verwenden wir die vierte der im vorherigen Abschnitt genannten Optionen, den Typ Datenmenge. In der TDBChart-Komponente werden Daten einer Tabelle berücksichtigt, die bereits in das Formular eingefügt wurde.
Sie müssen die Listenfeldoption Datenmenge auswählen, damit diese Reihe auf die in das Projekt eingefügte Tabelle verweist. Wenn Sie die Auswahl treffen, erscheinen für die Definition der Datenmenge für die Tortenreihe neue Seitenoptionen. Ihr Editor sollte Abb. 7 entsprechen.

Abb. 7.Der Chart-Editor zeigt die Registerkarte Datenquelle für die Tortenreihe an
Sie müssen hier lediglich eine einfache Datenmenge für die Reihe definieren. Sie haben bereits eine Tabelle und eine Datenquelle in Ihr Formular eingefügt und aktivieren nun die Tabelle. Die hier vorhandenen Optionen bieten Ihnen jedoch die Möglichkeit, die Datenreihen mit verschiedenen Methoden zu definieren:
Klicken Sie den nach unten weisenden Pfeil des Kombinationsfelds Datenmenge an.
Wenn sich im Formular eine aktivierte Tabelle befindet,
ist sie hier markiert.

Wählen Sie Ihre Tabelle aus.
Definieren Sie die Werte, die im Diagramm angezeigt werden sollen:
Da eine Tortenreihe ausgewählt wurde, werden die speziellen Konfigurationsoptionen für diesen Reihentyp angezeigt. Jede Datenreihe hat spezielle Parameter, die sich etwas von der Definition des unten angeführten Beispiels unterscheiden.
Die Angabe im Feld Pie ist obligatorisch und muß einem gültigen numerischen Feld oder einem alphanumerischen Feld entsprechen, dessen Werte in Zahlen konvertiert werden können.

Für unser Beispiel wählen Sie das Feld Weight.
(Die Tabelle ANIMALS ist eine Sammlung von Tiernamen mit Angaben über das Gewicht und die Größe der betreffenden Tiere.)
Sie können optional das Feld Labels auswählen, um die entsprechende Bezeichnung für jeden Punkt der Torte auszudrucken.
Für unser Beispiel wählen Sie das Feld Name.
Diese Beschriftung wird für den Ausdruck der Tortenlegende benutzt.
Hinweis
Bei einigen Reihentypen sind ganz unterschiedliche Abbildungen eines Datenpunktes möglich. So sind Werte, die auf Datums- oder Zeitangaben basieren, Beispiele für X-Werte-Reihen. Nicht alle Datum/Uhrzeit-Werte müssen gleichabständig sein. Der X-Wert ist die spezielle horizontale Position für jeden Y-Wert. Wenn Sie später einmal versuchsweise die Tortenreihe löschen und einen anderen Reihentyp wie z. B. eine Linienreihe verwenden, erscheinen die Optionen für die X- und Y-Werte.

(In einer Tortenreihe gibt es keine X-Werte.)
Klicken Sie jetzt den OK-Schalter an.
Die TDBChart-Komponente zeigt eine Tortenreihe und eine Legende an.
Sie sehen exakt dasselbe Diagramm wie nach dem Drücken der Taste F9 zur Ausführung des Projekts.
Eine Zusammenfassung und Vertiefung zu diesem Thema finden Sie unter Wie man datensensitive Diagramme erstellt.

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
foxy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Fr 07.02.03 07:02 
langer text :) .... also ich wollte es zuerst auch mit db chart machen... aber bin dann auf normalen umgestiegen, da es für mich gereicht hat die daten direkt , mit Hilfe von einer schleife, in zu lagern ...

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
hansa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 07.02.03 09:10 
Ich lasse das im Moment ein normales Chart sein. Wenn das funktioniert bau ich es eventuell in ein DBchart um. Zuerst einmal habe ich das Smiegel Beispiel 1:1 übernommen, aber da kommt der fehler "List Index out of bounds". Da fehlt noch irgendwas.

Gruß
Hansa
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Fr 07.02.03 09:20 
Hallo Hansa,

ich habe mein Beispiel getestet. Bei mir tritt kein Fehler auf.

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
hansa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 07.02.03 09:46 
Hi Smiegel,

hier ist der sagenhafte komplette Quelltext :

ausblenden volle Höhe 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:
30:
31:
32:
33:
34:
35:
36:
37:
unit test;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart;

type
  TForm1 = class(TForm)
    Chart1: TChart;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

USES StatMod;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
  chart1.Series[0].Clear;
  for i:= 1 to 12 do 
    chart1.Series[0].AddXY(i, Random(100));
end;

end.


Wie man sieht habe ich lediglich ein Chart und einen Buton auf die Form gesetzt und dann Dein Beispiel eingebaut, um alle anderen Fehlerquellen auszuschließen.

Aber der Fehler kommt trotzdem.

Gruß
Hansa
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Fr 07.02.03 09:57 
Hallo Hansa,

sorry für meine dumme Frage: hast Du die Series bzw. Reihe auch manuell erzeugt?

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
hansa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 07.02.03 10:18 
Nee, eben nicht, da wird der Hund wohl begraben liegen. 8) Wo und wie muß ich das machen? Wie gesagt, die OH ist für die Katz. Was vernünftiges hierüber hab ich nicht gefunden.

Gruß
Hansa
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Fr 07.02.03 10:33 
Hallo Hansa,

siehe mein 1. Posting.
Doppelklick auf die TChart-Komponente. Daraufhin erscheint ein Dialog, in dem Du Reihen hinzufügen und formatieren kannst.
In Bezug auf die Hilfe: die ist genau so mies, wie die von D7, aber ich habe dort bisher vieles gefunden, was ich wissen wollte. Auch wenn es manchmal umständlich ist.

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
hansa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 07.02.03 10:59 
Hi,

habe das mal alles neu gemacht. Nur das button1click ist noch so wie vorher.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Chart1: TChart;
    Series1: TLineSeries;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


Series1 ist jetzt in der Form drin, aber irgendwas fehlt immer noch. Beim ersten Zugriff auf Series1 kommt der Fehler.

ausblenden Quelltext
1:
2:
3:
//     Series[1].Clear;
      for i:=1 to 12 do 
        Series[1].AddXY(i, Random(100));


Entweder schon bei Clear. Bei dem auskommentierten wie hier kommt der Fehler dann eben bei AddXY.

Gruß
Hansa
hansa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 07.02.03 11:09 
Hi,

das da ist ein Musterbeispiel, warum man zu einem diffizilen Problem am besten Teile seines Quelltextes mitschickt. 8) series1 und series[1] ist nun mal nicht dasselbe. Gut., das da habe ich direkt gemerkt, als ich das letzte Posting gerade abgeschickt hatte, aber bei solch ähnlich aussehendem Quelltext, wo man sich noch darauf verläßt, daß Delphi das schon richtig macht... :hair:

So, jetzt guck ich mal, wie weit ich noch komme, bzw. wie lange es dauert bis ich nicht mehr weiterkomme. Kann nicht lange dauern. :mrgreen:

Gruß
Hansa