![]() |
TChart: Hint bei MouseOver anzeigen
Hallo Leute!
Ich habe folgendes Problem: Ich möchte beim ChartMouseMove-Event meines TChart-Elements (TeeChart Standard v8.03.11068) ein Hint anzeigen. Der Hint soll aber immer erscheinen, nicht nur wenn dezidiert auf eine Series geklickt wird. Im Hint will ich Daten mehrerer Series anzeigen.. Mit GetCursorValueIndex erhalte ich ja bei Klick auf eine Series den entsprechenden X-Wert im Chart, gibt es eine Möglichkeit den X Wert des ChartMouseMove-Events in den X-Wert der Series umzurechnen? Hat jemand andere Vorschläge, wie ich mein Problem lösen könnte? Besten Dank im Voraus! ![]() Edit: Die gefundene Funktion Chart.Series[4].XScreenToValue(X); liefert immer 0 ! |
AW: TChart: Hint bei MouseOver anzeigen
Leider zu spät heute. Ich habe die Lösung auf der Arbeit
|
AW: TChart: Hint bei MouseOver anzeigen
Zitat:
|
AW: TChart: Hint bei MouseOver anzeigen
Delphi-Quellcode:
fChargen bzw. fLaufende sind 2 Stringlisten, in denen ich die anzuzeigenden Hints hinterlegt habe
procedure TPlanung.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); Var Index : Integer; procedure GetHint ( aList : TStringList); begin with aList do begin fChargenName := Names[Index]; Chart1.Hint := Names[Index] + #$0d + Trim(Copy(Strings[Index],16,255)); end; end; begin if fEnableMouseMove Then begin Chart1.ShowHint := False; Chart1.Hint := #$0D; fChargenName := ''; Index := Series1.GetCursorValueIndex; if (Index >= 0) and (Index < fChargen.Count) Then begin GetHint(fChargen); fMouseKessel := Trunc(Series1.YValues.Value[Index]); end else begin Index := Series2.GetCursorValueIndex; if (Index >= 0) and (Index < fLaufende.Count) Then GetHint(fLaufende); end; if Chart1.Hint <> #$0d Then Chart1.ShowHint := True; end; end; |
AW: TChart: Hint bei MouseOver anzeigen
Zitat:
|
AW: TChart: Hint bei MouseOver anzeigen
Dann hätten wir noch :
Delphi-Quellcode:
Du übergibst einen X-Wert und die Y-Werte, die diesem X-Wert am nächsten sind, werden ausgegeben
procedure TfrmTrendview.ShowValueAtXPos(Zeit : Double);
var I : Integer; Index : Integer; Halb : Integer; dtmp : Double; begin lbMouseZeit.Caption := DateTimeToStr(Zeit); for I := 1 to cMaxTrendAnzahl do begin if (FTrends[I].Serie.XValues.Count > 0) Then Begin With FTrends[I].Serie do Begin Try Index := YValues.Count Div 2; Halb := Index; While Halb > 4 do Begin Halb := Halb div 2; dtmp := XValues.Value[Index]; if dtmp > Zeit Then Dec(Index,Halb) else if dtmp < Zeit Then Inc(Index,Halb); end; dtmp := XValues.Value[Index]; if dtmp > Zeit Then While XValues.Value[Index] > Zeit do Dec(Index) else While XValues.Value[Index] < Zeit do Inc(Index); Except Index := -1; end; // Ausgabe der Werte if (Index > -1) and (Index < YValues.Count) Then Begin dtmp := YValues[Index]; dtmp := FTrends[I].KurvenDaten.Ma + (dtmp * (FTrends[I].KurvenDaten.Me - FTrends[I].KurvenDaten.MA) / 100); end else dtmp := -1000; end; ShowTrendValue(I,dtmp); end; end; end; Aufruf :
Delphi-Quellcode:
procedure TfrmTrendview.Chart1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer); Var Zeit : Double; begin // ist die Maus im Kurvenrechteck und der Trackbar nicht eingeschaltet ? if (PtInRect(Chart1.ChartRect,Point(X,Y))) and not fLinieanIsAn then begin // Zeit der Mausposition Berechnen Zeit := Chart1.BottomAxis.CalcPosPoint(X); ShowValueAtXPos(Zeit); end; { if Maus im Kurvenbereich } end; |
AW: TChart: Hint bei MouseOver anzeigen
Danke!
Das hat mir schon mal weitergeholfen! Jetzt hab ich noch ein Problem: Ich trage auf der X-Achse ein Datum als Label auf: Chart.Series[j].Add(Anzahl,timetostr(ob.ZeitPunkt)) Kann ich dieses Datum irgendwie mit dieser X-Postion wieder auslesen? Edit: Problem gelöst: Chart.Series[2].XLabel[index]; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 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