TChart - DateTime auf X-Achse - Einstellungsfrage(n)

Rund um die LCL und andere Komponenten
Antworten
vx-rexx
Beiträge: 21
Registriert: Do 11. Mär 2010, 10:21

TChart - DateTime auf X-Achse - Einstellungsfrage(n)

Beitrag von vx-rexx »

Moin, Moin,

ich habe ein (Balken)Chart, bei dem die X-Achse per Source DateTimeIntervalChartSource, Style smsLabel festgelegt ist.
Als Steps sind dtsDay, dtsMonth und dtsYear True.
Wo kann ich einstellen, dass der Tag in der X-Achse immer angezeigt wird. Bei bestimmten Auflösungen (beispielsweise 3 Werte = 3 Balken) wird die Beschriftung der X-Achse nicht dargestellt. Nehme ich aber dtsHour dazu, dann wird die Beschriftung angezeigt, allerdings mit Uhrzeit, welche ich aber gar nicht brauche/will, denn der Wert der dargestellt wird ist der Tageswert. Auch scheint die Darstellung in Abhängigkeit der Größe des Chart's (Fenster) zu sein. Mein Chart ist per default Height/Width 687/805 groß. Es ist aber an das Fenster gekoppelt und kann somit theoretisch über mehrere Bildschirme breit werden. In der default-Größe wird die X-Achse ab 6 Werten (=6Tage) angezeigt. Ziehe ich das Fenster (Chart) breiter, sind irgendwann die Tage weg.

Ein anderes Chart (Linien) ebenfalls mit X-Achse mit Source DateTimeIntervalChartSource, Style smsLabel, hat zu den Datumsangaben wie oben auch Stunde, Minute und Sekunde auf True. Kann ich irgendwo festlegen, dass z.B. das Datum immer und auch unterhalb der Zeit angezeigt wird?

eingesetzte Versionen
Windws: Lazarus 0.9.31 SVN 33083, FPC 2.5.1
Linux: Lazarus 0.9.31 Source vom 27.11.2011, FPC 2.4.4

wp_xyz
Beiträge: 5134
Registriert: Fr 8. Apr 2011, 09:01

Re: TChart - DateTime auf X-Achse - Einstellungsfrage(n)

Beitrag von wp_xyz »

Verwende das Property TDateTimeChartSource.DateTimeFormat um die Formatierung der Marks festzulegen. Es gelten die Formatcodes entsprechend der Standardfunktion FormatDateTime.

Die Positionierung der Marks ist m.E. immer noch nicht gut gelöst. Versuche mal, mit den Intervals der Achse herumzuspielen. Vielleicht ergibt sich dann das von dir gewünschte Verhalten. Falls alle Stricke reißen: stelle deine Frage im offiziellen Lazarus-Forum (http://www.lazarus.freepascal.org/index ... tion=forum" onclick="window.open(this.href);return false;), der Autor der Komponente ist sehr kooperativ und findet meist eine überraschende und einfache Lösung, bzw. stellt ein paar Tage später eine Korrektur vor.

Thomas B.
Beiträge: 90
Registriert: Fr 2. Nov 2007, 13:32
OS, Lazarus, FPC: Win (L 1.0 FPC 2.6.0)
CPU-Target: 32Bit
Wohnort: Ulm

Re: TChart - DateTime auf X-Achse - Einstellungsfrage(n)

Beitrag von Thomas B. »

Probier mal mit dem Ereignis Chart1.AxisList.BottomAxis.OnMarkToText die Anzeige entsprechend anzupassen.
Wenn das nicht hilft, kann ich auch nur auf das hilfreiche Feedback vom Autor der Komponente verweisen

vx-rexx
Beiträge: 21
Registriert: Do 11. Mär 2010, 10:21

Re: TChart - DateTime auf X-Achse - Einstellungsfrage(n)

Beitrag von vx-rexx »

Danke für die Hinweise.
wp_xyz hat geschrieben:Verwende das Property TDateTimeChartSource.DateTimeFormat um die Formatierung der Marks festzulegen. Es gelten die Formatcodes entsprechend der Standardfunktion FormatDateTime.
Das Beschriftung kann ich dadurch nun besser/genauer festlegen. :)
wp_xyz hat geschrieben:Die Positionierung der Marks ist m.E. immer noch nicht gut gelöst. Versuche mal, mit den Intervals der Achse herumzuspielen. Vielleicht ergibt sich dann das von dir gewünschte Verhalten.
An den Intervallen hatte ich mich schon einige Stunden versucht, allerdings nicht mit dem von mir gewünschtem Ergebnis.
Thomas B. hat geschrieben:Probier mal mit dem Ereignis Chart1.AxisList.BottomAxis.OnMarkToText die Anzeige entsprechend anzupassen.
Mir erschliesst sich dieses Ereignis nicht ganz. AText ist soweit klar. Aber was bewirkt AMark? Egal was ich da einstelle, ich bekomme immer:

Code: Alles auswählen

unit1.pas(169,64) Hint: Value parameter "AMark" is assigned but never used
Ich werde wohl dem Vorschlag von wp_xyz folgen und im engl. Forum nachfragen.

Thomas B.
Beiträge: 90
Registriert: Fr 2. Nov 2007, 13:32
OS, Lazarus, FPC: Win (L 1.0 FPC 2.6.0)
CPU-Target: 32Bit
Wohnort: Ulm

Re: TChart - DateTime auf X-Achse - Einstellungsfrage(n)

Beitrag von Thomas B. »

OK, etwas ausführlicher:
AMark ist der Wert vom Achsen-Strich, der beliebig (um)benannt werden kann. Ausgabe geht dann über AText.

Hier ein Beispiel wie ich es mal verwendet habe:

Code: Alles auswählen

uses DateUtils;
...
procedure TForm2.Chart1AxisList1MarkToText(var AText: AnsiString; AMark: Double);
var AHour,AMinute,ASecond,AMilliSecond: Word; 
begin   
  DecodeTime(AMark,AHour,AMinute,ASecond,AMilliSecond);
  If ASecond = 0 then
    AText := FormatDateTime('dd.mm. hh:mm',AMark)
  else
    AText := FormatDateTime('hh:mm:ss',AMark);     
end;

vx-rexx
Beiträge: 21
Registriert: Do 11. Mär 2010, 10:21

Re: TChart - DateTime auf X-Achse - Einstellungsfrage(n)

Beitrag von vx-rexx »

Vielen Dank!
Wieder etwas gelernt. :D

Antworten