在每个系列的每条线上显示提示TChart-Delphi

lstz6jyr  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(202)

在我的项目中,我有几个TChart,每个系列有2个系列和2个条形图。[][1](https://i.stack.imgur.com/Zu2SX.png)

在它们的每一个上,我需要显示鼠标悬停在它们上面的系列栏的价值。我正在使用onMouseMove事件:

procedure TfrmBoard.chartCountMouseMove(Sender: TObject; Shift:
        TShiftState; X, Y: Integer);
    var
      SeriesIndex  : Integer;
    begin
      with Tcontrol(Sender) do
      begin
        seriesIndex := (Sender as TChart).series[0].clicked(X,Y);
        ShowHint := SeriesIndex <> -1;

        if ShowHint  then
           Hint := FloatToStr((Sender as TChart).series[0].YValues.Value[seriesIndex]);

      end;

end;

此代码显示图表中第一个序列的值,但不显示第二个序列的值。

如果我添加一个循环,该事件将只显示第二个序列的值。

procedure TfrmBoard.chartCountMouseMove(Sender: TObject; Shift:
    TShiftState; X, Y: Integer);
var
  SeriesIndex  : Integer;
  i: Integer;
begin
  with Tcontrol(Sender) do
  begin
    for I := 0 to (Sender as TChart).SeriesCount - 1 do
    begin

    seriesIndex := (Sender as TChart).series[i].clicked(X,Y);
    ShowHint := SeriesIndex <> -1;

    if ShowHint  then
       Hint := FloatToStr((Sender as TChart).series[i].YValues.Value[seriesIndex]);
    end;

  end;

end;

有人能帮我解释一下如何显示这两个系列的价值吗?

k5ifujac

k5ifujac1#

ShowHint变为True时,您必须中断循环,否则它可能会被下一个False值覆盖

if ShowHint  then begin
   Hint := FloatToStr((Sender as TChart).series[i].YValues.Value[seriesIndex]);
   Break;
end;

顺便问一下,您的TChartSeriesXX对象的事件OnMouseEnter吗?

相关问题