МегаПредмет

ПОЗНАВАТЕЛЬНОЕ

Сила воли ведет к действию, а позитивные действия формируют позитивное отношение


Как определить диапазон голоса - ваш вокал


Игровые автоматы с быстрым выводом


Как цель узнает о ваших желаниях прежде, чем вы начнете действовать. Как компании прогнозируют привычки и манипулируют ими


Целительная привычка


Как самому избавиться от обидчивости


Противоречивые взгляды на качества, присущие мужчинам


Тренинг уверенности в себе


Вкуснейший "Салат из свеклы с чесноком"


Натюрморт и его изобразительные возможности


Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д.


Как научиться брать на себя ответственность


Зачем нужны границы в отношениях с детьми?


Световозвращающие элементы на детской одежде


Как победить свой возраст? Восемь уникальных способов, которые помогут достичь долголетия


Как слышать голос Бога


Классификация ожирения по ИМТ (ВОЗ)


Глава 3. Завет мужчины с женщиной


Оси и плоскости тела человека


Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.


Отёска стен и прирубка косяков Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.


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

Легенда диаграммы – класс TChartLegend





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

 

propertyLegend : TChartLegend;

 

За включение (отключение) показа легенды отвечает свойство:

 

propertyVisible : Boolean;

Стиль легенды назначается свойством:

 

propertyLegendStyle : TLegendStyle;

TLegendStyle = (lsAuto, lsSeries, lsValues, lsLastValues);

 

За стиль текста отвечает свойство:

 

propertyTextStyle : TLegendTextStyle;

TLegendTextStyle = (ltsPlain, ltsLeftValue, ltsRightValue, ltsLeftPercent,

ltsRightPercent, ltsXValue);

 

Местоположение области легенды определяется свойством:

 

propertyAlignment : TLegendAlignment;

TLegendAlignment = (laLeft, laRight, laTop, laBottom);

 

Координаты прямоугольника с легендой описываются в свойстве RectLegend. Это свойство доступно только для чтения.

 

propertyRectLegend : TRect; //только для чтения

Все перечисленные свойства доступны в Инспекторе объектов и на вкладке Legend встроенного редактора диаграммы (рис. 18.7).

 

Рис. 18.7. Страница настройки легенды диаграммы

Координатные оси диаграммы – класс TChartAxis

Все координатные оси диаграммы создаются на основе описанного в модуле TeEngine класса TChartAxis. Диаграмма умеет поддерживать до пяти осей одновременно, для чего в TChart объявлены соответствующие свойства:

 

propertyBottomAxis : TChartAxis; //нижняя горизонтальная ось

propertyTopAxis : TChartAxis; //верхняя горизонтальная ось

propertyLeftAxis : TChartAxis; //левая вертикальная ось

propertyRightAxis : TChartAxis; //правая вертикальная ось

propertyDepthAxis : TChartAxis; //ось Z для трехмерных графиков

 

Каждая ось идентифицирует свое место в диаграмме посредством двух

свойств:

 

propertyHorizontal : Boolean; //только для чтения

propertyOtherSide : Boolean; //только для чтения

 

Соответствие между значениями, возвращаемыми данными свойствами, и местом оси в диаграмме приведено в табл. 18.2.

 

 

Таблица 18.2. Идентификация оси в диаграмме

Координатная ось Свойства оси
Horizontal OtherSide
LeftAxis False False
TopAxis True True
RightAxis False True
BottomAxis True False

 

 

Видимость координатных осей определяется свойством диаграммы:

 

propertyAxisVisible : Boolean;

 

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

 

propertyAutomatic : Boolean; //по умолчанию true

Далее программист самостоятельно назначает начало и конец отсчета соответственно:

 

propertyMinimum : Double;

propertyMaximum : Double;

 

В этом случае код, назначающий размерность для левой вертикальной оси от 0 до 100, будет выглядеть примерно так:

 

withChart1.LeftAxis do

Begin

Automatic:= False ;

Minimum := 0;

Maximum := 100;

end;

 

Эквивалентную задачу можно решить с помощью метода:

 

procedureSetMinMax(constAMin, AMax : Double);

 

Процедура сама переведет свойство Automatic в состояние false и передаст в свойства Minimum и Maximum значения аргументов AMin и AMax.

 

Chart1.LeftAxis.SetMinMax( 0, 100 );

 

Самое большое и самое малое значения точек связанного с осью координат графика проще всего выяснить, обратившись к методу:

 

procedureCalcMinMax (varAMin, AMax : Double);

 

Названные значения будут возвращены в формальные параметры AMin и AMax. Иногда обязанности по определению точек отсчета целесообразно распределить между осью диаграммы и программистом. Допустим, мы планируем всегда начинать отсчет с нулевой отметки, а максимальное значение доверяем выбрать диаграмме. Для этого у оси предусмотрены два свойства:

 

propertyAutomaticMaximum : Boolean;

propertyAutomaticMinimum : Boolean;

определяющие, какая из точек настраивается автоматически. Например:

withChart1.LeftAxis do

Begin

Automatic := False;

Minimum := 0;

AutomaticMaximum := True;

end;

 

При необходимости координатную ось допустимо привести к логарифмическому виду, для чего следует установить в true свойство:

 

propertyLogarithmic : Boolean;

 

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

 

propertyTitle : TChartAxisTitle;

 

Таблица 18.3. Класс TAxisLabelStyle

Значение Описание
talAuto Автоматический выбор стиля.
talNone Меток нет.
talValue Метки оси основываются на текущих значениях соответствующего графика и находятся в пределах его минимального и максимального значений.
talMark Каждый отдельный график описывается свойством Marks. Поведение таких меток схоже с поведением обычных всплывающих подсказок. Для более подробного понимания стиля см. описание класса TSeriesMarks.
talText Стиль метки такой же, как у свойства XLabels графика Series.

 

Расстояние от границы диаграммы до меток устанавливается в свойстве LabelsSize. Расстояние измеряется в пикселах и по умолчанию установлено в 0.

 

propertyLabelsSize : Integer;

 

Формат выводимых значений устанавливается в маске ввода:

 

propertyAxisValuesFormat : string;

По умолчанию шаблон маски ввода выглядит следующим образом: '#, ##0.###'. Если координатная ось предназначена для отображения времени, то форматирующая маска вывода даты/времени описывается в свойстве:

 

propertyDateTimeFormat : string;

 

Пример форматирующей строки приведен ниже:

 

Chart1.BottomAxis.DateTimeFormat:='dd/mm/yyyy'; // 15.11.2004

 

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

 

propertyOnGetAxisLabel : TAxisOnGetLabel;

TAxisOnGetLabel = procedure(Sender : TChartAxis; Series : TChartSeries;

ValueIndex : LongInt; varLabelText : string) of object;

 

Событие вызывается перед выводом метки на экран. Здесь Series – график, ValueIndex – индекс точки, LabelText – текст метки. Минимальный шаг между метками на оси описывается свойством:

 

propertyIncrement : Double;

 

Чтобы сделать ось видимой, установите в true ее свойство:

propertyVisible : Boolean;

 

За прорисовку координатной оси отвечает свойство Axis, в котором описываются характеристики пера, которым прочерчивается ось.

 

propertyAxis : TChartPen;

 

Особенности вывода на экран линий сетки определяются свойством:

 

propertyGrid : TChartPen;

 

Все перечисленные свойства доступны в Инспекторе объектов и на вкладке Axis встроенного редактора диаграммы (рис. 18.8).

Рис. 18.8. Страница настройки координатных осей диаграммы

 

Масштабирование

Доброжелательность диаграммы не имеет границ. Она всегда прилагает максимум усилий, дабы обслуживаемый ею график со всеми удобствами и главное целиком поместился в ее рабочей области. Но если график содержит более двух-трех десятков точек, то результат их «утрамбовки» в границах сравнительно небольшого окна выглядит как нагромождение отсчетов, в котором без лупы не разобраться. Для разрешения этой проблемы компонент TChart предлагает два пути:

 

Разбиение рабочей области диаграммы на несколько страниц с ограниченным

числом точек на каждой странице.

Масштабирование диаграммы.

 

Компонент TChart умеет отображать не только весь график в целом, но и его отдельный участок. Для этого достаточно программным образом настроить уже знакомые нам свойства Minimum и Maximum обеих осей диаграммы. Допустим отсчеты по осям X и Y начинались в точке (0, 0) и заканчивались в (100, 100). Если в рабочей области диаграммы мы хотим увидеть только ее центральную часть, то пишем следующий код:

 

withChart1 do

Begin

BottomAxis.Automatic := False;

BottomAxis.Minimum := 20;

BottomAxis.Maximum := 80;

LeftAxis.Automatic := False ;

LeftAxis.Minimum := 20;

LeftAxis.Maximum := 80;

end;

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

Для того чтобы разрешить диаграмме изменять свой масштаб при помощи описанных выше манипуляций с мышью, нужно присвоить значение true свойству:

 

propertyAllowZoom : Boolean;

 

Другой способ организовать масштабирование состоит в явном указании координат прямоугольной области:

 

procedureZoomRect(constRect : TRect);

 

Например:

Chart1.ZoomRect( Rect( 5,5,Chart1.Width-5,Chart1.Height-5 ) );

 

Простейшим способом масштабирования является указание процента увеличения в свойстве:

 

procedureZoomPercent(constPercentZoom : Double );

 

Например:

Chart1.ZoomPercent( 200 ); { Увеличение на 200% }

 

Если передаваемое значение превышает 100%, масштаб увеличивается, если меньше – уменьшается. Будьте внимательны: за 100% принимается текущее состояние диаграммы. В момент изменения масштаба генерируется событие:

 

propertyOnZoom : TNotifyEvent;

 

Возврат к нормальному режиму увеличения достигается при помощи метода:

 

procedureUndoZoom ;

 

Переход к масштабу по умолчанию сопровождается событием:

 

propertyOnUndoZoom : TNotifyEvent;

Процесс изменения масштаба может сопровождаться анимацией, что несколько замедляет ход увеличения (уменьшения) масштаба, но делает диаграмму более привлекательной. Для включения анимации установите в true свойство:

 

propertyAnimatedZoom : Boolean;

 

Включение анимации заставит диаграмму переходить от одного масштаба к другому не моментально, а постепенно, отображая промежуточные состояния. Количество переходных состояний указывается в свойстве:

 

propertyAnimatedZoomSteps : Integer;

 

 

Многостраничные диаграммы

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

 

propertyMaxPointsPerPage : LongInt;

 

Допустим, что график состоит из 95 точек и свойство MaxPointsPerPage равно 10, тогда последняя страница будет содержать всего 5 точек. Для того чтобы уточнить, как разместятся точки графика на последней странице, воспользуйтесь свойством:

 

propertyScaleLastPage : Boolean;

 

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

 

functionNumPages : Longint;

 

Индивидуальный номер страницы используется для идентификации страницы или для перехода к новой странице:

 

propertyPage : LongInt;

 

 

Два метода решают задачи перехода на страницу вперед и назад:

 

procedureNextPage;

procedurePreviousPage ;

 

О переходе к новой странице нам просигнализирует событие:

 

propertyOnPageChange : TNotifyEvent;

 

Например:

procedureTForm1.Chart1PageChange(Sender: TObject);

Begin

Label1.Caption := Format(‘Страница %d из %d’, [ (Sender as TChart).Page,

(Sender as TChart). NumPages]);

end;

 

Экспорт диаграмм

В классе TChart предусмотрен ряд методов, предназначенных для экспорта текущего изображения диаграммы в графический файл:

 

procedureSaveToBitmapFile(constFileName : string); //рисунок в формате *.bmp

procedureSaveToMetafile(constFileName : string); //рисунок в формате *.wmf

procedureSaveToMetafileEnh(constFileName : string); //рисунок в формате *.emf

 

Единственный параметр FileName предназначен для указания имени файла, в который будет сохранено изображение. Во время выполнения программы текущие данные могут быть сохранены во временный файл с именем AName:

 

procedureSaveChartToFile(AChart : TCustomChart; constAName : string);

Для загрузки данных из временного файла понадобится метод:

procedureLoadChartFromFile(varAChart : TCustomChart; constAName : string);

 

Для загрузки файла из сети Интернет по адресу, указанному в параметре URL, воспользуйтесь методом:

 

procedureLoadChartFromURL(varAChart : TCustomChart; constURL : string);

 

Отметим, что в классе TChart подготовлены специальные методы для работы с буфером обмена:

procedureCopyToClipboardBitmap;

procedureCopyToClipboardMetafile(Enhanced : Boolean);

 

Последний метод осуществляет копирование рабочей области диаграммы в буфер обмена Windows в виде метафайла. Формат метафайла определяется параметром Enhanced: false – формат *.wmf, true – формат *.emf. Для обеспечения доступа к указателю метафайла (с целью работы в Win32 API) потребуется функция:

 

functionTeeCreateMetafile(Enhanced : Boolean; constRect : TRect):TMetafile;

 

Функция создает новый метафайл и возвращает его указатель. Не забудьте уничтожить метафайл по завершении работы с ним.

 

varh : HMetafile;

. . .

h := Chart1.TeeCreateMetafile;

Try

....

Finally

DeleteObject( h );

end;

 

 

Печать диаграммы

Ориентация страницы печати осуществляется при помощи метода:

 

procedurePrintOrientation(AOrientation : TPrinterOrientation);

 

Может быть назначена портретная или альбомная ориентация. Другие способы:

 

procedurePrintPortrait; // портретная ориентация страницы

procedurePrintLandscape; // альбомная ориентация страницы

 

Поля страницы настраиваются при помощи свойства PrintMargins. По умолчанию все поля установлены в значение 15.

 

propertyPrintMargins : TRect;

 

Для отправки на печать всей клиентской части диаграммы вызовите метод:

 

procedurePrint;

В момент печати устанавливается в true свойство:

 

propertyPrinting : Boolean; //только для чтения

 

Следующие методы позволят распечатать диаграмму в строго определенном месте на странице:

 

procedurePrintRect(constR : TRect);

procedurePrintPartial(constR : TRect);

 

Место печати указывается в прямоугольной структуре R : TRect. Максимальный размер участка для печати составляет: (0, 0, Printer.PageWidth-1, Printer.PageHeight-1). Единственное отличие метода PrintPartial() от PrintRect() состоит в том, что он не вызывает методы принтера BeginDoc (новый документ) и EndDoc (конец документа).

При желании можно заставить диаграмму отобразить саму себя на любом объекте, обладающем свойством Canvas. Для этого пригодится метод:

 

procedureDraw(UserCanvas : TCanvas; constUserRect : TRect);

 

Во втором параметре надо установить границы прямоугольника, в пределах которого будет осуществляться прорисовка.

 

varUserRect : TRect;

Begin

UserRect.Left := 0;

UserRect.Right := Printer.PageWidth div 2;

UserRect.Top := 0;

UserRect.Bottom := Printer.PageHeight div 3;

Printer.BeginDoc;

Chart1.Draw(Printer.Canvas, UserRect);

Printer.EndDoc;

end;

 

Для печати в монохромном виде целесообразно установить в true свойство:

 

propertyMonochromePrinting : Boolean;

 

 





©2015 www.megapredmet.ru Все права принадлежат авторам размещенных материалов.