Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mal wieder TChart - Index des angeklicken Punktes ermitteln (https://www.delphipraxis.net/124985-mal-wieder-tchart-index-des-angeklicken-punktes-ermitteln.html)

Sven M. 28. Nov 2008 11:28


Mal wieder TChart - Index des angeklicken Punktes ermitteln
 
Hi zusammen,
ich versuche in einem TChart herauszufinden, welchen Punkt der Series der User angeklickt hat. Dazu gibt es ja die Funktion "GetCursorValueIndex". Diese ist allerdings sehr "intolerant"...;) Und reagiert schon nicht mehr, wenn man nur knapp daneben klickt (bzw. liefert dann -1). Gibt es nicht eine Möglichkeit, den Bereich dieser Funktion etwas großzügiger zu gestalten?
Oder gibt's noch 'ne andere Funktion, die ähnliches leistet, die ich aber übersehen habe...?!


Besten Dank für eure Hilfe!
Sven

ConstantGardener 28. Nov 2008 14:03

Re: Mal wieder TChart - Index des angeklicken Punktes ermitt
 
Hallo Sven,

also ich benutze für sowas eigentlich das OnSeriesClicked-Event des TChart. Für Dragging von Werten merke ich mir hier den Index und verschiebe dann die Y-Werte des Chart.

Funktioniert meiner Meinung nach recht tolerant. Ich habs jetzt nicht ausprobiert aber vielleicht ist auch die Größe der Punkte/Marks entscheidend ?

mfg cg

wp_xxyyzz 28. Nov 2008 15:01

Re: Mal wieder TChart - Index des angeklicken Punktes ermitt
 
Lt. D7-Online-Hilfe zur Methode Clicked von TCustomSeries: "Angeklickt bedeutet, daß sich die X- und Y-Koordinaten innerhalb der Bildschirmregiongrenzen der Punkte befinden." Daraus folgt, dass du die Punkte größer machen musst, wenn die Empfindlichkeit nicht passt. Generell erscheint mir das Treffen auch kleiner Punkte leichter zu sein, wenn man eine visuelle Unterstützung durch einen anderen Mauscursor erhält. Dazu wäre z.B. folgender Code im OnMouseMove-Event für TChart geeignet:

Delphi-Quellcode:
procedure TForm1.ChartMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
var
  cp : TChartClickedPart;
begin
  Chart.CalcClickedPart(point(X,Y), cp);
  if (cp.Part in [cpLegend, cpAxis, cpTitle, cpFoot, cpSeries])
    then Screen.Cursor := crHandPoint
    else Screen.Cursor := crDefault;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz