Dann hätten wir noch :
Delphi-Quellcode:
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;
Du übergibst einen X-Wert und die Y-Werte, die diesem X-Wert am nächsten sind, werden ausgegeben
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;