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 Chart zur Laufzeit erstellen, Formatierungs Probleme (https://www.delphipraxis.net/108494-chart-zur-laufzeit-erstellen-formatierungs-probleme.html)

bronstein 14. Feb 2008 19:39


Chart zur Laufzeit erstellen, Formatierungs Probleme
 
Hallo,
ich erstelle ein Chart zur Laufzeit. Jetzt habe ich noch mehrere Probleme

1.) Ich möchte, dass die Linien über die Balken gehen, da man sonst die Linien so schlecht erkennt. Sprich die Linien in den Vordergrund setzen
2.) Wie kann ich angeben, dass sich z.b. ein Balken nicht auf die linke sondern auf die rechte Achse bezieht

Hat jemand eine Idee wie ich das machen könnte.

Hier mal meine bisherige Funktion:
Delphi-Quellcode:
procedure TfrmSettings.VorschauData(Chart:TChart; DiagrammID:ShortString);
var
  Kreis: TPieSeries;
  Balken: TBarSeries;
  Linie: TLineSeries;
  LastTypID: Integer;
begin
  //Series zeichnen und mit Werten belegen
  LastTypID := 0;
  Chart.SeriesList.Clear; //alle Series aus dem Diagramm löschen
  AdoQuery1.SQL.Clear;
  //AdoQuery1.SQL.Add('Select * FROM Series WHERE ChartID=' + pString(Combobox2.Items.Objects[ComboBox2.ItemIndex])^);
  AdoQuery1.SQL.Add('SELECT Series.*, Data.* FROM Series INNER JOIN Data ON Series.SeriesID = Data.SeriesID WHERE ChartID=' + DiagrammID + ' ORDER BY Series.SeriesID');
  AdoQuery1.Active := true;
  while not AdoQuery1.Eof do
  begin
    if LastTypID <> AdoQuery1.FieldByName('TypID').AsInteger then
    begin
      if AdoQuery1.FieldByName('TypID').AsInteger = 1 then //Linie
      begin
        Linie := TLineSeries.Create(self);
        Linie.ParentChart := Chart;
        Linie.SeriesColor := GetFarbe(AdoQuery1.FieldByName('Farbe').AsString);
        Linie.Title := AdoQuery1.FieldByName('Titel').AsString;
      end;
      if AdoQuery1.FieldByName('TypID').AsInteger = 2 then //Balken
      begin
        Balken := TBarSeries.Create(self);
        Balken.ParentChart := Chart;
        Balken.SeriesColor := GetFarbe(AdoQuery1.FieldByName('Farbe').AsString);
        Balken.Title := AdoQuery1.FieldByName('Titel').AsString;
      end;
      if AdoQuery1.FieldByName('TypID').AsInteger = 3 then //Kreis
      begin
        Kreis := TPieSeries.Create(self);
        Kreis.ParentChart := Chart;
        Kreis.SeriesColor := GetFarbe(AdoQuery1.FieldByName('Farbe').AsString);
        Kreis.Title := AdoQuery1.FieldByName('Titel').AsString;
      end;
    end;
    if AdoQuery1.FieldByName('TypID').AsInteger = 1 then //Linie
      Linie.Add(AdoQuery1.FieldByName('Wert').AsFloat, AdoQuery1.FieldByName('Beschriftung').AsString);
    if AdoQuery1.FieldByName('TypID').AsInteger = 2 then //Balken
      Balken.Add(AdoQuery1.FieldByName('Wert').AsFloat, AdoQuery1.FieldByName('Beschriftung').AsString);
    if AdoQuery1.FieldByName('TypID').AsInteger = 3 then //Kreis
      Kreis.Add(AdoQuery1.FieldByName('Wert').AsFloat, AdoQuery1.FieldByName('Beschriftung').AsString);
    LastTypID := AdoQuery1.FieldByName('TypID').AsInteger;
    AdoQuery1.Next;
  end;
end

bronstein 16. Feb 2008 08:13

Re: Chart zur Laufzeit erstellen, Formatierungs Probleme
 
Hat denn niemand eine Idee wie ich meine Probleme lösen könnte?

marabu 16. Feb 2008 10:00

Re: Chart zur Laufzeit erstellen, Formatierungs Probleme
 
Hallo,

eine zweite Achse kannst du mittels der Series-Eigenschaft VertAxis festlegen.

Die Achsen und sonstigen Hilfslinien werden immer zuerst gezeichnet. Willst du die Hilfslinien vor deinem Graphen sehen, dann hilft nur Tricksen: Alle Hilfslinien abschalten und durch entsprechende Liniengrafik (LineSeries) ersetzen.

Noch etwas: Warum nimmst du nicht TDBChart, wenn du deine Daten per ADOQuery beisteuerst?

Und zuletzt: Du solltest Nutzdaten und Konfigurationsdaten nicht zusammen speichern. Versuche solche Daten aus unterschiedlichen Quellen zu beziehen. Die Trennung von Daten und Darstellung ist ein Erfolgskonzept in der Programmierung.

Grüße vom marabu

bronstein 16. Feb 2008 19:19

Re: Chart zur Laufzeit erstellen, Formatierungs Probleme
 
Wieso ist das ein Erfolgskonzept.
Natürlich könnte ich die Daten für die Darstellung auch in einer anderem Medium speichern (z.B. INI-Datei), ich sehe da aber nur ein Nachteil. Ich muss gleich zwei Quellen mit dem Programm verwalten.
Wenn du Argumente dafür hast, zähl sie mir bitte auf.

marabu 16. Feb 2008 20:17

Re: Chart zur Laufzeit erstellen, Formatierungs Probleme
 
Du gewinnst Freiheitsgrade, wenn du deine Daten von ihrer Darstellung entkoppelst. Seit sich grafische Benutzerschnittstellen durchgesetzt haben, zeichnen sich Programme u.a. durch ihren Grad der Konfigurierbarkeit durch den Benutzer aus. Alle Aspekte der Darstellung sind Top-Kandidaten für die Konfiguration durch den Benutzer. Gründe dafür sind beispielsweise eine verbesserte Wartbarkeit, die Barrierefreiheit und auch einfach die Erwartungshaltung der Benutzer von heute. Welche Rolle diese Merkmale für dein Programm spielen, kannst momentan nur du beurteilen.

Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 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