
- •Часть II
- •Главные составные части среды программирования
- •Формы, модули
- •Интеллектуальный редактор
- •Палитра Компонент
- •Дополнительные элементы
- •Структура проекта
- •Структура модуля
- •Проект Delphi
- •Стандартные компоненты
- •Свойства формы
- •События формы
- •Создание форм разного вида
- •Конструирование меню
- •Компоненты
- •Общие принципы создания меню
- •Пункты меню
- •TMainMenu - компонент
- •Основные свойства tMainMenu
- •Основные методы tMainMenu
- •События tMainMenu
- •TMenuItem - класс
- •Основные свойства tMenuItem
- •Основные методы tMenuItem
- •События tMenuItem
- •Рисование и закраска Графические компоненты
- •Свойство объектов Canvas
- •Полный список методов tCanvas
- •Основные события tCanvas
- •Объект tPaintBox
- •TImage - компонент
- •TShape - компонент
- •Файлы и устройства ввода/вывода
- •Использование файловых переменных. Типы файлов
- •Операции ввода/вывода
- •Процедуры и функции для работы с файлом
- •Контроль ошибок ввода/вывода
- •Атрибуты файла. Поиск файла
- •Базовые классы tStream и tHandleStream
- •Свойства и методы класса Tstream
- •Класс tFileStream
- •Класс tMemoryStream
- •Класс tStringStream
- •Оповещение об изменениях в файловой системе
- •Компоненты, используемые для создания баз данных
- •Открытие и закрытие DataSet
- •Работа с Данными
- •Использование SetKey для поиска в таблице
- •Использование фильтров для ограничения числа записей в DataSet
- •Теория ole
- •Ole Контейнер Основные свойства и методы компонента OleContainer.
- •Работа с ms Office в Delphi.
- •Объекты ms Word
- •Свойства и методы объекта Selection
- •Коллекция объектов Shapes
- •Объекты ms Excel
- •Создание объекта ExceLApplication, запуск и визуализация окна приложения
- •Работа с листами рабочей книги
- •Программирование диаграмм Excel в Delphi
- •Коллекция Charts, размещение диаграммы и исходных данных
- •Тип диаграммы
Программирование диаграмм Excel в Delphi
Диаграмма на рабочем листе Excel представляет собой объект. Как все объекты Excel, она имеет некоторые общие свойства, характеризующие и другие типы объектов (например, размеры и положение), а также свойства, которыми обладают только диаграммы.
Коллекция Charts, размещение диаграммы и исходных данных
Все диаграммы рабочей книги объединены в коллекцию Charts, свойства и методы которой позволяют добавлять новые диаграммы, хранить, удалять и обеспечивать доступ к любой диаграмме коллекции. Коллекция Charts имеет такие же свойства, как любая другая коллекция объектов Excel, но есть и некоторые отличия, обусловленные свойствами диаграммы, т. к. диаграмма может находиться на листе вместе с другими данными или занимать отдельный лист. Поэтому диаграмма и лист рабочей книги, а также коллекции, которым они принадлежат, могут иметь общие свойства и методы, которые придется учитывать при программировании приложений.
Для того чтобы создать новую диаграмму, а затем манипулировать общим списком диаграмм и получать доступ к отдельной диаграмме, достаточно воспользоваться одним свойством и двумя методами коллекции Charts. Свойство Count имеет тип Integer, его значение равно количеству диаграмм в рабочей книге. Метод Add создает новую диаграмму и возвращает ссылку на нее. Метод Item() возвращает ссылку на созданную ранее диаграмму, принадлежащую коллекции Charts. Аргументом метода Item() является порядковый номер (индекс) или имя диаграммы в коллекции. Во втором случае аргументом метода Item является строка, содержащая имя диаграммы.
Индексом может быть целое число со значением в диапазоне от 1 до Charts.Count. Следующие две процедуры демонстрируют, как можно создать диаграмму, получив ссылку на нее, или получить доступ к существующей диаграмме с помощью индекса.
Создание диаграммы и получение доступа к существующей диаграмме
procedure TForml.ButtonlClick(Sender: TObject);
begin
Chart:=E.Charts.Add;
Chart.ChartType:=xl3DColumn;
Chart.SetSourceData(Source:=E.ActiveWorkbook.Sheets.Item[2].
Range['Al:F5'],PlotBy:=xlColumns);
end;
procedure TForml.ButtonlClick(Sender: TObject);
begin
Chart:=E.Charts.Item[1];
end;
Первая процедура состоит из трех операторов: первый создает диаграмму и возвращает ссылку нее, два других, используя полученную ссылку, определяют область значений для построения диаграммы и ее тип. Без этих двух операторов мы получили бы только пустую область диаграммы. Тип диаграммы определяется значением свойства ChartType объекта Chart, имеющим целый тип и выбираемым из нескольких десятков констант. Метод SetSourceData определяет диапазон данных (область ячеек) листа рабочей книги, по которым будет строиться диаграмма. Первый аргумент этого метода определяет адрес области, второй — порядок использования ячеек в заданной области.
Важной характеристикой диаграммы также является место, где расположена сама диаграмма, определяемое с помощью метода Location объекта Chart. У этого метода два аргумента. Первый аргумент (типа Integer) определяет, будет диаграмма находиться на отдельном листе или на обычном листе с данными. Если выбран второй вариант, то второй аргумент метода Location определяет имя листа, на котором будет располагаться диаграмма. В нашем случае диаграмма создана на отдельном листе. С помощью следующих процедур переместим ее на первый лист рабочей книги — туда, где располагаются данные для построения диаграммы, затем переместим обратно на отдельный лист.
Перемещение диаграммы на лист с данными
Const xlLocationAsNewSheet=l; xlLocationAs0bject=2;
procedure TForml.Button2Click(Sender: TObject);
begin Chart.Location(Where:=xlLocationAsObject, Name:='Лист1');
Chart: =E. Act iveChart; end;
procedure TForml.Button3Click(Sender: TObj ect);
begin Chart.Location(Where:=xlLocationAsNewSheet);
Chart:=E.ActiveChart; end;
Обратите внимание на то, что после вызова метода Location необходимо снова получать ссылку на объект ActiveChart, т. к. переменная Chart после переноса диаграммы на новый лист уже не содержит ссылку на диаграмму.
Заполним первую строку области исходных данных диаграммы (т. е. область подписей делений) определенными значениями, а ячейки, определяющие значения точек данных, — случайными числами. Для этого можно использовать следующие процедуры.
Заполнение области исходных данных для диаграммы
function SetValueRange(sheet:variant; range:string;:value:variant):boolean;
begin SetValueRange:=True;
try E.ActiveWorkbook.Sheets.Item[sheet].Range[range]:=value;
except SetValueRange:=False; end;
end;
procedure TForml.Button4Click(Sender: TObject);
var a : integer;
begin randomize;
SetValueRange('Лист1','Al’, 'AAAA');
SetValueRange('Лист1','Bl','BBBB');
SetValueRange('Лист!','Cl','CCCC);
for a:=2 to 5 do begin
SetValueRange('Лист1','A1+inttostr(a),a-l);
SetValueRange('Лист1','B'+inttostr(a),random(l000));
SetValueRange('Лист1','C'+inttostr(a),random(l000));
end; end;