Chart – СРЕДСТВО ОТОБРАЖЕНИЯ ДАННЫХ

April 26, 2010 by admin Комментировать »

В среде Delphi существует специальный компонент для графического представления данных [3]. Этот компонент расположен на странице Additional палитры компонент. Имя компонента – Chart. Пиктограмма – clip_image002 .

clip_image004Компонент Chart содержит большое количество специальных свойств, методов и событий. Здесь мы рассмотрим их минимальный набор, необходимый для решения поставленной задачи. Иллюстрировать наши действия будем на примере простого приложения, служащего для отображения графиков идеальной и зашум-ленной затухающих синусоид (см. рис.). Приложение содержит одну форму. На ней расположены четыре компонента: две кнопки ‘Clear’ и ‘Close’ типа BitBtn (кнопка ‘Clear’ в зависимости от ситуации может изменить свою надпись на ‘OK’); компонент Image, служащий для отображения рисунка – логотипа разработчика программы; компонента Chart, для изображения графиков синусоид.

clip_image007Для включения компонента Chart в интерфейсную часть программы поступим стандартным образом – перенесем его с палитры на главную форму и установим размеры. Затем приступим к настройке свойств компонента. Для этого достаточно дважды щелкнуть на нем левой кнопкой мыши – появится многолистное окно редактора настройки компонента Chart. В первую очередь необходимо создать хотя бы один объект Series класса TChartSeries. Это можно сделать с помощью кнопки Add, выбрав из набора (Gallery) различных типов графиков подходящий. Выбор типа графика осуществляется из диалогового окна TeeChart Gallery (см. рисунок). Снимем флажок 3D и из двумерных графиков выберем тип FastLine. После этого в диалоговом окне настроек компонента Chart появится запись о серии типа Fast с названием (по умолчанию) Series1. Среда Delphi автоматически делает все необходимые записи в модуле главной формы (включает в класс TForm1 объекты Chart1 и Series1 классов TChart и TFastLineSeries соответственно).

Далее, аналогичным образом (кнопкой Add), добавим в компонент Chart еще одну серию (Series2), например типа Line, чтобы отобразить второй график. Перемещаясь по закладкам редактора компонента Chart, установим необходимые свойства как самого компонента Chart, так и отдельные свойства серий. В качестве таких установок могут быть следующие:

· выбор цветовой гаммы области компонента Chart, поля графиков;

· установка толщины и цвета графиков;

· настройка легенд графиков и их атрибутов (содержание, цвет, шрифт);

· задание надписей вдоль осей и их шрифтовое оформление;

· установка, оформление и форматирование титульной надписи и подписи под полем графиков;

· настройка формата оцифровки и штриховки осей графика и т.п.

Результаты почти всех действий по настройке свойств компонента Chart можно наблюдать сразу во время манипуляций со значениями свойств в редакторе компонента. Если окно редактора свойств закрывает компонент, расположенный на форме, его (окно) можно переместить мышью в сторону, потянув за заголовок (обычный прием перемещения окон в Windows).

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

Вся функциональность нашего иллюстративного приложения сконцентрирована в обработчике события OnClick кнопки ‘OK’ (‘Clear’). Программист, разрабатывая эту программу, вводит Pascal-код только в одном месте – наполняя содержанием тело метода-обработчика этого события. Для подтверждения этого ниже приведен полный листинг модуля формы приложения. В нем курсивом отмечена та часть исходного кода программы, которую ввел программист. Все строки пронумерованы для упрощения дальнейших пояснений.

Табулировались две функции:

первая – clip_image009

вторая – clip_image011

здесь: clip_image013 N+1 – количество точек графика;

w – центрированная равномерно распределенная случайная величина (генерируется стандартным датчиком Random).

Количество точек графика (без одной) задается инициализированной переменной NPoint (строка 23). В строках 28 и 29 заданы вспомогательные локальные переменные. Строка 31 – инициализация датчика случайных чисел. При запуске программы первая кнопка имеет надпись OK и поле графиков на компоненте Chart пусто.

Когда пользователь нажимает кнопку OK начинает выполняться код обработчика события OnClick для этой кнопки. Инициализируется датчик случайных чисел (строка 31). Затем, так как свойство Caption кнопки имеет значение OK, выполняется цикл 34-41, в котором табулируются функции y1(x) и y2(x) и заполняются массивы Series1 и Series2 (строки 39 и 40). Эти массивы заполняются с помощью методов AddXY, одновременно с этим происходит вывод соответствующих графиков в поле компонента Chart. В заключение этой части условного оператора if наименование кнопки изменяется на значение Clear (строка 42). На этом обработка события нажатия кнопки заканчивается и приложение ожидает наступление следующего события.

Последующее нажатие кнопки с названием теперь уже Clear приведет к выполнению другой части оператора if из этого обработчика события. Здесь будут выполняться строки кода с номерами 46, 47 и 48 – очистка массивов Series1, Series2 методами Clear (это приводит к очистке поля графиков) и изменение название кнопки снова на значение OK. Таким образом мы снова возвращаемся в исходное состояние, которое было при запуске программы.

{1}

unit temp_Un1;

{2}

Interface

{3}

Uses

{4}

Windows, Messages, SysUtils, Classes, Graphics, Controls,

{5}

Forms, Dialogs, StdCtrls, Buttons, TeEngine,

{6}

Series, ExtCtrls, TeeProcs, Chart;

{7}

Type

{8}

TForm1 = class(TForm)

{9}

bb_OK: TbitBtn;

{10}

bb_Close: TBitBtn;

{11}

Chart1: TChart;

{12}

Image1: Timage;

{13}

Series1: TLineSeries;

{14}

Series2: TFastLineSeries;

{15}

procedure bb_OKClick(Sender: TObject);

{16}

Private

{17}

{ Private declarations }

{18}

Public

{19}

{ Public declarations }

{20}

end;

{21}

Var

{22}

Form1 : TForm1;

{23}

NPoint : Integer = 199;

{24}

Implementation

{25}

{$R *.DFM}

{26}

Procedure TForm1.bb_OKClick(Sender: Tobject);

{27}

Var

{28}

i : Integer;

{29}

x, y, temp : Real;

{30}

Begin

{31}

Randomize;

{32}

if bb_OK.Caption=’OK’ then

{33}

Begin

{34}

for i:=0 to NPoint do

{35}

Begin

{36}

x:=((2*Pi)/(NPoint+1))*i;

{37}

temp:=5*Sin(2*x)*Exp(-0.5*x);

{38}

y:=(Random-0.5)+temp;

{39}

Series1.AddXY(x,y,”,clTeeColor);

{40}

Series2.AddXY(x,temp,”,clTeeColor);

{41}

end;

{42}

bb_OK.Caption:=’Clear’;

{43}

End

{44}

Else

{45}

Begin

{46}

Series1.Clear;

{47}

Series2.Clear;

{48}

bb_OK.Caption:=’OK’;

{49}

end;

{50}

end;

{51}

end.

У объектов классов TChart и TSeries существует множество разнообразных методов и свойств, возможности и значения которых можно использовать в процессе работы программы (RunTime). В частности, для получения более точных значений координат точек графиков в классе TChart существует, например, метод-процедура GetCursorValues(var X, Y : Double), которая возвращает текущие координаты указателя мыши в системе координат, в которой построены графики. Таким образом, если использовать эту процедуру в обработчике события OnMouseMove компонента Chart, то можно выводить текущие координаты указателя мыши на экран в отдельную область. Более того, так как для класса TSeries существует свое собственное свойство Cursor, то возникает возможность идентифицировать различными указателями мыши точки различных графиков и соответственно их координаты.

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты