Chart Crosshair mit Cursortasten bewegen

Rund um die LCL und andere Komponenten

Chart Crosshair mit Cursortasten bewegen

Beitragvon fseuhs » 11. Aug 2019, 13:22 Chart Crosshair mit Cursortasten bewegen

In einem Chart mit Lineserien mit der X-Achse als Zeitachse werden die Messwerte als Y-werte dargestellt.
Mit einem Crosshair Tool und ein Hint Tool kann man bei gedrückter Alt-Taste mit der Maus die Messwertkurve abfahren und bekommt die Zeit und den Messwert im Hint angezeigt.
Ich möchte gerne aber weiter bei gedrückten Alt-Taste die Kurve mit den Cursortasten abfahren, ohne die Maus zu bewegen.
Ein weitere Wunsch wäre dann noch, dass man den angezeigten Hint durch Drücken der Entertaste in z.B. einem Memo abspeichern kann.
Es gibt zwar die Events Keydown usw. ich weiß aber trotzdem nicht wie ich da weiter komme.
Mit bestem Dank
LG Fritz
fseuhs
 
Beiträge: 11
Registriert: 20. Sep 2017, 10:40
Wohnort: Niederösterreich
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon wp_xyz » 11. Aug 2019, 16:32 Re: Chart Crosshair mit Cursortasten bewegen

Das ist nicht ganz einfach, weil TChart keinen Zugriff auf die Tastatur-Events hat. Aber schau dir das beigefügte Beispiel an, das deinen Vorstellungen recht nahe kommen könnte. Ich erhebe nicht den Anspruch, dass das die "richtige" Lösung ist, aber es war die, die mir am schnellsten einfiel.

Zunächst gibt es ein TDataPointClickTool, mit dem man auf einen Datenpunkt klicken kann; der Index und die zugehörige Series (falls sich mehrere auf dem chart befinden) werden zwischengespeichert (--> FCurrIndex, FCurrSeries). Der Chart wird neu ausgegeben. Weil an die LineSeries ein OnCustomDrawPointer-Event-Handler angehängt ist und dieser entsprechend programmiert ist, wird der angeklickte Datenpunkt vergößert dargestellt. Damit dieser nun mit den Cursor-Tasten über den Chart bewegt werden kann, ist das KeyPreview-Property des Formulars auf true gesetzt, so dass die Tastatur-Ereignisse, die der Chart nicht verarbeiten kann, vom Formular abgefangen werden. Dort gibt es nun einem KeyDown-Handler, der auf die Pfeiltasten den markierten Datenpunkt um 1 weiterbefördert und mit der ENTER-Taste die x/y-Werte des markierten Datenpunkts ausliest, in einen String umwandelt und in ein Memo schreibt (dort gibt es noch das Problem, dass unbeabsichtigte Leerzeilen eingefügt werden - dem bin ich aber nicht mehr nachgegangen). Ein Problem war auch, dass sobald das Memo fokussiert ist, diese Tasten nicht mehr vom Formular abgefangen werden. Daher habe ich kurzerhand den Focus auf den Chart gesetzt - das ist aber nicht die "feine Art", denn das kommt vielleicht für den Benutzer unerwartet. Bleibt noch der Punkt, wie man die Markierung des Datenpunkts wieder entfernt. Dazu klickt man irgendwo ins Formular (nur nicht auf einen Datenpunkt), und ein UserDefinedTool erkennt das und entfernt die Markierung wieder.
Dateianhänge
read_values.zip
(3.22 KiB) 4-mal heruntergeladen
wp_xyz
 
Beiträge: 2970
Registriert: 8. Apr 2011, 09:01

Beitragvon fseuhs » 12. Aug 2019, 12:32 Re: Chart Crosshair mit Cursortasten bewegen

Danke für Dein Beispiel. Habe es ausprobiert und das hat mich zu noch mehr inspiriert.

Das Problem mit der Enter Taste habe ich so gelöst, dass ich in KEYDown den Key auf 0 setze.
Weiters habe ich Deine Idee des focus setzen erweitert (Wußte nicht, dass das geht).
In Form Create setze ich Chart1.Tabstop auf true, FCurrIndex auf 0 und FCurrseries auf Chart1LineSeries1.
In FormKeyDown frage ich ab ob der Focus auf Chart1 gesetzt ist und verarbeite dann die Keys entsprechend.
Key auf 0 setzen wird nur ausgeführt wenn der Key nicht der Tabkey ist. damit kann ich wieder den Focus zum Memo wechseln.
In FormKeyUp frage ich den Focus des Charts ab und setze entsprechend die Hintergrundfarbe, somit ist ersichtlich wo sich der Focus befindet.

Der Fantasie sind weiter keine Grenzen gesetzt für weitere Funktionen mit dem Keyboard, wie Cursor, Zoom ...

LG
fseuhs
 
Beiträge: 11
Registriert: 20. Sep 2017, 10:40
Wohnort: Niederösterreich
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon wp_xyz » 12. Aug 2019, 14:44 Re: Chart Crosshair mit Cursortasten bewegen

Na dann! Zum erwähnten Zoom muss ich noch erwähnen, das das standardmäßig verwendete Zoomen ausgeschaltet wird, sobald eine ChartTools-Komonente mit dem Chart verbunden wird. Um weiterhin zoomen zu können, musst du nur ein ZoomDrag-Tool der ChartTools-Komponente hinzufügen.
wp_xyz
 
Beiträge: 2970
Registriert: 8. Apr 2011, 09:01

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried