Графики( TChart ) - использование Автор: Crazy Исходная ссылка: - - - Компонент TChart является средством для создания графиков и диаграмм с огромным набором функций и возможностей. Собственно, то что предоставлено нам в С++ Builder, является лишь урезанной версией библиотеки TeeChart Pro версии 4.0 (более 80 новых возможностей), которая, кстати, стоит $139 и в ней есть, например, возможность использования OpenGl с фотореалистичным рендерингом, используя освещение. Но нас это мало интересует, ибо того, что представлено нам в Builder'е, вполне достаточно. После того как поместили компонент на форму, двойным щелчком на нем, вы откроете все его свойства. Их очень много, но все интуитивно понятны и, при желании, разобраться с ними не составит никакого тру-да. Расскажу лишь про основные: 1. Закладка Chart, подзакладка Series. Здесь создаются сами графики. При нажатии кнопки Add вам предложат выбрать тип графика. 2. Закладка Series. Здесь задаются конкретные настройки для каждого графика. Стоит обратить внимание на закладку DataSource - здесь можно задать способ получения данных, которые используются в графике. Function позволяет задать различные виды зависимости от других графиков. Основные методы компонента TChart. AddSeries (TChartSeries *ASeries)- программное добавление графика (series). TChartSeries* NewSeries; NewSeries = new TChartSeries(this); //выделяем память NewSeries->Name="New_one"; // имя графика. Если попытаться //создать 2 графика с одинаковыми именами выпадет ошибка, // так что следует делать проверку. Chart1->AddSeries(NewSeries); Assign (TPersistent *Source) - копирование свойств от одного гра-фика к другому. События графика не копируются. Значения на графике копируются. Свойство Datasource копируется. Этот метод вызывается при вызове методов CloneChartSeries и ChangeSeriesType. Chart1->Series[1]->Assign(Chart1->Series[0]); CheckDataSource() - обновление значений графика (TChart позволяет выбрать в качестве данных только другие графики. Чтобы использовать в качестве источника данных, например, таблицу базы данных, надо использовать компонент TDBChart). Имеет эффект только в случае когда в свойстве DataSource есть какая-либо зависимость. Chart1->Series[1]->CheckDataSource(); CopyToClipboardBitmap() - копирует все содержимое Chart в буфер обмена в формате Bitmap. Chart1->CopyToClipboardBitmap(); CopyToClipboardMetafile (bool Enhanced) - копирует все содержимое Chart в буфер обмена в формате метафайл (файл, используемый для создания изображений, независимых от устройств, такой файл хранит не само изображение, а команды GDI , используемые при его создании). Параметр Enhanced указывает выбрать тип метафайла Windows Metafile (WMF) или Enhanced Metafile (EMF). Chart1->CopyToClipboardMetafile(false); //false - тип Windows Metafile. ExchangeSeries(int,int) - меняет порядок отображения графиков на экране. Практически не имеет смысла если не используется 3d изображение, т.к. изменения малозаметны. Также есть методы SeriesUp и Series Down, которые увеличивают и уменьшают порядок отображения на 1 соответственно. Chart1->ExchangeSeries(0,1); PrintLandscape() и PrintPortrait() - устанавливают ориентацию страницы для вывода на печать в горизонтальную и вертикальную ориентацию соответственно. После печати (любым методом) восстанавливается исходное значение. Chart1->PrintLandscape(); Chart1->PrintPortrait(); Print() - отправляет на печать всю область Chart. Используется принтер по умолчанию, окно настройки не выводится, т.е. происходит прямая передача в диспетчер печати. Chart1->Print(); PrintRect (const TRect &R) - отправляет на печать всю область Chart отмасштабировав ее предварительно. #include <Printers.hpp> void __fastcall TForm1::Button1Click(TObject *Sender) { TPrinter * Prntr = Printer();// нужно, чтобы можно было использовать // PageWidth и PageHeight TRect r(0,0,Prntr->PageWidth,Prntr->PageHeight); //максимально возможный прямоугольник Chart1->PrintRect(r); // отправляем на печать. } ZoomPercent (double PercentZoom) - масштабирует область изображения. Свойство AnimatedZoom определяет будет ли масштабирование происходить мгновенно или анимироваться. Параметром является число в %. При числе больше 100 выполняется приближение. Следует учитывать, что последующие масштабирования будут отсчитываться от текущего значения масштаба, т.е. действия, подобные нижеприведенному коду, не возвратит масштаб в начальное положение: Chart1->AnimatedZoom = true; Chart1->ZoomPercent(120); Chart1->ZoomPercent(80); UndoZoom() - отменяет масштабирование - возвращает масштаб к 100%. Chart1->UndoZoom(); Основные методы TChartSeries Add и AddY - добавляют на график точку, если вам известна только одна координата. Вторая высчитывается автоматически. Например, следующий код выведет на экран 3 точки, координаты которых будут (10,0), (20,1), (15,2): Chart1->Series[0]->Add(10); Chart1->Series[0]->Add(20); Chart1->Series[0]->Add(15); AddXY - добавляет точку с координатами (x,y) на график. В результате выполнения следующего кода на экране получим график функции sin(x) в промежутке от -Pi до +Pi: #include <math.h> // В нем содержится число Пи (M_PI) void __fastcall TForm1::Button1Click(TObject *Sender) { double x, y; for (x = -M_PI ; x <= M_PI ; x += 0.001) { y = sin(x); //Наша функция Chart1->Series[0]->AddXY(x,y); //Обратите внимание, что в свойствах //графики нумеруются с 1, а в программе - с 0 } } Clear() - убирает все точки серии. Chart1->Series[0]->Clear(); Count() - возвращает количество точек на графике. Chart1->Series[0]->Count(); Delete (int ValueIndex)- удаляет точку на графике. После удаления происходит перерисовка графика, а также пересчет всех зависящих от него графиков. Chart1->Series[0]->Delete(2);//Удаляем точку номер 2. FillSampleValues (int) - заполняет график случайными точками, количество которых указывается. Основное назначение этого метода - обеспечение отображения графиков при разработке(design-mode) Chart1->Series[0]->FillSampleValues(20);//добавить 20 случайных точек. MaxXValue(), MaxYValue(), MinXValue(), MinYValue() - возвращают максимальные, минимальные значения для осей x и y. Также нужно сказать, что в папке ($BCB)\Examples\Teechart\ лежит мощнейший демонстрационный пример возможностей TChart. Естественно, в виде исходника. Плюс прилагается огромный мануал по TChart TeeChart User Guide, который находится по адресу Help\ teechart.hlp, в нем функции очень подробно расписаны, но к сожалению на Delphi, что не может радовать.