Подсказка при наведении курсора на значение ряда TChart - PullRequest
0 голосов
/ 25 июня 2009

Я использую TChart в Delphi 7 и хочу отобразить некоторые гистограммы. Я использую следующий код для настройки значений ряда из запроса к базе данных:

  chart1.FreeAllSeries;

  chart1.SeriesList.Clear;

  chart1.AddSeries(TBarSeries.Create(Self));
  TBarSeries(chart1.Series[0]).BarStyle:=bsRectGradient;

  with query1 do
    begin
      Close;
      Execute;

      while not EoF do
        begin
          chart1.Series[0].Add(FieldAsFloat('sum_actual_days'), FieldAsString('contract_no'));
          Next;
        end;

    end;

Каждый столбец (значение) теперь отображает метку как под столбцом, так и в желтом прямоугольнике над столбцом.

Вместо того, чтобы повторять значение метки дважды, у меня есть некоторая дополнительная информация из запроса, которую я хотел бы показать над строкой вместо метки (или, предпочтительно, в качестве подсказки при наведении курсора мыши). Можно ли это сделать с помощью TChart? И как ...?

Ответы [ 4 ]

3 голосов
/ 26 июня 2009

Это можно сделать с помощью TChart с помощью события OnMouseMove диаграммы. Как-то так должно начаться:

procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  SeriesIndex: Integer;
begin
  SeriesIndex := Series1.Clicked(X, Y);

  Chart1.ShowHint := SeriesIndex &lt&gt -1;

  if Chart1.ShowHint then
  begin
    query1.RecNo := SeriesIndex; { this may need to be SeriesIndex + 1 }
    Chart1.Hint := query1.FieldByName('YourFieldNameHere').AsString;
  end;
end;

Конечно, чтобы использовать этот код, запрос, который вы использовали для заполнения диаграммы, должен быть открыт.

1 голос
/ 03 июня 2011

Инструмент «Отметить подсказки» предоставляет событие для предоставления пользовательского текста (событие OnGetText):

procedure TForm1.ChartTool1GetText(Sender: TMarksTipTool;
  var Text: String);
var Index : Integer;
begin
  Index:=Series1.Clicked(Chart1.GetCursorPos);

  Text:='Hello point '+IntToStr(Index);
end;
0 голосов
/ 04 февраля 2016

Вы можете поместить панель в диаграмму и использовать ее как подсказку. С инструментом NearestPoint это работает очень хорошо.

enter image description here

Сначала добавьте инструмент NearestPoint на диаграмму (дважды щелкните на диаграмме, выберите Инструменты / Добавить).

Затем добавьте панель на диаграмму (в компонент «Диаграмма») и настройте ее в соответствии с вашими потребностями.

Затем используйте событие OnMouseMove:

procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var i:integer;
    px,py:integer;

begin   
  if PtInRect(Chart1.ChartRect,Point(X,Y)) then
    begin
      i:=ChartTool1.GetNearestPoint(Series1,X,Y);
      if (Series1.XValues.Count>0) and (i<Series1.Count) and (i>=0) then
        begin
          px:=Series1.CalcXPos(i);
          py:=Series1.CalcYPos(i);
          //You can add any data here to your panel, even you can put Images to it or anything else
          Panel_Hint.Caption:=TimeToStr(Series1.XValue[i])+' • '+FloatToStrF(Series1.YValue[i],ffNumber,20,2);
          Panel_Hint.Visible:=true;
          Form1.Canvas.Font.Assign(Panel_Hint.Font);
          Panel_Hint.Width:=Form1.Canvas.TextWidth(Panel_Hint.Caption)+8;
          Panel_Hint.Left:=px-Panel_Hint.Width div 2;
          Panel_Hint.Top:=py-Panel_Hint.Height-2;
        end
      else
        Panel_Hint.Visible:=false;
    end;
end;

Если хотите, вы можете отключить инструмент NearestPoint, но он нам нужен, чтобы легко найти соответствующую точку.

0 голосов
/ 25 июня 2009

Существует инструмент «Отметить подсказки», который позволяет отображать подсказки при наведении на бар. Но я не уверен, что вы можете изменить подсказку для отображения пользовательских данных вместо предопределенных стилей.

...