TChart - Klick auf Kurven Bezeichner? [gelöst ab Laz 2.3.0]

Rund um die LCL und andere Komponenten
Antworten
MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

TChart - Klick auf Kurven Bezeichner? [gelöst ab Laz 2.3.0]

Beitrag von MmVisual »

Hallo,

Ich möchte gerne bei einem Doppelklick bei einer der Legenden für die Kurven heraus bekommen zu welcher Kurve der Benutzer Doppelklick ausgeführt hat, so dass ich den entsprechenden Datensatz zeigen kann.
Ich habe einige Beispiele gefunden wie man Punkt aus der Kurve anklicken kann, aber nicht ein Klick auf die Legende der Kurven.
Hier im Bild sind 6 Kurven drin, da ist unten die Legende:
Bild1.png
Bild1.png (13.44 KiB) 1405 mal betrachtet
Hat jemand noch eine Idee wie man da heraus bekommen kann wo geklickt wurde?

Die einzelnen Kurven werden über TLineSeries aufgebaut, ein "OnLegendeClick" oder so gibt es nicht. Ich habe auch nichts gefunden wie ich anhand der Mausposition den Legenden-Text herausfinden kann. Jedenfalls kann ich mit TLineSeries.Tag die ID des Datensatzes mir merken, wenn ich irgendwie die TLieSeries heraus bekomme, dann hätte ich schon alles.
Das TChart ist so ein umfangreiches Tool, ich bin mir sicher dass es geht, ich weiß nur noch nicht wie.

Ich habe auch versucht eine "TChartListbox" ein zu fügen, aber da ich die Kurven doppeln muss damit die Preis Texte immer oben stehen und nicht von anderen Kurven übermalt werden, werden in der "TChartListbox" die doppelte Kurven mit gezeigt. "TChartListbox" beachtet weder TLineSeries.Legend.Visible := False; noch TLineSeries.ShowInLegend := False;. Sonst habe ich auch hier keine Möglichkeit gefunden die doppelte Kurven nicht in TChartListbox zu zeigen:
Bild2.png
Bild2.png (11.51 KiB) 1405 mal betrachtet
Vielen Dank für die Hilfe
Grüße Markus
Zuletzt geändert von MmVisual am So 24. Okt 2021, 10:59, insgesamt 1-mal geändert.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: TChart - Klick auf Kurven Bezeichner?

Beitrag von Winni »

Hi!

Du hast Recht: Es gibt nahezu alles bei TChart.
Du brauchst das Legend Click Tool:

https://wiki.lazarus.freepascal.org/TAC ... click_tool

Winni

PS.: Ich weiß: Dokumentationen lesen ist feige. Aber manchmal hilft es.

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

Re: TChart - Klick auf Kurven Bezeichner?

Beitrag von wp_xyz »

MmVisual hat geschrieben:
Fr 22. Okt 2021, 14:55
Ich habe einige Beispiele gefunden wie man Punkt aus der Kurve anklicken kann, aber nicht ein Klick auf die Legende der Kurven.
Hier im Bild sind 6 Kurven drin, da ist unten die Legende:
[...]
Ich habe auch versucht eine "TChartListbox" ein zu fügen, aber da ich die Kurven doppeln muss damit die Preis Texte immer oben stehen und nicht von anderen Kurven übermalt werden, werden in der "TChartListbox" die doppelte Kurven mit gezeigt. "TChartListbox" beachtet weder TLineSeries.Legend.Visible := False; noch TLineSeries.ShowInLegend := False;. Sonst habe ich auch hier keine Möglichkeit gefunden die doppelte Kurven nicht in TChartListbox zu zeigen:
Es gibt zwar in Laz 2.2RC1 ein TLegendClickTool, aber das detektiert nur einen Klick auf der Legende pauschal, nicht aber, auf welcher Series geklickt wurde. (wäre eine gute Idee, das zu ergänzen... Mache einen Feature Request, damit ich das nicht vergesse)

TChartListbox ist trotz deiner Vorbehalte z.Z. die Komponente der Wahl. Diese Listbox baut sich völlig unabhängig von der Legende auf und irgnoriert auch die in der Series für den Legenden-Auftritt vorgesehenen Properties. Immer dann, wenn die Legende neu aufgebaut wird, wird für jede Series das Ereignis OnAddSeries generiert, in dem du mit dem boolschen Parameter ASkip festlegen kannst, ob die Series weggelassen werden soll.

Code: Alles auswählen

procedure TForm1.ChartListbox1AddSeries(ASender: TChartListbox; 
  ASeries: TCustomChartSeries; AItems: TChartLegendItems; var ASkip: Boolean);
begin
  if ASeries = LineSeries1 then ASkip := true;
end;
Mit ChartListbox ist die Legende nicht mehr nötig --> Chart.Legend.Visible := false. Aber Achtung: Die ChartListbox ist kein Bestandteil des Chart. Wenn du also z.B. den Chart in einem Bitmap speichern willst, wird die Chartlistbox fehlen, daher solltest du in diesem Fall vor der Bitmap-Ausgabe die Chart.legend kurz wieder einschalten.

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TChart - Klick auf Kurven Bezeichner?

Beitrag von MmVisual »

Dankeschön für die Infos.
Ich habe das mit der "TChartListbox" gelöst.

Per default ist die ItemHeight zu klein ich habe das so korrigiert:

Code: Alles auswählen

TChartListbox.ItemHeight := TChartListbox.Canvas.TextHeight('Hj') + 6;
Das Skip habe ich so gelöst, es übernimmt die Eigenschaft aus der Kurve:

Code: Alles auswählen

Procedure TfrmChart.chrtListAddSeries(ASender: TChartListbox;
  ASeries: TCustomChartSeries; AItems: TChartLegendItems; Var ASkip: Boolean);
Begin
  ASkip := Not ASeries.Legend.Visible;
end; 


Mit Doubleklick hol ich mir so das Item:

Code: Alles auswählen

Procedure TfrmChart.chrtListDblClick(Sender: TObject);
Var i: Integer;
Begin
  i := chrtList.GetIndexAtY(chrtList.ScreenToClient(Mouse.CursorPos).Y);
  If i >= 0 Then
    iSelID := Chart.Series[i].Tag;
end;   
So funktioniert das ganz gut :D

Viele Grüße Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TChart - Klick auf Kurven Bezeichner?

Beitrag von MmVisual »

Das was mir nun aufgefallen ist, Bugs und Features habe ich hier in der Bugtracker geschrieben.

https://gitlab.com/freepascal.org/lazar ... sues/39437
https://gitlab.com/freepascal.org/lazar ... sues/39438
https://gitlab.com/freepascal.org/lazar ... sues/39439
https://gitlab.com/freepascal.org/lazar ... sues/39440

Ich habe mal alles einzeln geschrieben, damit man das besser fixen und testen kann.

Viele Grüße Markus.
EleLa - Elektronik Lagerverwaltung - www.elela.de

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

Re: TChart - Klick auf Kurven Bezeichner?

Beitrag von wp_xyz »

Hierzu hat das TLegendClickTool nun ein Event OnSeriesClick bekommen. das erzeugt wird, wenn man auf einem Legendeneintrag klickt und dieser mit einer Series verbunden ist. Ob das ein einfacher oder ein Doppelklick sein muss, kann man mit Hilfe der Shift-Eigenschaft des LegendClickTools festlegen. Ich habe vorerst ein kleines Testprogramm an den Bug-Report angefügt, das ich wahrscheinlich aber auch in die TAChart-Demos übernehmen werde.

Achtung: Das ganze setzt natürlich Lazarus-main voraus, und wird als neues Feature auch nicht in die v2.2 aufgenommen werden.

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TChart - Klick auf Kurven Bezeichner?

Beitrag von MmVisual »

Ich kann das Demo nicht öffnen, das "TLegendClickTool" ist bei mir nicht installiert. Also es fehlt im "Normalen" Setup von Lazarus Setup V2.0.12.
Welches Paket muss ich da dazu installieren?

Daher hatte ich auch die Infos von hier:
https://wiki.lazarus.freepascal.org/TAC ... click_tool
nicht wirklich verwenden können, da könnte man vielleicht noch dazu schreiben was man noch dazu installieren muss damit das funktioniert was in der Doku steht.

Viele Grüße Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de

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

Re: TChart - Klick auf Kurven Bezeichner?

Beitrag von wp_xyz »

Steht in meinem Post: du brauchst Laz-main.

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TChart - Klick auf Kurven Bezeichner?

Beitrag von MmVisual »

Das finde ich auch nicht. Weder in
Package > Installierte Packages einrichten
Da kann ich das nicht hinzufügen
Noch im OPM, da gibt es auch kein "Laz-Main".

Ich versuche gerade über FpcUpDeluxe das Lazarus "Trunk" zu installieren, dauert eine weile, vielleicht ist es da dabei.
EleLa - Elektronik Lagerverwaltung - www.elela.de

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TChart - Klick auf Kurven Bezeichner?

Beitrag von MmVisual »

Im neuen Lazarus (Trunk von gerade eben) ist das drin, dankeschön.

ChartToolset1LegendClickTool1.Shift := [ssLeft] >>> funktioniert

ChartToolset1LegendClickTool1.Shift := [ssDouble] >>> funktioniert noch nicht.
EleLa - Elektronik Lagerverwaltung - www.elela.de

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

Re: TChart - Klick auf Kurven Bezeichner?

Beitrag von wp_xyz »

Müsste jetzt gehen...

Die anderen gemeldeten Bugs zur ChartListbox habe ich auch behoben (ebenfalls in Laz-main/trunk).

Sorry wegen "Laz-main": nach dem Umzug auf GitLab wird die Entwicklungsversion von Lazarus nicht mehr als "trunk" sondern als "main" bezeichnet.

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TChart - Klick auf Kurven Bezeichner?

Beitrag von MmVisual »

Hab das Laz-Main mit FPCUpDeluxe aktualisiert,

ChartToolset1LegendClickTool1.Shift := [ssDouble]
geht noch nicht.
EleLa - Elektronik Lagerverwaltung - www.elela.de

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

Re: TChart - Klick auf Kurven Bezeichner?

Beitrag von wp_xyz »

MmVisual hat geschrieben:
So 24. Okt 2021, 00:23
ChartToolset1LegendClickTool1.Shift := [ssDouble]
geht noch nicht.
Doch: ChartToolset1LegendClickTool1.Shift := [ssLeft, ssDouble], denn das Tool muss wissen, welche Maustaste geklickt wird.

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TChart - Klick auf Kurven Bezeichner?

Beitrag von MmVisual »

Ja, Stimmt, so geht das richtig.

Gestern Nacht war ich schon zu müde dafür...

Dankeschön, Viele Grüße Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de

Antworten