Справочник по компонентам Delphi. Часть 3 - Печать данных из приложения
ОГЛАВЛЕНИЕ
Печать данных из приложения
Практически каждое приложение, работающее в Windows, имеет набор возможностей, позволяющих печатать те или иные данные. В состав Delphi включен специальный модуль — PRINTERS, в котором описан класс TPrinter, инкапсулирующий интерфейс печати Windows.
TPrinter = class(TObject)
Свойства и методы этого класса позволяют разработчику реализовать достаточно широкий набор возможностей для печати из приложения. Экземпляр объекта TPrinter с именем Printer создается автоматически при запуске приложения, если в его состав включен соответствующий модуль.
Обычно перед началом печати какого-либо документа из приложения необходимо проверить и при необходимости переустановить стандартные параметры. Этот процесс может быть как автоматическим (проверка и переопределение по умолчанию из программы), так и интерактивным (при помощи стандартных диалоговых окон PrintDialog и PrintSetupDialog).
Информацию обо всех инсталлированных в системе принтерах содержит список свойства:
(Ro) property Printers: TStrings;
Свойство доступно только при вьшолнении приложения. Информация о том, какой принтер из списка является текущим, содержится в свойстве:
property Printerlndex: Integer;
Оно возвращает порядковый номер принтера в списке. Значение -1 используется для идентификации принтера, установленного по умолчанию.
Метод
procedure GetPrinter(ADevice, ADriver, APort: PChar; var ADeviceMode: THandle);
возвращает параметры текущего принтера, используя для его идентификации значение свойства Printerlndex.
Метод
procedure SetPrinter(ADevice, ADriver, APort: PChar; ADeviceMode: THandle);
проверяет, инсталлирован ли в системе принтер с заданными параметрами. В случае успеха этот принтер становится текущим, в случае неудачи инсталлируется новый принтер. Использование этих двух методов не рекомендуется справочным руководством, так как по мнению разработчиков вполне достаточно свойств Printers и Printerlndex. Авторы также рекомендуют применять эти методы только подготовленньм разработчикам, если им необходимо работать с драйверами принтеров.
Свойство
(Ro) property Fonts: TStrings;
содержит список шрифтов, поддерживаемых текущим принтером. Свойство доступно только при вьшолнении приложения.
Расположение листа бумаги определяется свойством:
property Orientation: TPrinterOrientation;
TPrinterOrientation = (poPortrait, poLandscape) ;
Свойство доступно только при выполнении приложения. Высоту и ширину листа бумаги содержат свойства:
(Ro) property PageHeight: Integer;
(Ro) property PageWidth: Integer;
Свойство
property Title: string;
содержит текстовую строку, которая используется для идентификации процесса печати (работы) в списке Диспетчера печати Windows.
Дескриптор принтера, с которым связан объект TPrinter, возвращается в свойстве:
(Ro) property Handle: HDC;
Поверхность печатаемой страницы доступна для вывода графических объектов (например, изображений) через свойство:
(Ro) property Canvas: TCanvas;
При использовании канвы необходимо проверить используемый принтер на предмет поддержки графики. Свойство доступно только при выполнении приложения.
Для управления процессом печати объект содержит набор методов и свойств:
procedure BeginDoc; | Начинает печать документа. |
procedure EndDoc; | Завершает печать документа. |
(Ro) property Printing: Boolean; | Определяет состояние процесса. Возвращает True во время печати. |
procedure Abort; | Используется для прерывания печати. |
(Ro) property Aborted: Boolean; | Устанавливается в True, если печать прервана. |
procedure NewPage; | Отменяет печать текущей страницы и начинает распечатку следующей. При этом значение свойства PageNumber увеличивается на единицу. |
(Ro) property PageNumber: Integer; | Содержит номер печатаемой страницы. Обращение к нему имеет смысл только в процессе печати документа. |
В модуле PRINTERS описан метод
procedure AssignPrn(var F: Text);
который связывает текстовую файловую переменную с текущим принтером, что позволяет направлять на принтер текстовые данные, используя традиционные процедуры Write и Writeln. При печати используется шрифт, определенный в канве объекта TPrinter. Следующий пример распечатывает
содержимое многострочного редактора PrintMemo при нажатии кнопки printBtn:
procedure PrintForm.PrintBtnClick(Sender: TObject);
var
PrnTxt: System.Text;
i: Integer;
begin
AssignPrn(PrnTxt);
Rewrite(PrnTxt);
for i := 0 to PrintMemo.Lines.Count - 1 do
Writeln (PrnTxt, PrintMemo.Lines [ i ]);
CloseFile(PrnTxt);
end;
Для печати графики необходимо передать требуемый графический объект (изображение, график, фигуру) в канву объекта Printer. В следующем примере при нажатии кнопки PrintBfcn печатается изображение из компонента Printlmage:
procedure PrintForm.PrintBtnClick(Sender: TObject);
begin
with Printer do
begin
BeginDoc;
Canvas.Draw(0, 0, Printlmage.Picture.Graphic);
EndDoc;
end;
end;
При необходимости пропорции распечатываемого графического объекта можно скорректировать при помощи свойства формы-контейнера PrintScale.