Delphi-PRAXiS
Seite 1 von 2  1 2      

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 werte anzeigen (https://www.delphipraxis.net/53563-tchart-werte-anzeigen.html)

renekr 19. Sep 2005 05:32


TChart werte anzeigen
 
Hi,
Kann mir jemand sagen wie ich bei dem TChart bei onclick oder ev auch wenn man nur mit der Maus über den Wert geht ,den Wert ev im Hint anzeigen zu lassen.

Danke.

BrunoT 19. Sep 2005 07:11

Re: TChart werte anzeigen
 
Hallo René,

ich weiss zwar nicht, welche Tchart-Version du hast, aber es sollte so gehn:

Delphi-Quellcode:
procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
  Var
  i:Integer;
begin
  chart1.ShowHint:=True;
  For i:=0 To Chart1.SeriesCount-1 do
  If Chart1.Series[i].GetCursorValueIndex >0 Then
 Chart1.Hint:=(Chart1.Series[i].ValueMarkText[Chart1.Series[i].GetCursorValueIndex]);
end;
mfg

BrunoT

renekr 19. Sep 2005 08:19

Re: TChart werte anzeigen
 
Hi,
Danke für die rasche Antwort.
Also ich benutze den normalen Chart in der Delphi 2005 Version.

Ich befülle ihn mit 3 Serien ( Punkt Serien ).

Ich will wenn man den Chart Move ( click benötige ich ja für den Zoom ) ( einen wert,egal welche Serie( also alle 3 )) das er dann im Hint anzeigt den Seriennamen,Y Value,X Spaltenbeschriftung.

HAbe das von dir probiert ,aber er bringt immer fehler Listenindex überschreitet maximun -1. oder halt keinen wert.

marabu 19. Sep 2005 09:33

Re: TChart werte anzeigen
 
Hallo René,

ich würde es ungefähr so machen:

Delphi-Quellcode:
interface
...
type
  TMainForm = class(TForm)
    TheChart: TChart;
    ActionButton: TButton;
    procedure FormCreate(Sender: TObject);
  private
    procedure ActionButtonClick(Sender: TObject);
    procedure AppShowHint(var HintStr: string; var CanShow: boolean; var HintInfo: THintInfo);
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

procedure TMainForm.ActionButtonClick(Sender: TObject);
var
  bs: TBarSeries;
  i: integer;
begin
  bs := TBarSeries.Create(myChart);
  TheChart.AddSeries(bs);
  with bs do begin
    Add(40, 'labelA', clRed);
    Add(50, 'labelB', clGreen);
    Add(70, 'labelC', clBlue);
    Add(30, 'labelD', clYellow);
  end;
  with bs do
    for i := 0 to Count - 1 do
      XLabel[i] := IntToStr(i * 100);
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  Application.OnShowHint := AppShowHint;
end;

procedure TMainForm.AppShowHint(var HintStr: string; var CanShow: boolean;
  var HintInfo: THintInfo);
var
  part: TChartClickedPart;
  index: integer;
  c: TChart;
  cs: TChartSeries;
begin
  if (hintinfo.HintControl is TChart) then
  begin
    c := TChart(HintInfo.HintControl);
    c.CalcClickedPart(HintInfo.CursorPos, part);
    if Assigned(part.ASeries) then begin
      cs := part.ASeries;
      index := cs.GetCursorValueIndex;
      if index >= 0 then
        HintStr := cs.YValueToText(cs.YValues[index]);
      HintInfo.ReshowTimeout := 50;
    end;
  end;
end;

end.
Grüße vom marabu

ValueMarkText() durch YValueToText() ersetzt

BrunoT 19. Sep 2005 10:28

Re: TChart werte anzeigen
 
Hallo René,

Das mit dem Listenindex liegt an Deinem anderen Code. Ich habe das noch einmal unter D2005 getestet und noch mal abgeändert, da das falsche angezeigt wurde.

Delphi-Quellcode:
procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  Var
  i:Integer;
begin
  chart1.ShowHint:=True;
  For i:=0 To Chart1.SeriesCount-1 do
  If Chart1.Series[i].GetCursorValueIndex >=0 Then
    Chart1.Hint:=Chart1.Series[i].YValueToText(Chart1.Series[i].YValues[Chart1.Series[i].GetCursorValueIndex])
  else
    Chart1.Hint:='';
end;

@marabu: :gruebel: warum verwendest du den Hint der Application? Bei ClickPart fällt ja die Schleife weg(kannte ich noch nicht) :mrgreen:

marabu 19. Sep 2005 10:47

Re: TChart werte anzeigen
 
Hallo Holger,

Zitat:

Zitat von BrunoT
warum verwendest du den Hint der Application?

wenn du damit Application.ShowHint meinst, dann deshalb:

Delphi-Quellcode:
...
HintInfo.ReshowTimeout := 50;
...
Ich weiß momentan nicht, wie ich die Aktualisierung des Hint anders sicherstellen kann. Standardmäßig aktualisiert die VCL das hint window ja nur, wenn ich vorher mit der Maus die Komponente verlasse. Kennst du eine einfachere Methode?

marabu

BrunoT 19. Sep 2005 11:28

Re: TChart werte anzeigen
 
@marabu,

1. die Frage war nicht so gemeint, dass ich Deine weisen (-Marabu-) Fähigkeiten in Frage gestellt habe. :oops:
2. nein, kenne ich nicht, da ich folgendes nicht wusste.
Zitat:

Standardmäßig aktualisiert die VCL das hint window ja nur, wenn ich vorher mit der Maus die Komponente verlasse.
Ich habe mich mit Hints noch gar nicht beschäftigt, da ich solche^^ Informationen eigentlich immer in der Statusbar anzeige. Da habe ich keine Verweildauer :stupid:.

Aber: mein Quelltext geht auch! :mrgreen: und aktualisiert sich! :gruebel:

mfg

BrunoT

marabu 19. Sep 2005 11:59

Re: TChart werte anzeigen
 
Holger, ich bin erst durch deinen Code auf die Idee gekommen nach einer Lösung zu forschen. Natürlich funktioniert dein Ansatz über das Ereignis OnMouseMove(). Mir fiel nur auf, dass dabei (der value mit dem index 0 unterschlagen und) das hint window nicht aktualisiert wurde. Zum Testen habe ich ein Balken Diagramm verwendet. Wenn ich die Maus von einem zum nächsten Balken führe ohne die Komponente zu verlassen, dann wird nur der zuerst von der Maus erfasste Value im hint window angezeigt. Wenn das bei dir wirklich anders ist, dann suche ich mir schonmal einen Besen zum fressen...

marabu

renekr 19. Sep 2005 12:02

Re: TChart werte anzeigen
 
Hi @,
erstmal Danke schön das Ihr so schnell Antwortet.

HAbe das von marabu getestet und folgendes festgestellt:

Ich habe wie gesagt 3 Serien :
Y Value 50-150 ca.
X gebe ich keine Value mit,sondern setze nur den Text mit 2005 KW : 41 zb.:

Wenn ich auf 1 Serie gehe kommt der Wert im Hint bei den anderen 2 die X Beschriftung .

MAch i da was falsch?

Danke.

marabu 19. Sep 2005 12:17

Re: TChart werte anzeigen
 
Hallo René,

ich habe, als ich bei Holger abgeschrieben habe, einen Fehler mit abgeschrieben (mich so reinzulegen - das merke ich mir). Ich habe die notwendige Änderung an meinem Code angebracht.

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:00 Uhr.
Seite 1 von 2  1 2      

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