![]() |
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 |
Re: Chart zur Laufzeit erstellen, Formatierungs Probleme
Hat denn niemand eine Idee wie ich meine Probleme lösen könnte?
|
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 |
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. |
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 20:30 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