[gelöst] TAChart TChartToolSet EscapeCancels scheint nicht zu funktionieren

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

[gelöst] TAChart TChartToolSet EscapeCancels scheint nicht zu funktionieren

Beitrag von Michl »

Gesundes Neues noch!

Ich frickel gerade an einem alten Projekt und überarbeite da gerade einen TAChart. Dabei nutze ich eine ChartToolSet und dabei mehrere Tools z.B. ein TPanDragTool und ein TZoomDragTool. Dabei würde ich gern die jeweilige Operation abbrechen, wenn der Nutzer Escape drückt. Laut Doku https://wiki.lazarus.freepascal.org/TAC ... tion#Tools sollte dafür das Property EscapeCancels ("Some tools publish the EscapeCancels property which, if set to true, cancels the tool operation if the user pressed the ESC key") geeignet sein.

Leider funktioniert das hier nicht, Windows 7, Lazarus 2.2.0RC1 r65419 FPC 3.2.2 x86_64-win64-win32/win64.

Gibt es da noch einen Kniff, auf den ich achten muss?

Test mit einem ZoomDragTool anbei.
Dateianhänge
ChartTest.zip
(2.02 KiB) 38-mal heruntergeladen
Zuletzt geändert von Michl am Di 4. Jan 2022, 08:22, insgesamt 1-mal geändert.

Code: Alles auswählen

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

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

Re: TAChart TChartToolSet EscapeCancels scheint nicht zu funktionieren

Beitrag von wp_xyz »

Damit der Chart die ESC-Taste überhaupt zu sehen bekommt, muss er fokussiert sein. Das kannst du erreichen, indem du im OnAfterMouseDown oder OnBeforeMousedown-Event des ZoomDrag-Tools die Methode

Code: Alles auswählen

Chart.SetFocus;
aufrufst. Oder noch einfacher: Chart.AutoFocus auf true setzen. Aber das hat den Nachteil, dass ein vor der Tool-Aktion fokussiertes Control den Fokus verliert, wenn du schon allein die Maus über den Chart bewegst. Daher würde ich die Methode mit dem Mouse-Handler bevorzugen.

Siehe auch: https://wiki.lazarus.freepascal.org/TAC ... g_in_tools

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

Re: TAChart TChartToolSet EscapeCancels scheint nicht zu funktionieren

Beitrag von Michl »

Geht prima. Danke!

Code: Alles auswählen

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

Antworten