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
Dhakiyah hat folgendes geschrieben : |
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
guinnes hat folgendes geschrieben : |
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; |
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!