[gelöst] TAChart vertikale Achse nicht zoomen

Rund um die LCL und andere Komponenten
Antworten
Michl
Beiträge: 2513
Registriert: Di 19. Jun 2012, 12:54

[gelöst] TAChart vertikale Achse nicht zoomen

Beitrag von Michl »

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
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;  

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

Re: TAChart vertikale Achse nicht zoomen

Beitrag von wp_xyz »

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).

Michl
Beiträge: 2513
Registriert: Di 19. Jun 2012, 12:54

Re: TAChart vertikale Achse nicht zoomen

Beitrag von Michl »

TipTop!!!

Funktioniert genau so, wie ich es gewollt habe!

Vielen Dank :D


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;  

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

Re: TAChart vertikale Achse nicht zoomen

Beitrag von wp_xyz »

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.

Michl
Beiträge: 2513
Registriert: Di 19. Jun 2012, 12:54

Re: TAChart vertikale Achse nicht zoomen

Beitrag von Michl »

:lol: :lol: :lol:

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.
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.
Eine sehr gute Empfehlung!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Antworten