Многостраничные диаграммы
Нередко программист сталкивается с ситуацией, когда все точки графика невозможно физически отобразить на рабочей поверхности диаграммы. В таком случае допускается разбиение диаграммы на несколько страниц. Для этого прежде всего необходимо указать максимальное количество точек, размещаемых на одной странице:
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;
Дата добавления: 2016-03-15; просмотров: 621;