| 
| 
 | Вопрос # 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;Более подробно смотрите в Приложении...Желаю удачи.
 Приложение:Переключить в обычный режим                                     beginPixelsX:=GetDeviceCaps(printer.Handle,LogPixelsX);PixelsY:=GetDeviceCaps(printer.Handle,LogPixelsY);end;  beginPrinterCoordX:=round(PixelsX/25.4*x);end;  beginPrinterCoordY:=round(PixelsY/25.4*Y);end;GetPrinterInfo; Printer.Canvas.TextOut(PrinterCoordX(30), PrinterCoordY(55),            procedure TForm6.SpeedButton1Click(Sender: TObject);varPRect: Trect;PBitMap: TBitmap;beginPBitmap := 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. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |