Точки графика – класс TChartValueList График TChartSeries – это сердце диаграммы. Визуально он может быть представлен в виде обычной линии, заштрихованной области, пирамиды, цилиндра или чего-либо еще. Линия графика строится по его точкам. Для хранения точек в рамках класса создано специальное хранилище – список точек: propertyValueList[Index : Longint] : TChartValueList; В справочной системе названное свойство класса позиционируется как свойство, применяемое только при разработке потомков TChartSeries, поэтому при программировании обычных приложений оно нам не потребуется. Взамен у потомков TChartSeries предусмотрены два свойства-надстройки: propertyXValues : TChartValueList; //значения по оси X propertyYValues : TChartValueList; //значения по оси Y Они обеспечивают раздельный доступ к коллекции значений по осям X и Y графика. Например, чтобы добраться до интересующей нас точки с целью редактирования ее содержимого, воспользуйтесь свойством: propertyValue[Index : Longint] : Double; Например: LineSeries1.YValues.Value[5] := 25 ; LineSeries1.Repaint; Более удобный способ, позволяющий адресовать точку графика без явного обращения к хранилищу TChartValueList, реализован тремя свойствами: propertyXValue[Index : Longint] : Double; //значение по оси X propertyYValue[Index : Longint] : Double; //значение по оси Y propertyXLabel[Index : Longint] : String; //метка – пояснительная подпись к точке Здесь Index – порядковый номер точки. Общее количество элементов в хранилище возвратит функция: functionCount : Longint; Существует ряд свойств и методов графика, несущих исключительно информационную нагрузку (табл. 18.1). Таблица 18.1. Информационные свойства графика Свойство | Описание | propertyTotal : Double | Сумма всех значений графика. | propertyTotalABS : Double | Сумма абсолютных значений. | propertyMaxValue : Double | Максимальное значение в наборе. | propertyMinValue : Double | Минимальное значение в наборе. | functionFirst : Double | Значение первой точки графика. | functionLast : Double | Значение последней точки графика | Для облегчения поиска точки по ее значению создана функция: functionLocate (constValue : Double) : Longint; В случае успеха метод возвратит индекс найденной точки в наборе. Если такой точки не существует, то функция вернет –1. Познакомившись с организацией хранения данных, перейдем к изучению способов заполнения графика значениями. Методы вставки новой точки В классе TChartSeries реализовано несколько методов вставки в график новой точки. Добавление новой точки в конец набора обеспечивают методы: functionAdd(constAValue : Double; constALabel : string; AColor : TColor) : Longint; functionAddY(constAYValue : Double; constAXLabel : string; AColor : TColor) : Longint; Здесь AValue – значение координаты Y точки, ALabel – необязательный пояснительный текст метки и AColor – цвет точки. Функции возвратят индекс точки в наборе. withSeries1 do Begin Add( 40, 'Точка 1', clRed ) ; Add( 60, 'Точка 2', clBlue ) ; Add( 30, 'Точка 3', clGreen ) ; end; Если необходимо внести новую точку, описываемую не одной, как в случае Add() и AddY(), а двумя координатами X и Y, то используйте метод: functionAddXY(constAXValue, AYValue : Double; constAXLabel : string; AColor : TColor) : Longint; В этом методе появился дополнительный параметр AXValue – значение по оси X. AddXY( 10, 20,' ',clTeeColor); Для вставки в график разрыва (пустой точки) используйте метод: functionAddNull(constALabel : string) : Longint; Максимальное количество точек графика ограничивается числом 134 217 727. Помимо вставки значений с помощью методов AddXXX, график в состоянии воспринимать данные из другого графика, набора данных (TTable, TQeury,TStoredProc и т. д.), элементов ActiveX, COM-объектов. Источник данных указывается в свойстве: propertyDataSource : TComponent; Например: Series1.DataSource:=Table1; //компонент VCL – таблица Series1.YValues.ValueSource:='ValueField'; //имя поля, содержащего значения Series1.XLabelsSource:='LabelField'; //имя поля, содержащего описание меток Еще один способ получения данных из другого графика обеспечивается методом: procedureAssignValues(Source : TChartSeries); И наконец, для заполнения графика псевдослучайными значениями используйте метод: procedureFillSampleValues(NumValues : Longint); В параметр передается количество генерируемых точек. Операция вставки нового значения в график сопровождается вызовом двух событий: propertyOnBeforeAdd : TSeriesOnBeforeAdd; TSeriesOnBeforeAdd = function(Sender: TChartSeries): Boolean of object; и propertyOnAfterAdd : TSeriesOnAfterAdd; TSeriesOnAfterAdd = procedure(Sender:TChartSeries; ValueIndex:Longint) of object; Первое из перечисленных событий возникает до момента вставки, второе – сразу после него. Каждой точке графика соответствует метка, способная хранить поясняющий текст. Для того чтобы обратиться к метке, воспользуйтесь свойством XLabel. Единственный параметр Index указывает порядковый номер метки в списке. propertyXLabel[Index:Longint] : string; В качестве источника меток может выступать не только программный код, но и набор данных, предоставляемый таблицей (TTable) или запросом (TQuery, TStoredProc). Для этого укажите источник данных в свойстве: propertyXLabelsSource : string; Если в качестве источника данных для компонента выступает запрос или таблица, то стоит познакомиться со свойством: propertyValueSource : string; В свойстве определяется имя поля, из которого график получает набор значений: LineSeries1.DataSource := Table1; LineSeries1.YValues.ValueSource := 'ValueField'; Второй вариант применения данного свойства относится к случаю получения значений из другого графика: LineSeries1.DataSource:=BubbleSerie2; LineSeries1.YValues.ValueSource:='Y'; После всех операций, связанных со вставкой новой точки или удалением точки, желательно перерисовать график. Для этого вызывается метод: procedureRefreshSeries; Процедура обновляет все принадлежащие диаграмме графики. |