![]() |
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. |
Re: TChart werte anzeigen
Hallo René,
ich weiss zwar nicht, welche Tchart-Version du hast, aber es sollte so gehn:
Delphi-Quellcode:
mfg
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; BrunoT |
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. |
Re: TChart werte anzeigen
Hallo René,
ich würde es ungefähr so machen:
Delphi-Quellcode:
Grüße vom marabu
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. ValueMarkText() durch YValueToText() ersetzt |
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: |
Re: TChart werte anzeigen
Hallo Holger,
Zitat:
Delphi-Quellcode:
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?
...
HintInfo.ReshowTimeout := 50; ... marabu |
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:
Aber: mein Quelltext geht auch! :mrgreen: und aktualisiert sich! :gruebel: mfg BrunoT |
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 |
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. |
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 06:55 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 by Thomas Breitkreuz