|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Сохранение Printer.Canvas
Добрый день.
Вопрос: Как сохранить Printer.canvas в переменную/файл? Что-то вроде этого Код:
begin // задание настроек принтера-размер бумаги, ориентация, коллаж, дуплекс и т.п. Printer.BeginDoc; // задание некоторых свойств Printer.Canvas.Font Printer.canvas.Textout(5,5,'бла бла бла'); // Вот здесь нужно выдернуть содержимое Printer.canvas и сохранить ее в какую-нибуть переменную, например, типизированную как TBitmap. // с размерами переменной вопросов не возникает, не могу именно импортировать изображение. Помогите в какую сторону копать, читал про метафайлы и ТП, может в сторону GDI? // далее можно Printer.Abort и т.п., это не важно. может быть что-то типа printer.BeginDoc; printer.Canvas.TextOut(5,5,'aaaaa'); Form1.canvas.CopyRect(Bounds(10,10,30,30),Printer.Canvas,Bounds(10,10,30,30)); printer.Abort MAD: пользуемся тегами! Последний раз редактировалось M.A.D.M.A.N., 23.03.2014 в 10:02. |
#2
|
|||
|
|||
А что мешает написать процедуру, которая на вход принимает Canvas и на ней все отрисовывает? А уж какую канву ей подсунуть - это уже дело вызывающего кода. Собственно, так и сделал в одной из своих программ. Процедура отрисовки для печати и превью одна и та же, только "подсовывается" разная канва (ну там еще небольшие игры с пересчетом координат и размеров, т.к. кол-во точек у принтера обычно существенно больше, чем у экрана).
|
#3
|
||||
|
||||
Код:
unit Unit1; interface uses Printers, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; ACanvas: TCanvas; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Printer.BeginDoc; ACanvas:=Printer.Canvas; // end; end. Пишу программы за еду. __________________ |
#4
|
|||
|
|||
!
Дело в том, что мне не нужно просто сохранить канву принтера в изображение. Пробовал разные варианты, пока не получается-сохраняет пустое изображение.
Как вариант-печатать сразу в файл, но это не красиво для решения моей задачи. Нужно что-то наподобие этого... объясните, в чем ошибка... Код:
Bitmap: TBitmap; Source, Dest: TRect; acanvas:Tcanvas; begin Bitmap := TBitmap.Create; try printer.BeginDoc; printer.Canvas.TextOut(5,5,'aaaaa'); acanvas:=printer.Canvas; Dest:= Rect(0, 0, 200, 200); Source:= Rect(0, 0, 200, 200); Bitmap.Canvas.CopyRect(Dest, acanvas, Source); Bitmap.SaveToFile('C:\1.bmp'); printer.Abort; finally Bitmap.Free; end; // try MAD: теги. последнее предупреждение. Последний раз редактировалось M.A.D.M.A.N., 23.03.2014 в 10:02. |
#5
|
||||
|
||||
удали Bitmap вообще и не используй Abort
Пишу программы за еду. __________________ |
#6
|
|||
|
|||
И что дальше?
Каким образом тогда сохранять канву в файл? Такое ощущение, что вы не совсем педставляете задачу... |
#7
|
||||
|
||||
Цитата:
|
#8
|
|||
|
|||
смысл заключается, видимо, в том, что ТС сам не понимает зачем он это хочет и как это сделать. Коду все равно на какой канве рисовать, принтер это или Bitmap. Соответсвенно, надо просто коду подсовывать канву соотв. размера.
|
#9
|
|||
|
|||
Мне не нужно печататть на "какой-то канве, типа bitmap". Необходим именно printer.canvas.
Печать отменять не обязательно, я в начале написал, что можно отменять, а можно и нет. Смысл, вкратце, такой: 1) заполнить канву принтера некоторыми символами. 2) считать с канвы в файл. 3) можно печать или абортить печать, на данном этапе это не важно. 4) обрабатывать сохраненный файл некоторыми алгоритмами. в кратце-задача-доказать, что в канве принтера не произошло никаких искажений (после передачи туда контента, как textout так и графики), т.е. своего рода обратный контроль. пока никто дельных вариантов не предложил. Последний раз редактировалось Akunin, 25.03.2014 в 01:36. |
#10
|
||||
|
||||
обработай символы до вывода на печать. доказывать ничего не нужно - при правильном подходе все будет без искажений.
Пишу программы за еду. __________________ |