Auch ich habe lange daran geknabbert, die DateTimeIntervalChartSource zu verstehen, und ich bin auch jetzt nicht sicher, ob mir wirklich alles klar ist...
Je nach Intervall zwischen linkem und rechtem Ende der Achse und Größe des Chart werden unterschiedliche Basis-Einheiten gewählt, also ob die Ticks in Einheiten von Jahren, Monaten, Wochen, Tagen etc weitergezählt werden. Mit Steps kann man lediglich auswählen, bei welchen Basiseinheiten eine Achsenbeschriftung angezeigt werden soll. In deinem Beispiel wird eine Beschriftung angezeigt, wenn die Basiseinheit Jahre, Monate oder Tage sind. Zoomst du sehr stark in den Chart hinein, wird der Unterschied zwischen links und rechts so klein, dass als Einheit z.B. Stunden gewählt werden, und die Beschriftung wird komplett unterdrückt. Aus diesem Grund lasse ich Steps eigentlich immer unverändert.
Du hast des weiteren noch ein DateTimeFormat angegeben. Dies setzt die automatische Suche nach dem best.möglichen Format außer Kraft, und es werden die Achsen immer mit dem Format 'dd.mm.yy' beschriftet, selbst wenn die Spanne zwischen links und rechts nur 1 Sekunde beträgt. Dann sind natürlich alle Labels identisch beschriftet.
Dazu hatte vor kurzem jemand im englischen Forum eine Idee, für jede Basis-Einheit ein eigenes Beschriftungsformat angeben zu können. Das ist in der Trunk-Version von Lazarus eingebaut - siehe Property DateTimeStepFormat.
Zur Steuerung der Beschriftung gibt es noch die Eigenschaft "SuppressPrevUnit", default = true, durch die der konstante Bestandteil der Datum-/Zeit-Beschriftung unterdrückt wird. Wenn also z.B. die Labels im Tagesabstand für die Tage 1.10.2016, 2.10.2016, 3.10.2016, etc, gesetzt werden, erscheint der Monat nur am 1.10, bei den folgenden Tagen aber nicht mehr (bis zum November, wo das erste Label wieder mit Monat beschriftet wird). Schaltest du SuppressPrevUnit aus, wird das Format DateTimeStepFormat[dtDay] genommen.
Ich bin mir nicht sicher, ob man die Umschaltpunkte zwischen den einzelnen Basiseinheiten mit Params.MinLength und .MaxLength steuern kann. Beim Umschalten jedenfalls wird das Ereignis OnDateTimeStepChange ausgelöst, dem der aktuelle Wert der Basiseinheit als Parameter ASteps mit auf den Weg gegeben wird. Du könntest dir so z.B. vorübergehend die aktuelle Basiseinheit anzeigen lassen:
Code: Alles auswählen
procedure TForm1.DateTimeIntervalChartSource1DateTimeStepChange(
Sender: TObject; ASteps: TDateTimeStep);
begin
Caption := GetEnumName(TypeInfo(TDateTimeStep), ord(ASteps));
end;