Ich habe das Problem, dass ich es nicht hinbekomme, in einem TChart-Diagramm für jeden Wert in einer gestapelten Säule einen Text einzublenden.
.
.
Es sollen also auch für die blaue und die gelbe Säule etwas angezeigt werden.
Code: Alles auswählen
unit unit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, TAGraph, TASeries, TAStyles, TACustomSeries;
type
{ TForm1 }
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
Chart1: TChart;
Chart1BarSeries1: TBarSeries;
ChartStyles1: TChartStyles;
procedure ChartGetMark(out AFormattedMark: String; AIndex: Integer);
procedure CreateStackedSeries;
end;
var
Form1: TForm1;
implementation
uses TAChartUtils, TALegend;
{$R *.lfm}
{ TForm1 }
procedure TForm1.ChartGetMark(out AFormattedMark: String; AIndex: Integer);
begin
AFormattedMark:='Benutzer '+IntToStr(AIndex);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CreateStackedSeries;
end;
procedure TForm1.CreateStackedSeries;
var
i, Balken: Integer;
x, y1, y2, y3: Double;
DisplayValue: String;
begin
Chart1:= TChart.Create(self);
Chart1.Parent:=self;
Chart1.AnchorAsAlign(alClient,10);
// ChartStyles1 erzeugen
ChartStyles1:= TChartStyles.Create(self);
with TChartStyle(ChartStyles1.Styles.Add) do
begin
Brush.Color := clRed; // Farbe des untersten Balkens
Text := 'Rot'; // Legendeneintrag des untersten Balkens
end;
with TChartStyle(ChartStyles1.Styles.Add) do
begin
Brush.Color := clBlue; // Farbe des mittleren Balkens
Text := 'Blau';
end;
with TChartStyle(ChartStyles1.Styles.Add) do
begin
Brush.Color :=clYellow; // Farbe des obersten Balkens
Text := 'Gelb';
end;
// Eine BarSeries erzeugen
Chart1BarSeries1:= TBarSeries.Create(self);
Chart1.AddSeries(Chart1BarSeries1);
//Chart1BarSeries1.OnGetMark:=@ChartGetMark;
Chart1BarSeries1.Styles := ChartStyles1;
Chart1BarSeries1.Legend.Multiplicity := lmStyle;
// Daten einfügen: wir haben 3 Balken, also braucht die Series 3 y-Werte!
Chart1BarSeries1.ListSource.YCount := 3;
for i:=0 to 5 do
begin
x := i;
y1 := Random; // Nehme hier als Beispiel nur Zufallszahlen...
y2 := Random;
y3 := Random;
//Chart1BarSeries1.Marks.Style:=smsCustom;
//Chart1BarSeries1.Marks.Style:=smsNone;
//Chart1BarSeries1.Marks.Style:=smsValue;
//Chart1BarSeries1.Marks.Style:=smsPercent;
Chart1BarSeries1.Marks.Style:=smsLabel;
//Chart1BarSeries1.Marks.Style:=smsLabelPercent;
//Chart1BarSeries1.Marks.Style:=smsLabelValue;
//Chart1BarSeries1.Marks.Style:=smsLegend;
//Chart1BarSeries1.Marks.Style:=smsPercentTotal;
//Chart1BarSeries1.Marks.Style:=smsLabelPercentTotal;
//Chart1BarSeries1.Marks.Style:=smsXValue;
DisplayValue:='Wert '+FloatToStr(x); // Mein Problem!!!!
Chart1BarSeries1.ListSource.AddXYList(x, [y1,y2,y3],DisplayValue); // <---- hier kann man nur einen Label-Wert übergeben
// ich brauche aber drei (für y1, y2 und y3)
end;
// Legende einschalten
Chart1.Legend.Visible := true;
end;
end.
Danke und viele Grüße