Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TChart - Balken beschriften


Dhakiyah - Mo 23.01.12 15:09
Titel: TChart - Balken beschriften
Hallo!
Ich habe ein kleines Balkendiagramm, an dem ich die Werte an die Balken zusätzlich schreiben möchte.
Siehe Beispiel Bild "1500"

Aber wie geht das ???


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure Tfrm_mdi_statistik.Draw_Chart;
var tc_ser: THorizBarSeries;
begin
  ch_statistik.Title.Text.Clear;
  ch_statistik.Title.Text.Add('Allgemeine Zeitstatistik');
  tc_ser := THorizBarSeries.Create(ch_statistik);
  ch_statistik.AddSeries(tc_ser);
  tc_ser.Marks.Visible := False;
  tc_ser.Title := 'Urlaub';
  tc_ser.AddXY(30,1,'Gearb. Stunden',clred);
  tc_ser.AddXY(80,2'Urlaub', clblue);
  tc_ser.AddXY(90,3'Krankheit', clgreen);
end;


EDIT:
ODER den Wert IN den Balken schreiben, wäre auch möglich.

Die x-Achse sind %.


guinnes - Mo 23.01.12 17:38

Warum schaltest du nicht einfach die Marks ein ?


Dhakiyah - Di 24.01.12 09:57

Das wäre dann aber wieder so, wie ich es nicht haben wollte...

Bei der y-Achse sollten die Beschreibungen stehen 'Urlaub, Krankheit, etc.'
Die x-Achse ist das ganze in % und an die Balken wollte ich dran schreiben, welcher Wert dahinter steht.

Geht das nicht?


guinnes - Di 24.01.12 10:18

user profile iconDhakiyah hat folgendes geschrieben Zum zitierten Posting springen:
Geht das nicht?
Natürlich geht das so, du mußt nur die Eigenschaften dementsprechend einstellen. Ansonsten bleibt dir nur : Im OnAfterDrawValues selber zeichnen


Dhakiyah - Di 24.01.12 10:29


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  ch_statistik.Title.Text.Clear;
  ch_statistik.Title.Text.Add('Allgemeine Zeitstatistik');
  tc_ser := THorizBarSeries.Create(ch_statistik);
  ch_statistik.AddSeries(tc_ser);
  tc_ser.Marks.Visible := True;
  tc_ser.AddXY(110,1,'Gearb. Stunden', clblue);
  tc_ser.AddXY(50,2,'1444',clred);
  tc_ser.AddXY(30,3'Urlaub', clgreen);


So, jetzt schreibt er an die y-Achse UND an den Balken den Text. In der Legende steht dann der %-Wert...
Ich weiß nicht was ich machen muss/soll/kann... :cry: :cry: :cry:


guinnes - Di 24.01.12 10:37

Als 1. solltest du Marks.Style auf smsValue stellen ( oder auf smsPercent oder smsPercentTotal, jenachdem, was dir lieber ist), dann noch Marks.Arrow.Visible auf false, Marks.Transparent auf true und Marks.Frame.Visible auf False


Dhakiyah - Di 24.01.12 10:43

Das habe ich gemacht.
Aber es ist immer noch nicht so, wie ich es möchte.
Ich kann immer nur 2 Werte anzeigen, ich brauche aber 3.
Jetzt schreibt er zwar die Werte an die Balken dran, aber den %-Wert, den ich ja schon in der x-Achse habe.
Ich möchte aber an den Balken den tatsächlichen WErt dran schreiben, z.B. "1750 STunden"


guinnes - Di 24.01.12 10:47

user profile iconguinnes hat folgendes geschrieben Zum zitierten Posting springen:
Ansonsten bleibt dir nur : Im OnAfterDrawValues selber zeichnen


Dhakiyah - Di 24.01.12 10:50

Und wie geht das?
Hab da gar keine Erfahrung mit, mache zum ersten Mal was mit Diagrammen..... :cry: :cry: :cry:


guinnes - Di 24.01.12 11:31

Du schreibst einen EventHandler für das Ereigniss AfterDrwaValues deiner Serie. Darin zeichnest auf die Canvas deines Charts. Das ist nicht Diagrammspezifisch, sondern einfach nur ein Zeichnen auf eine Canvas.

Alternativ kannst du den Event OnGetMarkText der Serie benutzen, um in den Marks anzuzeigen, was immer du willst


Dhakiyah - Di 24.01.12 15:12

Ich habe es heraus gefunden, es geht über eine TStrings Liste:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var s_krank, s_urlaub, s_gearb: TStrings;
  ...
  ...
  ...
  s_krank := TStringList.Create;
  s_urlaub := TStringList.Create;
  s_gearb := TStringList.Create;
  s_krank.Add('500');
  s_urlaub.Add('200');
  s_gearb.Add('1750');
  tc_ser.Marks.Item[0].text := s_gearb;
  tc_ser.Marks.Item[1].text := s_krank;
  tc_ser.Marks.Item[2].text := s_urlaub;