Организация хранения графиков в диаграмме

Построение диаграмм

 

В составе визуальной библиотеки компонентов среды Delphi практически нет компонентов, рожденных вне стен Borland. Корпоративные возможности и профессиональный уровень программистов этой компании вполне позволяют обходиться своими силами. Наглядное тому подтверждение – две сотни всевозможных элементов управления на палитре компонентов Delphi 8.

Исключений из этого правила немного. Одно из них – компоненты диаграммы. На такой беспрецедентный шаг Borland вдохновили (не побоюсь этого слова) блестящие возможности элементов управления TChart (страница Additional) и TDBChart (страница Data Controls) по построению сложнейших диаграмм. Автор этих компонентов – программист компании Steema Software Дэвид Бернеда (David Berneda).

При работе с диаграммами к проекту автоматически подключается модуль Chart (для компонента TChart) или DBChart (для компонента TDBChart). К сожалению, исходный код модулей для нас недоступен, но это законное право его владельца.

 

TPanel
TCustomChart
TChart
TDBChart

 


Рис. 18.1. Иерархия наследования

 

Из немногочисленной информации о диаграммах доподлинно известно, что оба класса построены на основе обычной панели TPanel(рис. 18.1).

Специализирующийся на обслуживании баз данных компонент TDBChart требует, чтобы на компьютере была установлена система доступа к данным BDE (BorlandDatabase Engine).


 

Компонент TChart

 

С точки зрения ООП диаграмма представляет собой весьма сложную конструкцию. В своем составе TChart (TDBChart) инкапсулирует впечатляющий перечень взаимодействующих между собой и даже, можно сказать, поддерживающих друг друга в трудную минуту объектов. Управление большинством из них организовано как из Инспектора объектов, так и из специализированного редактора, вызываемого из контекстного меню компонента.

 

Рис. 18.2. Ключевые элементы диаграммы

 

К ключевым интегрированным объектам (рис. 18.2) относятся экземпляры классов:

 

• TChartSeriesList – контейнер для хранения отдельных графиков (в самом

общем случае отдельный график реализуется на базе класса TChartSeries);

• TChartAxis, TChartDepthAxis– координатные оси диаграммы;

• TChartLegend – легенда (подписи графиков) диаграммы;

• TChartTitle – заголовок диаграммы.

 

Над оформлением диаграммы кропотливо трудится ряд специализированных графических классов:

 

• TCanvas3D – трехмерный холст (канва) диаграммы;

• TChartGradient – класс, описывающий способ заливки диаграммы;

• TChartPen – класс, определяющий характеристики пера;

• TChartBrush – вид кисти;

• TChartWall – класс, описывающий способ прорисовки стен;

• TView3DOptions – опции объемной графики.

 

Большинство из перечисленных графических классов представляют собой логическое развитие хорошо нам знакомых TCanvas, TPen и TBrush.

 

Организация хранения графиков в диаграмме

Смысл существования компонента TChart состоит в умении хранить и выводить на экран разнообразные графики (потомки класса TChartSeries). Для «складирования» графиков в TChart предусмотрен специализированный контейнер. Если же контейнер пуст, то диаграмма представляет собой унылое зрелище и безответственно занимает драгоценное пространство на рабочей форме.

Без связи с диаграммой график не более чем бесполезный инструмент. Хотя он и является вполне самостоятельным объектом, но из-за того что TChartSeries не умеет отображать свои данные, в отрыве от диаграммы практического интереса график не представляет.

Обреченные жить в симбиозе, графики и диаграмма взаимодействуют благодаря свойству:

 

propertySeries[Index : Longint] : TChartSeries;

 

Это и есть врата на склад графиков компонента TChart. Для работы с отдельным экземпляром графика требуется указать его индекс. Обязанности главного счетовода возложены на метод:

 

functionSeriesCount : Longint ; //только для чтения

 

Только он знает количество графиков в контейнере. Обращаясь к свойствуSeries и владея информацией о количестве графиков, диаграмма способна управлять каждым из графиков, например окрасить их в небесные тона:

 

fori:= 0 toChart1.SeriesCount -1 do

withChart1.Series[ i ] doSeriesColor := clAqua;

 

Во время разработки приложения для вставки, изменения или удаления графика из диаграммы используется специальный редактор (рис. 18.3). Для его вызова в режиме проектирования достаточно дважды щелкнуть по компоненту TChart.

 

Рис. 18.3. Внешний вид редактора компонента

Содержимое контейнера допускается пополнять или освобождать во время выполнения программы. Для этого предусмотрен ряд методов. С операцией добавления нового графика в коллекцию лучше всех справится метод:

 

procedureAddSeries(ASeries : TChartSeries);

 

В качестве параметра в процедуру передается экземпляр графика, например созданный конструктором Create().

 

varASeries : TChartSeries;

Begin

ASeries:=TChartSeries.Create(Chart1);

Chart1.AddSeries(ASeries);

//…

end;

 

По сути метод AddSeries() просто сообщает графику, что теперь им единолично владеет диаграмма, вызвавшая этот метод. Обратная задача по экспроприации у контейнера отдельного графика обеспечивается процедурой:

 

procedureRemoveSeries(ASeries : TChartSeries);

 

Подчеркну, что здесь речь не идет об уничтожении экземпляра графика. Изъятый экземпляр просто покидает родительскую диаграмму (его свойство ParentChart переходит в nil). Позднее этот график без проблем можно вернуть на место или подключить к другой диаграмме. Для полной очистки контейнера вызывается процедура:

 

procedureRemoveAllSeries;

 

 








Дата добавления: 2016-03-15; просмотров: 661;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.015 сек.