|
Вопрос # 1 699/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
У меня такой вопрос, программа рисует на Form.Canvas прямоугольники, они накладываются друг на друга, это перекрытие и является важным моментом(координаты задаются на Форме в тексовом поле). Как распечатать эти рисунки с Формы? Данные текстовых полей печатаются, а рисунок на печать не выходит(
 |
Вопрос задала: Камилла (статус: Посетитель)
Вопрос отправлен: 16 июня 2008, 20:54
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Feniks
Здравствуйте, Камилла!
Самый простой и быстрый способ - это использовать класс TPrinter.
Delphi имеет стандартный объект для доступа к принтеру - TPRINTER,
находящийся в модуле PRINTERS. В этом модуле имеется
переменная Printer:Tpinter, что избавляет от необходимости описывать свою.
Он позволяет выводить данные на печать и управлять процессом печати.
Правда, в некоторых версиях Delphi 1 он имеет "глюк" - не работают
функции Draw и StrethDraw. Но эта проблема поправима - можно
использовать функции API. Далее приведены основные поля и методы объекта Printers :
PROPERTY
Aborted:boolean - Показывает, что процесс печати прерван
Canvas:Tcanvas - Стандартный Canvas, как у любого графического объекта.
Он позволяет рисовать на листе бумаге графику, выводить текст ... .
Тут есть несколько особенностей, они описаны после описания объекта.
Fonts:Tstrings - Возвращает список шрифтов, поддерживаемых принтером
Handle:HDS - Получить Handle на принтер для использования функций API (см. Далее)
Orientation:TprinterOrientation - Ориентация листа при печати : (poPortrait, poLandscape)
PageHeight:integer - Высота листа в пикселах
PageNumber:integer - Номер страницы, увеличивается на 1 при каждом NewPage
PageWidth:integer - Ширина листа в пикселах
PrinterIndex:integer - Номер используемого принтера по списку доступных принтеров Printers
Printers:Tstrings - Список доступных принтеров
Printing:boolean - Флаг, показывающий, что сейчас идет процесс печати
Title:string - Имя документа или приложения. Под этим именем задание на печать
регистрируется в диспетчере печати
METODS
AssignPrn(f:TextFile) - Связать текстовый файл с принтером.
Далее вывод информации в этот файл приводит к ее печати.
Удобно в простейших случаях.
Abort - Сбросить печать
BeginDoc - Начать печать
NewPage - Начать новую страницу
EndDoc - Завершить печать.
Пример:
Procedure TForm1.Button1Click(Sender: TObject);
Begin
With Printer do Begin
BeginDoc; { Начало печати }
Canvas.Font:=label1.font; { Задали шрифт }
Canvas.TextOut(100,100,'Это тест принтера !!!'); { Печатаем текст }
EndDoc; { Конец печати }
end;
end;
Более подробно смотрите в Приложении...
Желаю удачи.
Приложение: Переключить в обычный режим-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- begin
- PixelsX:=GetDeviceCaps(printer.Handle,LogPixelsX);
- PixelsY:=GetDeviceCaps(printer.Handle,LogPixelsY);
- end;
-
-
- begin
- PrinterCoordX:=round(PixelsX/25.4*x);
- end;
-
-
- begin
- PrinterCoordY:=round(PixelsY/25.4*Y);
- end;
- GetPrinterInfo;
-
- Printer.Canvas.TextOut(PrinterCoordX(30), PrinterCoordY(55),
-
-
-
-
-
-
-
-
-
-
-
-
- procedure TForm6.SpeedButton1Click(Sender: TObject);
- var
- PRect: Trect;
- PBitMap: TBitmap;
- begin
- PBitmap := TBitMap.Create;
- PBitmap.LoadFromFile('C:1.bmp');
- with PRect do
- begin
- left := 0;
- top := 0;
- right := Printer.PageWidth;
- Bottom := Printer.PageHeight;
- end;
- with printer do
- begin
- BeginDoc;
- font.name := 'Times New Roman';
- Canvas.StretchDraw(PRect, Bitmap);
- EndDoc;
- end;
- PBitmap.Free;
-
- end;
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 17 июня 2008, 18:24
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 17 июня 2008, 09:00; участников в обсуждении: 1.
|
min@y™ (статус: Доктор наук), 17 июня 2008, 09:00 [#1]:
Если координаты, параметры (Brush, Pen) и очерёдность отрисовки каждого прямоугольника известны, то можно их рисовать прямо сразу и на Printer.Canvas (естественно, учитывая PixelsPerInch канваса формы и размер страницы принтера в пикселах этого принтера).
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|