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 TChart richtig beschriften (https://www.delphipraxis.net/128351-tchart-richtig-beschriften.html)

Hansa 28. Jan 2009 13:21


TChart richtig beschriften
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,

um die Frage zu verstehen, muss man sich den Anhang ansehen. Ich will folgendes : Unten in dem rot eingekreisten soll statt der '2', weil es sich um Monat handelt 'Feb.' stehen. Das gelb eingekreiste soll da, wo es jetzt steht, nicht zu sehen sein (das überlappt sich manchmal und man kann dann gar nichts mehr lesen. Stattdessen sollen diese zwei Zahlen immer unterhalb des Monats angezeigt werden. Dort solls dann ungefähr so aussehen :
Delphi-Quellcode:
Feb.
1,62
0,00
Preisfrage ist, wo kann man das einstellen ? :shock:

guinnes 28. Jan 2009 13:34

Re: TChart richtig beschriften
 
Für die gelb eingekreisten :
Seriesxx.Marks.Visible auf false
Für den roten Kreis :
Chartxx.OnGetAxisLabel bedienen ( Sollte gehen, wenn nicht, Chartxx.BottomAxis.Multiline auf True

Hansa 28. Jan 2009 13:55

Re: TChart richtig beschriften
 
Gelber Kreis : erledigt, Thx, Guiness.

Zu dem anderen :

Delphi-Quellcode:
procedure TfrmLinieChart.chStatGetAxisLabel(Sender: TChartAxis;
  Series: TChartSeries; ValueIndex: Integer; var LabelText: String);
begin
  inherited;
LabelText := 'ASADF'
end;
Nur mal kurz so getestet. Dann sind auch die Y-Achsenbeschriftungen betroffen. Wie halte ich denn die auseinander ? Wofür steht Labelindex ? Noch lieber wäre mir, wenn einer mir sagt, wie man die Hilfe dazu bringt, mit TChart zu funktionieren. :mrgreen:

guinnes 28. Jan 2009 14:10

Re: TChart richtig beschriften
 
Zitat:

Zitat von Hansa
Dann sind auch die Y-Achsenbeschriftungen betroffen. Wie halte ich denn die auseinander ?

Der Sender sagt dir, welche der ( theoretisch seehr vielen ) Axis jetzt gemeint ist :
Delphi-Quellcode:
if Sender = DBChart1.BottomAxis then
begin
Zitat:

Wofür steht Labelindex ?
LabelIndex hab ich gar nicht, ValueIndex zeigt auf das X/Y-Werte-Paar, für das nun die Achsenbeschriftung gesucht wird
( Die Hilfe ist in der Tat etwas hakelig )

p.s. : Mehrzeilig hab ich noch nicht probiert, sollte aber gehen ( bei den Marks gehts definitiv )

Edit2 : Geht, Zeilentrennzeichen ist #$0D

Hansa 28. Jan 2009 15:05

Re: TChart richtig beschriften
 
Uff, wird mühsamer als gedacht. Da geht fast nix. :mrgreen:

Delphi-Quellcode:
procedure TfrmLinieChart.chStatGetAxisLabel(Sender: TChartAxis;
  Series: TChartSeries; ValueIndex: Integer; var LabelText: String);
begin
  inherited;
  ShowMessage(IntToStr(ValueIndex));
if (ValueIndex MOD 2 = 0) then
  if (Sender is ???) then begin
    LabelText := 'ASADF'
  end;

end;
Ja, ValueIndex war gemeint und das steht immer auf -1. Bei "Sender is" kann ich angeben was ich will. Compiler machts nicht. Und zu guter Letzt : wozu und was macht der Parameter "Series" ?

guinnes 28. Jan 2009 15:24

Re: TChart richtig beschriften
 
Zitat:

Zitat von Hansa
Uff, wird mühsamer als gedacht. Da geht fast nix. :mrgreen:

Delphi-Quellcode:
procedure TForm1.ChartGetAxisLabel(Sender: TChartAxis;
  Series: TChartSeries; ValueIndex: Integer; var LabelText: String);
begin
  if Sender = Chart.BottomAxis then
  begin
    LabelText := LabelText + #$0D + 'Unten' + #$0D + 'Zeile3';
  end;
end;
Sender =, nicht is

Zitat:

Ja, ValueIndex war gemeint und das steht immer auf -1.
bei mir auch, ich hatte gehofft, das wäre in der " Normalen " Version nicht so ( Ich benutze TeeChart Prof. )
Zitat:

Und zu guter Letzt : wozu und was macht der Parameter "Series" ?
das sollte die Serie sein, aus der du die X/Y-Paare auslesen kannst. Wird möglicherweise nur gefüllt, wenn du bestimmte Serien mit bestimmten Achsen verbindest.
Hast du dir mal die Demos angesehen ?

Hansa 28. Jan 2009 18:05

Re: TChart richtig beschriften
 
Bis hierher geht alles :

Delphi-Quellcode:
procedure TfrmLinieChart.chStatGetAxisLabel(Sender: TChartAxis;
  Series: TChartSeries; ValueIndex: Integer; var LabelText: String);
begin
  inherited;
  if Sender = chStat.BottomAxis then begin
    LabelText := 'ASADF';
  end;
end;
D.h. die X-Achse ist mit dem Labeltext beschriftet. Aber eben alle Werte. In der Hilfe steht nun dazu :

Zitat:

Deklaration

property OnGetAxisLabel: TAxisOnGetLabel;

Beschreibung

Für jede angezeigte Achsenbeschriftung wird ein Ereignis ausgelöst. Es gibt zwei verschiedene Einsatzmöglichkeiten für OnGetAxisLabel:
1) Achsenbeschriftungen entsprechen Werten. In diesem Fall ist der Parameter Series Nil und der ValueIndex ist -1.
2) Achsenbeschriftungen entsprechen Reihenpunkten. Der Parameter Series entspricht einer zulässigen TChartSeries und der ValueIndex der aktuellen Reihenpunktposition. Sie können den für LabelText verwendeten Parameter ändern, um eine andere Achsenbeschriftung anzuzeigen.
Bei mir ist ja auch alles -1. Ich benutze also 1) Wo und wie kommt nun der Parameter Series ins Spiel ? Bei den Demos finde ich nichts passendes.

guinnes 28. Jan 2009 18:21

Re: TChart richtig beschriften
 
Zitat:

Zitat von Hansa
Aber eben alle Werte.

Das sollte dich bei dem Quelltext auch nicht wundern.
Ich habe das Zeug nicht zu Hause, d.h. ich kuck Morgen mal danach ( Ich hab da noch irgendwo die TeeChart-Quäl-Texte :wink: )wie man von 1 nach 2 umschaltet

guinnes 29. Jan 2009 08:36

Re: TChart richtig beschriften
 
Stell Chartxx.BottomAxis.LabelStyle auf talText, dann werden Series und ValueIndex richtig gefüllt

Hansa 29. Jan 2009 14:56

Re: TChart richtig beschriften
 
Liste der Anhänge anzeigen (Anzahl: 1)
Aha, das muss man erst mal finden.Nächstes Problem:der Platz unterhalb der Bottomaxis reicht nur für 2 Zeilen.Eventuell werden 5 gebraucht.LabelsMultiline gibts noch, das steuert aber nur, ob #13 oder ein Leerzeichen das Zeilenumbruchzeichen ist. Mit #13 gings ja, sofern mehr Platz da wäre.und da noch ein Schönheitsfehler :die Werte sind zentriert, was bei Zahlen komisch aussieht.

Hier ist noch der Source :

Delphi-Quellcode:
procedure TfrmLinieChart.chStatGetAxisLabel(Sender: TChartAxis;
  Series: TChartSeries; ValueIndex: Integer; var LabelText: String);
begin
  inherited;
  if Sender = chStat.BottomAxis then begin
    LabelText := MonatStr [ValueIndex + 1];
    if ValueIndex mod 2 = 0 then
      LabelText := LabelText + #13 + IntToStr(ValueIndex+ 100)
    else
      LabelText := LabelText + #13 + IntToStr(ValueIndex+1);
  end;
end;

guinnes 29. Jan 2009 17:57

Re: TChart richtig beschriften
 
  • 1. Hast du mein Beispiel mal probiert ? Das macht ohne Probleme 3 Zeilen ( und wahrscheinlich auch noch mehr ) und richtet den Platz dafür automatisch ein
    2. Was soll das Inherited bei einer Event-Methode ? Hab ich in 11 Jahren bei einem Event noch nie benutzt ( Aber ich lerne ja gerne noch dazu )
    3. In Nachhinein macht das Sinn : Wenn du Werte aus den Reihen ausgeben willst, kann TeeChart das alleine, wenn du Text angibts, dann will TeeChart einen Text und stellt dir alles zur Verfügung, was du dazu brauchen könntest
    4. Leider hat das mit den Quelltext heute auf der Arbeit nicht getan, der Scanner konnte den File nicht öffnen. Ich versuchs mal am WE zu Hause
    5. Leider gehen keine Leerzeichen ( oder ich habs falsch gemacht )

Hansa 30. Jan 2009 08:44

Re: TChart richtig beschriften
 
Zitat:

Zitat von guinnes
1. Hast du mein Beispiel mal probiert ? Das macht ohne Probleme 3 Zeilen ( und wahrscheinlich auch noch mehr ) und richtet den Platz dafür automatisch ein
keine Leerzeichen ( oder ich habs falsch gemacht )

Delphi-Quellcode:
  if Sender = chStat.BottomAxis then begin
    LabelText := MonatStr [ValueIndex + 1] + #$0D + 'Unten' + #$0D + 'Zeile3';
  end;
Eben nicht, das ist es ja. Siehe Anhang. Habe das Chart etwas vergrößert. Erst dann sieht man was von der nächsten Zeile. Sofern allerdings im Labeltext 5 Zeilen gebraucht werden, dann lässt sich das Chart gar nicht so stark vergrößern, dass diese sichtbar würden.

Zitat:

Zitat von guinnes
[list]2. Was soll das Inherited bei einer Event-Methode ? Hab ich in 11 Jahren bei einem Event noch nie benutzt ( Aber ich lerne ja gerne noch dazu )

Echt nicht ? :mrgreen: Das macht Delphi doch automatisch. Die Vorfahr-Methode wird aufgerufen. Weil diese leer ist, macht es also nichts. In diesem Fall ist das also (vorerst) überflüssig, aber wer weiß ? :shock:

guinnes 30. Jan 2009 09:27

Re: TChart richtig beschriften
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Hansa
Eben nicht, das ist es ja. Siehe Anhang. Habe das Chart etwas vergrößert. Erst dann sieht man was von der nächsten Zeile. Sofern allerdings im Labeltext 5 Zeilen gebraucht werden, dann lässt sich das Chart gar nicht so stark vergrößern, dass diese sichtbar würden.

MarginBottom auf 10 = mindestens 6 Zeilen ( Siehe Anhang )
Zitat:

Das macht Delphi doch automatisch.
Ich weiss ja nicht, welche Version du hast, Delphi 5 macht das definitiv nicht

Edit : Leerzeichen gehen jetzt doch, warum auch immer, damit kannst du das Problem der Ausrichtung also lösen

Hansa 30. Jan 2009 10:26

Re: TChart richtig beschriften
 
War erst bei Buchstabe F im OI. Denselben Effekt hätte erreicht im Foot 5 Leerzeilen einzufügen. :shock: Wahrscheinlich wird dadurch indirekt MarginBottom geändert. Mache das aber dann doch lieber direkt. Wenn man jetzt das Ganze aber in der Praxis sieht : mehrere Zeilen sind ja schön und gut. Nur, welche Zeile gehört zu welcher Kurve ? Da es nur strings sind, kann man die Schriftfarbe ja nicht so einstellen, wie die Farbe der Kurve, oder irgendwie doch ?

guinnes 30. Jan 2009 11:06

Re: TChart richtig beschriften
 
Mehrere Horizontale Skalen erstellen und jeder eine andere Schriftfarbe zuweisen ( Sieht aber nicht so toll aus, weil auch jedes mal die Ticks gezeichnet werden )
Edit : Oder selber zeichnen :
Sich jede zu beschriftende Stelle merken und im OnAfterDraw selber die Texte zeichnen


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:35 Uhr.

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