![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Добрый день.
Вопрос: Как сохранить 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.AbortMAD: пользуемся тегами! Последний раз редактировалось 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; // tryMAD: теги. последнее предупреждение. Последний раз редактировалось M.A.D.M.A.N., 23.03.2014 в 10:02. |
|
#5
|
||||
|
||||
|
удали Bitmap вообще и не используй Abort
|
|
#6
|
|||
|
|||
|
И что дальше?
Каким образом тогда сохранять канву в файл? Такое ощущение, что вы не совсем педставляете задачу... |