Компонент TChart в delphi

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

Свойства TChart удобно устанавливать специальным Редактором Диаграмм, вызываемым из Инспектора Объектов нажатием кнопки с многоточием около соответствующего свойства или двойным щелчком на компоненте TChart.

Компонент является контейнером объектов Series типа TChartSeries - серий данных, характеризующихся различными стилями отображения. Каждый компонент может включать несколько серий. Свойства серий устанавливаются с помощью Редактора Диаграмм или программно.

Для задания отображаемых значений используются методы серий Series. Основные из них:

  • Clear - очищает серию от занесенных ранее данных
  • Add - позволяет добавить в диаграмму новую точку
  • AddXY - позволяет добавить новую точку в график функции

Например, следующие операторы очищают серию Series1 и заносят в нее для отображения диаграммы четыре значения, задавая отображающие их цвета:

code: #delphi
With Series1 do
begin
Clear;
  Add(A1,'Цех 1',clYellow);
  Add(A2,'Цех 2',clBlue);
  Add(A3,'Цех 3',clRed);
  Add(A4,'Цех 4',clPurple);
end;

Следующие операторы заносят в серию Series2 значения, предназначенные для отображения графика синуса:

code: #delphi
Series2.Clear;
for i:=0 to 100 do
  Series2.AddXY(0.02*Pi*i,sin(0.02*Pi*i),'',clRed);

Следующий оператор переносит данные серии Series1 в серию Series3, свойства которой, например, определяют отличный от Series1 тип диаграммы:

code: #delphi
Series3.Assign(Series1);

Следующие операторы обеспечивают смену типа диаграммы, переключая видимость серий Series1 и Series3:

code: #delphi
Series1.Active:= not Series1.Active;
Series3.Active:= not Series3.Active;

Свойство AllowPanning компонента TChart разрешает пользователю прокручивать графики и те типы диаграмм, в которых предусмотрены координатные оси. Прокрутку пользователь может осуществлять во время выполнения, нажимая правую кнопку мыши и буксируя ею график.

Свойство AllowZoom разрешает пользователю увеличивать размер выбранного фрагмента графика или диаграммы с осями координат, растягивая его на все видимое поле. Для этого пользователь должен с помощью левой кнопки мыши обвести рамкой требуемый фрагмент. Построение рамки вниз и вправо растягивает фрагмент на всю область изображения. Построение рамки вверх и влево восстанавливает исходный масштаб. Можно также восстановить исходный масштаб методом UndoZoom. Например, следующий оператор, вставленный в обработчик события OnMouseDown, восстанавливает масштаб, если пользователь нажимает кнопку мыши при нажатой клавише Alt:

code: #delphi
if (ssAlt in Shift) then Chart1.UndoZoom;

Можно также изменять масштаб методами ZoomPercent и ZoomRect.

По умолчанию весь график или диаграмма размещаются на одной странице, которая видна целиком. Но если задать MaxPointPerPage - максимальное число точек на страницу, то изображение будет автоматически разбито на несколько страниц (если, конечно, число точек серий больше, чем MaxPointPerPage). Последняя страница может оказаться неполной. На экране одновременно можно видеть одну страницу (она определяется свойством Page). Перемещение по страницам возможно с помощью прокрутки графика пользователем (если оно разрешено свойством AllowPanning) или с помощью свойств Page, NumPages (число страниц) и методов PreviousPage и NextPage. Отображение последней страницы определяется свойством ScaleLastPage.

Среди множества свойств серий можно отметить Mark - ярлычки, отображающие численные значения точек серии.

Множество свойств TChart определяют оформление графика - оси координат (они могут быть со всех 4-ех сторон), трехмерную имитацию отображения и т.п.

Небольшой примерчик:

code: #delphi
uses Series;
 
 // Creates two series in the chart and assigns random values
// erzeugt zwei Serien im Chart und fullt sie mit zufalligen Werten
procedure TForm1.Button1Click(Sender: TObject);
 var
    i, j, kum: Integer;
   s, t: TLineSeries;
 begin
   with Chart1 do
   begin
     // Title of the Chart
    Title.Text.Clear;
     Title.Text.Add(′Ein Titel fur den Chart′);
 
     // Create first Series
    s := TLineSeries.Create(nil);
     // Clear it
    s.Clear;
     // set the title
    s.Title := ′Chart Linie 1′;
     // determine the chart, this series belongs to
    s.ParentChart := Chart1;
     // the x-axis shall use date
    s.XValues.DateTime := True;
 
     // create the second Series
    t := TLineSeries.Create(nil);
     t.Clear;
     t.Title       := s.Title + ′ kum′;
     t.ParentChart := Chart1;
     t.XValues.DateTime := True;
     // this series uses the right axis
    t.VertAxis := aRightAxis;
 
     // now add the random values
    for i := 0 to 364 do
     begin
       j := Random(100);
       s.AddXY(Date + i, j);
       kum := kum + j;
       t.AddXY(Date + i, kum);
     end;
   end;
 end;
Поделиться:

Похожие статьи: