Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TChart mit mehreren Bars (https://www.delphipraxis.net/182773-tchart-mit-mehreren-bars.html)

VkPenguin 17. Nov 2014 13:02

TChart mit mehreren Bars
 
Guten Tag zusammen,

ich komme mit der TChart Komponente leider einfach nicht klar. Es ist für mich das erste Mal, dass ich sie in einem Programm verwende, aber trotz mehrerer Tutorials finde ich mich nicht zurecht. Ich kann zwar einfache Pie-Charts oder ähnliches mit Daten befüllen, mein Wunsch ist allerdings etwas komplizierter:

Folgendendes ist in etwa Situation:
Delphi-Quellcode:
type RPersonen=Record;
Peter,Hans,Michael:Real;
Name:String;

Top20:Array[1..20] of RPersonen
Ich möchte nun, dass ein TChart mit 20 Balkendiagrammen, 5 pro Seite, das Prozentuale Verhältnis der Personen darstellt.

Delphi-Quellcode:
For I:=1 to 20 do
  Begin
  Chart1.Serieslist[0].AddXValue(Top20[I].Peter);
  Chart1.Serieslist[1].AddXValue(Top20[I].Peter);
  Chart1.Serieslist[2].AddXValue(Top20[I].Peter);
  Chart1.Labels[I]:=Top20[I].Name;
End;
Das war mein erster Versuch, im Programm sind aber keine Seiten sichtbar (obwohl sie in den Eigenschaften aktiviert sind) und die Werte werden nicht richtig angezeigt (immernoch die Beispielwerte). Hat jemand eine Ahnung, was ich falsch mache ober bin ich gar völlig daneben? Vielen Dank für Eure Hilfe!

Darlo 17. Nov 2014 13:21

AW: TChart mit mehreren Bars
 
Ich weiß jetzt nicht was du mit "5 pro Seite" meinst, aber probier mal nur
Delphi-Quellcode:
series.add(realValue);

Der schöne Günther 17. Nov 2014 13:29

AW: TChart mit mehreren Bars
 
Liste der Anhänge anzeigen (Anzahl: 1)
Kann ich nicht nachvollziehen- Kannst du mal ein Mini-Projekt einstellen?

Seitengröße auf fünf gestellt, fünf mal zehn Werte für jede der drei TBarSeries hinzugefügt und das kommt dabei raus.

ByTheTime 17. Nov 2014 18:12

AW: TChart mit mehreren Bars
 
Zitat:

Zitat von VkPenguin (Beitrag 1280049)
Ich möchte nun, dass ein TChart mit 20 Balkendiagrammen, 5 pro Seite, das Prozentuale Verhältnis der Personen darstellt.

Meinst du mit "Seiten" die Pages Eigenschaft der TChart?

Der schöne Günther 17. Nov 2014 18:24

AW: TChart mit mehreren Bars
 
Vielleicht hat er ein anderes Aussehen erwartet. So etwas wie ein TabControl (was man trotzdem super einfach realisieren könnte).

Aber noch viel verwirrender finde ich
Delphi-Quellcode:
Peter,Hans,Michael:Real;
:cyclops:

ByTheTime 17. Nov 2014 18:28

AW: TChart mit mehreren Bars
 
Vllt. enthält das ja schon Zahlenwerte, weil er ja irgendwas prozentual zeigen will :glaskugel: Aber trotzdem etwas verwirrend :P

VkPenguin 17. Nov 2014 18:55

AW: TChart mit mehreren Bars
 
Hallo zusammen, danke erstmal für eure Antworten :-)

Ich sehe schon, hier ist wohl etwas Erklärungsbedarf:

@Darlo: Wenn ich bei meinem Code dein .Add einfüge funktioniert es so erstmal auch nicht, das muss noch etwas anderes sein, aber danke.

Mit fünf pro Seite meine ich in der Tat die Pages Eigenschaft, entschuldigt bitte, dass ich mich so undeutlich ausgedrückt habe. Genau wie in der Beispielgrafik von "Der schöne Günther", mit zwei Buttons zum hin und herschalten. Ich habe die Pages-Funktion in den Eigenschaften aktiviert, bei mir kann man aber vertikal Scrollen, Buttons werden nicht angezeigt.

Zu den Werten: Es geht (bei dem Beispiel) um drei Personen, die eine gewisse Geldmenge für etwas Ausgeben.
Zum Beispiel:
Büroartikel Pers1:5, Pers2:0,Pers.3:5
Verbrauchsmaterial: Pers1:10, Pers2:0, Pers3:0

Dann sollte mein Chart im ersten Fall das 50/50 Verhältis verdeutlichen und im zweiten mit einem einzigen Balken anzeigen, dass Pers1 100% des Geldes für Verbrauchsmaterial verwendet. Ist jetzt deutlicher, was ich eigentlich will?

ByTheTime 17. Nov 2014 19:25

AW: TChart mit mehreren Bars
 
Schau mal hier. Falls kein Interesse daran besteht genau die Navigation wie im Bild zu verwenden, dann kannst du das auch mit Buttons oder anderweitig realisieren. Ich habe es mal bei mir eben ausprobiert, ich bekomme diesen Navigator auch nicht angezeigt. Allerdings bin ich mir sicher, dass der in einem etwas älteren Projekt von mir enthalten ist, das habe ich aber gerade nicht zur Hand :roll:

Zu deinem Chartdesign: Ich glaube ich blicke da jetzt durch :wink: Allerdings muss ich erstmal selber überlegen :stupid:

Der schöne Günther 17. Nov 2014 19:33

AW: TChart mit mehreren Bars
 
Zitat:

Zitat von ByTheTime (Beitrag 1280107)
Ich habe es mal bei mir eben ausprobiert, ich bekomme diesen Navigator auch nicht angezeigt

Wenn ich Chart -> Paging -> Show Page Number ankreuze erzeugt er unter Tools ein
Delphi-Quellcode:
TPageNumTool
. Könnte sein, dass es das nur in TeeChart Pro gibt.

Ansonsten ist das ja wie gesagt auch einfach selbst zu machen.

VkPenguin 18. Nov 2014 12:12

AW: TChart mit mehreren Bars
 
Guten Tag zusammen,

hier ein kleines Update.

1. Das Paging-Problem ist gelöst, die Buttons scheint es in der Tat nur in der Pro-Version zu geben. Das hat mich im ersten Moment irritiert, ist aber ja kein Problem, ich hab mir eben welche selbst gemacht.
2. Ich habe mal ein kleines Testprojekt erstellt. Dort erhalte ich beim Debuggen immer die Fehlermeldung
"Quelldatei nicht gefunden: VCLTee.TeEngine.pas". Könnte es vielleicht daran liegen? Was kann ich denn dagegen tun? Kann man die Datei irgendwo nachladen, falls es tatsächlich ein Delphi-Fehler ist und nichts mit meinem Code zu tun hat? (Ohne Debugmodus erhalte ich allerdings keine Fehlermeldung, dann läuft es, wenn auch nicht so, wie ich es gerne hätte)

Danke nochmal!

Der schöne Günther 18. Nov 2014 12:18

AW: TChart mit mehreren Bars
 
Definiere "Debuggen"- Der TeeChart-Quelltext ist nicht dabei, den muss man kaufen. Das hast du wahrscheinlich nicht getan.

Gibt es denn nun ein Problem oder überrascht es dich nur, nicht durch den Quellcode der TeeChart-Methoden steppen zu können?

VkPenguin 18. Nov 2014 15:12

AW: TChart mit mehreren Bars
 
Ich meinte einfach den Programmstart mit Quelltexthaltepunkten (F9). Ja, das wirds dann wohl sein, ok. Entschuldigt dann bitte die dumme Frage, ich hab mein XE7 ganz neu und war mir dessen nicht bewusst.

Also aber zurück zum eigentlichen Thema: Ja, es gibt ein Problem. Ich schicke euch mal den Quelltext meines Testprogramms:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, VclTee.TeeGDIPlus, VCLTee.TeEngine,
  VCLTee.Series, Vcl.StdCtrls, Vcl.ExtCtrls, VCLTee.TeeProcs, VCLTee.Chart;

type
  TForm1 = class(TForm)
    Chart1: TChart;
    Button1: TButton;
    Series1: THorizBarSeries;
    Series2: THorizBarSeries;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
With Series1 do
begin
  Add (5, 'Pears', clRed);
  Add (4, 'Apples', clRed);
  Add (4, 'Oranges', clRed);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
With Series2 do
begin
  Add (5, 'Pears', clBlue);
  Add (6, 'Apples', clBlue);
  Add (16, 'Oranges', clBlue);
end;
end;

end.
Was ich erwartet hätte/möchte:
Programmstart - leerer Chart (funktioniert)
Button1Click - Drei rote Balken, alle über die volle Länge, da es ja noch keine anderen Daten gibt, die Werte also jeweils 100% entsprechen (funktioniert)
Button2Click - Die drei Balken sollen jetzt 50/50,40/60,20/80 Verhältnisse anzeigen (stattdessen überlagern sich die Balken scheinbar, nur die Achsenskalierung ändert sich, aber der Balken bleibt 100% rot).

Wo liegt der Fehler?:?: Es scheint jedenfalls immer so zu sein, dass die Rote Serie die Blaue überlagert, anstatt sich zu ergänzen...

Danke! :)

ByTheTime 18. Nov 2014 18:23

AW: TChart mit mehreren Bars
 
Liste der Anhänge anzeigen (Anzahl: 3)
Moin,
schau dir mal die drei Grafiken im Anhang an, so sieht dein Code bei mir aus, was du allerdings erwartet hast, ist das TChart die Berechnung der Daten für dich übernimmt, oder?

Ich bin mir nicht sicher ob das (vorallem mit der Lite Version) so einfach geht. Man kann aber im Editor (bei Datenquelle war das glaube ich) Funktionen auswählen, vllt. solltest du da mal reinschauen. Oder wenn du die Daten aus einer DB beziehst, könntest du deine Daten für die Serien aus kalkulierten Feldern nehmen.

Allerdings bin kein TChart Experte Mehr als ein paar einfache Daten anzuzeigen, habe ich mit der TChart Lite auch nicht gemacht. Vllt. hat noch jemand eine elegantere Lösung parat.

Edit: Oder du schreibst die selbst eine kleine Funktion, die ausgehend von den Werten der Serie 1, die Werte für Serie 2 berechnet. Wobei das aber wahrscheinlich nicht das ist, was du erreichen willst.

VkPenguin 18. Nov 2014 21:29

AW: TChart mit mehreren Bars
 
Hm, genau so hätte ich es gerne (abgesehen davon, dass ich es lieber als Balken untereinander hätte und als "Stack100%"), seltsam.. Hast du eine Erklärung dafür, warum es bei mir anders ist? Ist vielleicht irgendeine TChart-Einstellung falsch?

*Edit*: Ich hab das Tchart einfach gelöscht und ein neues erstellt, ohne etwas im Code zu ändern - jetzt gehts! Das verstehe ich zwar nicht so ganz, aber jetzt gehts ja... Vielen Dank! :-) Ich versuche jetzt mal, es auf das eigentliche Programm zu übertragen, melde mich nocheinmal, falls es Probleme gibt.

ByTheTime 18. Nov 2014 21:37

AW: TChart mit mehreren Bars
 
XE7 Trial, TChart Lite, TChart Komponente auf die Form, bei 3D auf 2D umgestellt und dann die Serien dazu.
Eigentlich mache ich das am liebsten alles zur Laufzeit, weil ich dann den Überblick behalte. Ziehe vllt. nochmal zum Testen eine "frische" Chart auf deine Form.

Aber ansonsten bin ich da ein bisschen überfragt :(

Dejan Vu 19. Nov 2014 04:53

AW: TChart mit mehreren Bars
 
TChart hat so dermaßen viele Optionen, das man beim frustrierten Rumgeklicke und Ausprobieren schnell mal irgendwo ein Häkchen setzt, was dann -wenn es eigentlich funktionieren sollte- im Weg ist.
Zitat:

Zitat von ByTheTime (Beitrag 1280254)
Eigentlich mache ich das am liebsten alles zur Laufzeit, weil ich dann den Überblick behalte.

:thumb: Das beste Gegenmittel gegen o.g. Frust.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz