Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Chart zur Laufzeit erstellen, Linien in den Vordergrund
Bronstein - Sa 09.02.08 10:36
Titel: Chart zur Laufzeit erstellen, Linien in den Vordergrund
Hallo,
ich erstelle ein Chart zur Laufzeit. Jetzt habe ich ein Problem, dass ich die Linien nicht über die Balken bekomme.
Hat jemand eine Idee wie ich das machen könnte.
Hier mal meine bisherige Funktion:
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: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50:
| procedure TfrmSettings.VorschauData(Chart:TChart; DiagrammID:ShortString); var Kreis: TPieSeries; Balken: TBarSeries; Linie: TLineSeries; LastTypID: Integer; begin LastTypID := 0; Chart.SeriesList.Clear; AdoQuery1.SQL.Clear; 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 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 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 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.Add(AdoQuery1.FieldByName('Wert').AsFloat, AdoQuery1.FieldByName('Beschriftung').AsString); if AdoQuery1.FieldByName('TypID').AsInteger = 2 then Balken.Add(AdoQuery1.FieldByName('Wert').AsFloat, AdoQuery1.FieldByName('Beschriftung').AsString); if AdoQuery1.FieldByName('TypID').AsInteger = 3 then Kreis.Add(AdoQuery1.FieldByName('Wert').AsFloat, AdoQuery1.FieldByName('Beschriftung').AsString); LastTypID := AdoQuery1.FieldByName('TypID').AsInteger; AdoQuery1.Next; end; end; |
Bronstein - Mo 11.02.08 22:22
Hat niemand eine Idee?
Ich habe auch noch eine weitere Frage, wie kann ich angeben, dass sich z.b. ein Balken nicht auf die linke sondern auf die rechte Achse bezieht?
Bronstein - Sa 16.02.08 11:01
Damit sich eine Linie auf die rechte Seite bezieht habe ich herrausbekommen:
Delphi-Quelltext
1:
| Linie.VertAxis := aRightAxis; |
Das Problem, dass die Linien unter den Balken sind habe ich aber immernoch
Delete - Sa 16.02.08 12:13
Das ist doch einfach:
erst die Balken, dann die Linien zeichnen.
Bronstein - Sa 16.02.08 21:20
Ja, das würde funktionieren, kann ich das nicht zu einem späteren Zeitpunkt sagen, dass er die Linien über die Balken legen soll?
Delete - Sa 16.02.08 23:27
hathor hat folgendes geschrieben: |
Das ist doch einfach:
erst die Balken, dann die Linien zeichnen. |
einfacher:
chart.axis.behind := false;
die frage ist nur, weshalb man so etwas wollen sollte... :gruebel:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!