Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   tLineseries in tChart einzelne Punkte markieren (https://www.delphipraxis.net/177309-tlineseries-tchart-einzelne-punkte-markieren.html)

olaf43 30. Okt 2013 16:58

tLineseries in tChart einzelne Punkte markieren
 
Ich benutze Delphi XE4 Pro.
Ich habe ein Chart mit Lineseries. Ich möchte an einzelnen Punkten der Linie einen Markierungstext anbringen.
Wenn ich bei den ausgewählten Punkten Addxy(x,y,Label) mit drei parametern benutze, bleibt das Label unsichtbar. Erst wenn ich marks=visible setze werden Labels sichtbar, aber leider an allen Punkten.

Ich habe schon versucht, zusätzlich eine PointSeries hinzuzuführen. Leider versucht diese, die angegebenen Labels auf die x-achse zu schreiben und die normale Skalierung der lineseries zu löschen.
Muss ich die labels händisch auf canvas zeichnen?

Der schöne Günther 30. Okt 2013 18:35

AW: tLineseries in tChart einzelne Punkte markieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Der Trick ist das
Delphi-Quellcode:
OnGetMarkText
-Event der
Delphi-Quellcode:
TLineSeries
! Dort legst du den Text für das Mark fest. Soll es nicht zu sehen sein, nimmst du einfach einen leeren String:

Delphi-Quellcode:
procedure TForm1.Series1GetMarkText(
   Sender: TChartSeries;
   ValueIndex: Integer;
   var MarkText: string
);
begin
   case ValueIndex of
      5: MarkText := 'Hallo';
      12: MarkText := 'Welt';
      19: MarkText := 'Bohnen und Speck';
   else
      MarkText := EmptyStr;
   end;
end;
Ergebnis im Anhang.

olaf43 22. Jan 2014 13:44

AW: tLineseries in tChart einzelne Punkte markieren
 
Vielen Dank für die Antwort,
Damit damit etwas passiert, d.h. damit OnGetMarkText aufgerufen wird, muss ich wohl
Marks.Visible:=true;
setzen.
Dann verschwindet aber die Skalierung der x-Achse vollständig und statt dessen werden von jeder sichtbaren Markierung gestrichelte Linien zur x-achse gezeichnet und dort wird der Mark Text auch nochmal eingezeichnet.
Ich möchte aber meine normale x-Achsen Skalierung beibehalten.
Geht das?

Der schöne Günther 22. Jan 2014 13:53

AW: tLineseries in tChart einzelne Punkte markieren
 
Zitat:

Zitat von olaf43 (Beitrag 1244902)
Damit damit etwas passiert [...] muss ich wohl Marks.Visible:=true;
setzen.

Richtig.

Skalierung? Kannst du ein konkretes Mini-Beispiel einstellen? Das was du unten auf der X-Achse an Beschriftung hast sind "Labels" die du ja (im ersten Beitrag) auch explizit selbst so hinzugefügt hast. Die normale Beschriftung sind auch "Labels", nur da gleicht das Label eben dem X-Wert (wenn du nichts angegeben hast). "Labels" und "Marks" sind zwei vollkommen verschiedene paar Schuhe: "Marks" sind die schwebenden Schildchen im Graphen, "Labels" sind das, womit die Achsen beschriftet werden (Das nennst du "Skalierung", oder?)

olaf43 22. Jan 2014 14:50

AW: tLineseries in tChart einzelne Punkte markieren
 
Ich habe jetzt noch weiter rumprobiert.
Die skalierung der x-achse verschwindet wohl (für mich unverständlich), sobald ich zu einer Lineseries .addxy mit einem dritten(Label) Parameter aufrufe.
Den label Parameter in AddXY hätte ich gerne benutzt, weil ich im Moment, wo ich AddXY aufrufe, den benötigten Label/Mark-Text kenne.
Wenn später OnGetMarkText aufgerufen wird, ist diese Information schlecht zu rekonstruieren.

Ich habe das Problem jetzt dadurch (schlecht) gelöst, dass ich zu jeder Lineseries, die ich in dem Diagramm zeichne, noch zusätzlich eine Liste mit den Label/Mark-Texten anlege. Aus diesen Listen hole ich mir dann in OnGetMarkText den MarkText.
Das funktioniert jetzt zwar einwandfrei, aber geht das nicht einfacher? Kann man das Verschwinden der x-Achsen-Skalierung nicht verhindern?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 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