Перейти к содержимому

Tchart delphi как построить график

  • автор:

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 ..)

Delphi chart

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *