Hallo Allerseits,
mit der Maus kann im Chart zur Laufzeit wunderbar zoomen (indem man ein Fenster aufzieht). Allerdings möchte ich gern nur den horizontalen Bereich zoomen, die vertikale Achse soll vom Zoom unberührt bleiben.
Ich könnte mir vorstellen, selber OnMouseDown und -Up abzufangen und händisch zu zoomen.
Bevor ich aber versuche das umzusetzen, wollte ich gern wissen, ob es dafür nicht ein besseres bzw. übliches Vorgehen gibt?
Vielen Dank
Michael
[gelöst] TAChart vertikale Achse nicht zoomen
[gelöst] TAChart vertikale Achse nicht zoomen
Zuletzt geändert von Michl am Fr 1. Mai 2015, 11:55, insgesamt 1-mal geändert.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection; Re: TAChart vertikale Achse nicht zoomen
Das ZoomDragTool hat eine Eigenschaft "RatioLimit"; wenn hier zrlFixedY gewählt wird, zoomt nur die x-Achse, y ist fest.
Leider kommt man an das eingebaute ZoomDragTool schlecht ran. Bevor ich jetzt Tricks verrate, wie das geht: einfacher ist es, einfach ein TChartToolset auf das Formular zu klicken und mit der Eigenschaft "Toolset" des Chart zu verbinden. Dann nach Doppelklick ein ZoomDragTool hinzufügen, "Shift" auf "ssLeft" (damit es auf die linke Maustaste reagiert), und dann halt RatioLimit auf zrlFixedY setzen.
Beim Ausprobieren habe ich eben gesehen, das das Zoomrechteck bei ratioLimit=zrlFixedY etwas unschön gezeichnet wird - das werde ich mir demnächst mal genauer ansehen. Aus Workaround kannst du die Margins des Charts auf 0 setzen, so dass das Zoomrechteck bis an die Achse reicht. Durch den XOR-Modus wird dann ober die obere Begrenzungslinie ausgelöscht - um das zu verhindern, lasse den oberen Margin auf 1.
Das Ausgabe des Zoom-Rechtecks kannst du übrigens mehr steuern, indem du den DrawingMode des DragTools auf tdmNormal setzst, dann kannst du mit Frame und Brush, sowie Transparency das Zoom-Rechteck neu gestalten.
Noch ein Hinweis: Wenn der Chart mit einem ToolSet verbunden ist, werden die eingebauten Tools abgeschaltet. Das heißt, dass auch Panning durch Ziehen mit der rechten Maustaste nicht mehr geht. Falls du das vermisst, setze dann einfach ein eigenes PanDragTool aufs Formular (mit Shift auf ssRight).
Leider kommt man an das eingebaute ZoomDragTool schlecht ran. Bevor ich jetzt Tricks verrate, wie das geht: einfacher ist es, einfach ein TChartToolset auf das Formular zu klicken und mit der Eigenschaft "Toolset" des Chart zu verbinden. Dann nach Doppelklick ein ZoomDragTool hinzufügen, "Shift" auf "ssLeft" (damit es auf die linke Maustaste reagiert), und dann halt RatioLimit auf zrlFixedY setzen.
Beim Ausprobieren habe ich eben gesehen, das das Zoomrechteck bei ratioLimit=zrlFixedY etwas unschön gezeichnet wird - das werde ich mir demnächst mal genauer ansehen. Aus Workaround kannst du die Margins des Charts auf 0 setzen, so dass das Zoomrechteck bis an die Achse reicht. Durch den XOR-Modus wird dann ober die obere Begrenzungslinie ausgelöscht - um das zu verhindern, lasse den oberen Margin auf 1.
Das Ausgabe des Zoom-Rechtecks kannst du übrigens mehr steuern, indem du den DrawingMode des DragTools auf tdmNormal setzst, dann kannst du mit Frame und Brush, sowie Transparency das Zoom-Rechteck neu gestalten.
Noch ein Hinweis: Wenn der Chart mit einem ToolSet verbunden ist, werden die eingebauten Tools abgeschaltet. Das heißt, dass auch Panning durch Ziehen mit der rechten Maustaste nicht mehr geht. Falls du das vermisst, setze dann einfach ein eigenes PanDragTool aufs Formular (mit Shift auf ssRight).
Re: TAChart vertikale Achse nicht zoomen
TipTop!!!
Funktioniert genau so, wie ich es gewollt habe!
Vielen Dank
Weil es mir eben aufgefallen ist: Das Zoomen funktioniert nicht immer. Ich konnte es noch nicht an irgendetwas fest machen. Kennst du da ein Problem?
Funktioniert genau so, wie ich es gewollt habe!
Vielen Dank
Weil es mir eben aufgefallen ist: Das Zoomen funktioniert nicht immer. Ich konnte es noch nicht an irgendetwas fest machen. Kennst du da ein Problem?
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection; Re: TAChart vertikale Achse nicht zoomen
Nein. Vielleicht kannst du das ja irgendwann reproduzieren, und dann ich's mir näher anschauen.
[EDIT]
Vielleicht meinst du das: Gezoomt wird nur, wenn man das Rechteck von links oben nach rechts unten zieht, weil die anderen Richtungen wegen der Kompatibilität zu neueren Delphi-Versionen für Unzoom reserviert sind. Du kannst aber unter "RestoreExtentOn" die anderen Richtungen ausschalten und z.B. nur den Click für das Unzoom übrig lassen. Damit ist es möglich, das Zoom-Rechteck in jeder beliebigen Richtung aufzuziehen.
[EDIT]
Vielleicht meinst du das: Gezoomt wird nur, wenn man das Rechteck von links oben nach rechts unten zieht, weil die anderen Richtungen wegen der Kompatibilität zu neueren Delphi-Versionen für Unzoom reserviert sind. Du kannst aber unter "RestoreExtentOn" die anderen Richtungen ausschalten und z.B. nur den Click für das Unzoom übrig lassen. Damit ist es möglich, das Zoom-Rechteck in jeder beliebigen Richtung aufzuziehen.
Re: TAChart vertikale Achse nicht zoomen
Dass nur gezoomt wird, wenn man das Fenster von links nach rechts aufzieht, hatte ich bemerkt. Dass man dabei auch von oben nach unten ziehen muss, nicht (diese Bewegung fällt bei dem zrlFixedY gar nicht auf).
Danke, das war es.
Eine sehr gute Empfehlung!wp_xyz hat geschrieben:Du kannst aber unter "RestoreExtentOn" die anderen Richtungen ausschalten und z.B. nur den Click für das Unzoom übrig lassen. Damit ist es möglich, das Zoom-Rechteck in jeder beliebigen Richtung aufzuziehen.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;