14.2. Построение графиков с помощью компонента tChart
Обычно результаты расчетов представляются в виде графиков и диаграмм. Среда Delphi имеет мощный пакет стандартных программ вывода на экран и редактирования графической информации, который реализуется с помощью визуально отображаемого на форме компонента TChart.
Построение графика (диаграммы) производится после вычисления таблицы значений функции y=f(x). Полученная таблица передается в специальный двумерный массив ChartI.SeriesList[k] (k — номер графика (0,1,2. )) компонента TChart с помощью метода AddXY. Компонент TChart осуществляет всю работу по отображению графиков, переданных в объект ChartI.SeriesList[k]: строит и размечает оси, рисует координатную сетку, подписывает название осей и самого графика, отображает переданную таблицу в виде всевозможных графиков или диаграмм. При необходимости, с помощью встроенного редактора EditingChart компоненту TChart передаются данные о толщине, стиле и цвете линий, параметрах шрифта подписей, шагах разметки координатной сетки и другие настройки. В процессе работы программы изменение параметров возможно через обращение к соответствующим свойствам компонента TChart. Так, например, свойство Chartl.BottomAxis содержит значение максимального предела нижней оси графика. Перенести график в отчет можно через буфер обмена, используя процедуру ChartI.CopyToClipboardMetafile(True).
Примеры. Построить графики функций sin(x) и cos(x) с помощью компонента chart. Текст и форма проекта приведены ниже.
V Form 1 НЁМ

unit Unit1; Листинг 14.1
uses Windows,Messages,SysUtils,Variants,Classes, Graphics,Controls,Forms,Dialogs,StdCtrls,TeEngine, Series, ExtCtrls, TeeProcs, Chart, Buttons;
Series1: TLineSeries; Series2: TLineSeries; Button1: TButton; BitBtn1: TBitBtn;
procedure Button1Click(Sender: TObject); private
Form1: TForm1; f:file of extended; implementation
procedure TForml.ButtonlClick(Sender: TObject); var k:integer; // Нарисовать x,y,z:extended;
for k:=0 to l00 do
Вывести на форму некоторые простейшие фигуры и текст.

unit Unitl; Листинг l4.2
Windows,Messages,SysUtils,Variants,Classes,Graphics, Controls,Forms,Dialogs,StdCtrls,Buttons; type
Pro-Delphi
Научиться программировать не так сложно, как кажется. Уроки по принципу от простого к сложному. Исходные тексты программ. Видео уроки.
Страницы
- Главная страница
- Уроки
- Видео
- Скачать
- Обратная связь
четверг, 26 апреля 2012 г.
Урок 41. Графическое представление информации
В этом уроке мне хочется начать тему, которой я не касался ранее, а именно: рассказать о графическом представлении информации.
Любой бухгалтер скажет: «Мне это зачем? Мне Журнал хозяйственных операций дай и Главную книгу».
Но, во-первых, мы пишем не бухгалтерскую, а очень очень похожую программу.
Во-вторых, у нас уже есть нечто, отдаленно напоминающее ЖХО. Не хватает отчета в удобной форме — сделаем. У нас есть замечательная оборотка, из которой только ленивый не построит Главную книгу.
В-третьих, графическое представление информации удобно в тех случаях, когда нужно быстро проанализировать огромный массив данных, чтобы принять какое-то конструктивное решение.
В-четвертых, интереснее рассказывать о чем-то, о чем еще не рассказывал.
Надеюсь, что я привел убедительные доводы в поддержку своих же намерений 🙂
Добавляем в проект новую форму (имя формы AnalizFrm), проделывая все те необходимые действия, которые описаны в предыдущем уроке.
Немного слов о том, какие компоненты должны присутствовать на форме:
- TPopupMenu — понадобится как минимум экспортировать данные,
- TActionList — коллекция действий (в основном — нажатия кнопок),
- TPrDOkButton — кнопка из коллекции Pro-Delphi Lib,
- TPageControl с двумя вкладками, изображенными на рисунках выше,
- Два элемента управления для ввода дат начала и окончания периода из библиотеки EhLib,
- TButton — вычислить и показать результат,
- TADOQuery — обратиться к базе данных с запросом (:-)),
- TDataSource — связать запрос и отображающий его результат элемент управления на форме, которым является:
- TDBGridEh — сетка,
- и наконец — TChart (с вкладки Additional) — компонент, способный отображать графики.



Я уже говорил раньше о массивах, но здесь я объявляю его иначе, используя возможность его инициализации при объявлении (т.е. присваиваю значения элементам массива, зная их заранее).
При старте формы логично сделать следующие действия:
procedure TAnalizFrm.FormCreate(Sender: TObject);
begin
// При создании формы задать значения датам
Date_N.Value:=Now()-365; // На год назад
Date_K.Value:=Now()+1; // По сегодня включительно
// Назначить запросу способ подключения
ADOQuery1.Connection:=MainFrm.ADOConnection1;
end;
При выключении формы — почистить за собой памятийку:
procedure TAnalizFrm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caFree;
end;
Нажатие кнопок (в частности Escape) обработаем следующими двумя процедурами (это — стандартный подход):
procedure TAnalizFrm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of // Start Case
VK_ESCAPE:
begin
MyClose;
end;
else
End; // End case
end;
procedure TAnalizFrm.MyClose();
Begin
Close;
end;
Экшен, подложенный под кнопку «OK»:
procedure TAnalizFrm.ButtonClickExecuteExecute(Sender: TObject);
begin
if (ModalResult=1) OR (ModalResult=2)
then
Begin
MyClose;
end;
end;
А теперь — самое главное — обработчик нажатия кнопки «Показать»
procedure TAnalizFrm.Button1Click(Sender: TObject);
Var MyStr: String;
j: Integer;
begin
// Подготовка запроса
ADOQuery1.Active:=False;
ADOQuery1.SQL.Clear;
MyStr:=’SELECT Accounts.ID, Accounts.Name, Sum(Main.Summa) AS MySum ‘;
MyStr:=MyStr + ‘FROM Accounts INNER JOIN Main ON Accounts.ID = Main.D ‘;
MyStr:=MyStr + ‘WHERE (((Accounts.Val)=’+IntToStr(MySelect.MySel_IDVal)+’) AND ((Accounts.Analiz)=True) ‘;
MyStr:=MyStr + ‘AND ((Main.MyDate)>=#’+FormatDateTime(‘mm/dd/yyyy’,Date_N.Value)+’# And (Main.MyDate)<#’+FormatDateTime(‘mm/dd/yyyy’,Date_K.Value)+’#)) ‘;
MyStr:=MyStr + ‘GROUP BY Accounts.ID, Accounts.Name ‘;
MyStr:=MyStr + ‘ORDER BY Sum(Main.Summa) DESC’;
ADOQuery1.SQL.Add(MyStr);
ADOQuery1.Active:=True;
// Настройка графика
j:=1;
With Series1 do
begin
Clear;
while (Not ADOQuery1.Eof) do
Begin
if j>16 // Если количество столбцов в графике больше 16, то цвета будут повторяться
then
j:=1
else
j:=j+1;
// Следующей строкой задается отображение очередного столбца
// Сумма и название (счета) — из запроса
// Цвет — из массива
Add(ADOQuery1.FieldByName(‘MySum’).Value, ADOQuery1.FieldByName(‘Name’).Text, MyColor[j]);
ADOQuery1.Next;
end;
Active:=True;
end;
end;
Секрет Полезный совет:
если Вы думаете, что я написал все, что вталкивается в переменную MyStr, своими ручками от начала и до конца, то Вы оооооччччееееннньььь ошибаетесь.
Построение графиков функций в Delphi
Компонент TChart может строить самые различные графики и диаграммы.
Рассмотрим задачу построения графика на примере синусоиды (y=sin(x)).
Данные для построения графика представляют собой набор точек (X,Y). Поэтому для того чтобы его сформировать необходимо вычислить значение функции для каждой точки того диапазона, в котором требуется построить график.
Местоположение промежуточных точек рассчитывается как положение предыдущей точки плюс некоторый интервал (шаг). Для первой промежуточной точки предыдущей точкой является граница диапазона.
Построим график синусоиды для диапазона от 0 до 2π.
Вначале создадим ряд данных компонента TChart, который, собственно, и будет отображать график, а также зададим нижнюю границу диапазона и шаг.
Simple steps to create Delphi chart
This Delphi graphic tutorial demonstrates how to create a simple charts using TChart component.
Bookmark:
Simple steps to create Delphi chart
Use following simple steps to start your first chart using Delphi TChart component:
- Put chart component on the form
- Double click on chart, then you will see chart editing dialog box.
- Click add button in series tab sheet.
- Select the chart style from the list (Line, Bar, Pie ..)

Put following code to add data into the chart
Download This Delphi Tutorials.
Download materials for this article (Delphi — Tutorials)
delphi-chart.zip
File size: 5 KB, File type: zip
Total downloads: 7784, Upload date: February 11 — 2009
YES, I accept the Terms and Conditions and I acknowledge that I have reviewed and understood the agreement.
Luis :: February 20-2009 :: 01:31 AM
Hello, Would you please give me some hints on how to allow a user to choose a chart style, I mean I need a code for example i can select combobox and type 3 options to plot a chart.
Sibusiso :: March 10-2009 :: 01:34 PM
How to make the chart to be visible in intraweb
Widakdov :: November 09-2009 :: 08:49 AM
Dear digital coding ,
How to create a simulated chart using delphi
meng :: April 12-2010 :: 04:29 AM
very good very good very good very good.
Narcís Calvet :: April 12-2010 :: 03:06 PM
This code can be simpler:
You can even replace Chart1[0] (first series in the SeriesList collection in the chart) for Series1, for example:
Series1.AddXY(10, 20);
Series1.AddXY(15, 50);
Series1.AddXY(20, 30);
Series1.AddXY(25, 70);
Series1.AddXY(30, 10);
Series1.AddXY(35, 50);
Series1.AddXY(40, 45);
Series1.AddXY(45, 10);
carol paola galvis :: April 26-2010 :: 03:33 PM
si gracias por el tutorial
Piet :: December 02-2010 :: 10:59 PM
Is it also possible to create a chart, adding a label as a marker to specific data points but not showing the label on the horizontal axes?
For instance:
X: 0 to 100
Y: random
Show X-values on BottomAxis, Y-Values on VertAxis and three labels (markers) on X=23, X=57, X=71
stephen :: January 08-2011 :: 11:51 PM
I have a problem where AddXY doesn’t plot the points during an iteration but as soon the iterations arte finished it blurts out everything. Stepping into the program all the recording of the data at each iteration is fine i.e. X and Y.
so it seems like a refresh. repaint, update issue? i’ve tried using for loops to slow things down and use the chart1.refresh etc commands but no joy. I need real time monitering of X and Y. Have you any ideas how i could do this?
it would be appreciated,
c.g :: February 18-2011 :: 09:30 PM
I am using delphi 3 and cannot get your code to work at all, any suggestions. Thanks