Chart Marker erzeugen und Werte darstellen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
DL3AD
Beiträge: 453
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Buster (L 2.0.2)
CPU-Target: 64Bit
Wohnort: Rügen

Chart Marker erzeugen und Werte darstellen

Beitrag von DL3AD »

Hallo,
ich lasse Messwerte in einem Chart darstellen - dass funktioniert bereits.
Nun möchte ich einen Marker erzeugen den ich auf der Kurve entlang bewege und dabei die jeweiligen Messwerte darstellen.

Kann mit da jemand weiterhelfen ?
Testprogramm ist im Anhang.

Gruß Frank
Dateianhänge
ChartTest_DB_SRC.zip
(127.71 KiB) 14-mal heruntergeladen

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

Re: Chart Marker erzeugen und Werte darstellen

Beitrag von wp_xyz »

Zunächst mal stürzte dein Programm mit einem Float-Konvertierungsfehler ab, weil deine Datendatei Dezimalpunkte enthält, mein System aber auf Komma eingestellt ist. Das kann man beheben, indem man am Anfang DefaultFormatSettings.DecimalSeparator auf '.' (Punkt) setzt. Aber darüber hinaus würde ich auch dazu raten, die Daten bei dieser Gelegenheit gleich auf eine ListChartSource umzukopieren, denn die Performance von DBChartSource ist bei größeren Datenmengen furchtbar schlecht, vor allem wenn auch noch andere Controls an der DBSource hängen wie z.B. ein DBGrid - im beigefügten, abgeänderten Projekt findest du wie das geht.

Nun zur eigentlichen Frage: Für diese Zwecke brauchst du ein TChartToolset auf dem Formular, das du mit der Feld "Tools" des Chart verbinden musst. Dann auf dem Toolset doppel-klicken und ein DatapointCrosshairTool auswählen ("Fadenkreuz für Datenpunkte"). Das Tool zeigt ein Fadenkreuz immer wenn sich die Maus in der Nähe eines Datenpunktes befindet. Wenn du ein kleineres Kreuz willst, setze "Size" auf einen positiven Wert (z.B. 16). Die Genauigkeit, mit der ein Datenpunkt getroffen werden muss, wird mit "GrabRadius" festgelegt. Wenn das Fadenkreuz nur zusammen mit einer Maustaste oder Steuerungstaste angezeigt werden soll, wähle die entsprechende Option unter "Shift". Um einen Text mit den Datenpunkt-Werten auszugeben, habe ich ein Label aufs Formular gesetzt und im OnDraw-Ereignis des CrosshairTools folgenden Code eingegeben:

Code: Alles auswählen

procedure TForm1.ChartToolset1DataPointCrosshairTool1Draw(
  ASender: TDataPointDrawTool);
var
  x, y: Double;
begin
  if ASender.Series <> nil then
  begin
    x := (ASender.Series as TLineSeries).XValue[ASender.PointIndex];
    y := (ASender.Series as TLineSeries).YValue[ASender.PointIndex];
    Label1.Caption := Format('Ug = %.3f V, Ia = %.3f mA', [x, y]);
  end else
    Label1.Caption := '';
end;
Achtung: Wenn ein externes Toolset mit "Tools" des Chart verbunden ist, funktioniert das eingebauten Maus-Zoomen und -Scrollen nicht mehr. Um dies wieder zu aktivieren, musst du im Toolset per "+ Add" auch noch ein ZoomDragTool ("Zoomen durch Ziehen") und ein ZoomPanTool ("Verschieben durch Ziehen") hinzufügen. Das "Shift" des ZoomDragTool setzt du auf ssLeft, um mit der linken Maustaste das Zoomrechteck aufziehen zu können, und das "Shift" des ZoomPanTool setzt du z.B. auf ssRight, um den gezoomten Ausschnitt mit gedrückter rechter Maustaste verschieben zu können. Aber nochmal Achtung: Falls du beim CrosshairTool eine dieser beiden Maustasten verwendet hast, kommen sich die veschiedenen Tools in die Quere, hier würde ich dann raten, beim CrosshairTool z.B. die Ctrl-Taste mit dazuzunehmen (oder wie im beigefügten Beispiel gar kein Shift zu verwenden).
Dateianhänge
ChartTest_DB_SRC_wp.zip
(3.44 KiB) 14-mal heruntergeladen

DL3AD
Beiträge: 453
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Buster (L 2.0.2)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Chart Marker erzeugen und Werte darstellen

Beitrag von DL3AD »

Hallo wp_xyz,
Danke perfekt :D

Sorry für den Crasch.
Den DefaultFormatSettings.DecimalSeparator habe ich natürlich in meinem Projekt auf Punkt gesetzt - dies war nur ein TestProgramm :wink:

Gruß Frank

Antworten