Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.03.2014, 21:19
Akunin Akunin вне форума
Прохожий
 
Регистрация: 02.12.2010
Сообщения: 7
Репутация: 10
Восклицание Сохранение 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  
Старый 21.03.2014, 05:45
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А что мешает написать процедуру, которая на вход принимает Canvas и на ней все отрисовывает? А уж какую канву ей подсунуть - это уже дело вызывающего кода. Собственно, так и сделал в одной из своих программ. Процедура отрисовки для печати и превью одна и та же, только "подсовывается" разная канва (ну там еще небольшие игры с пересчетом координат и размеров, т.к. кол-во точек у принтера обычно существенно больше, чем у экрана).
Ответить с цитированием
  #3  
Старый 21.03.2014, 18:16
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
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  
Старый 22.03.2014, 23:43
Akunin Akunin вне форума
Прохожий
 
Регистрация: 02.12.2010
Сообщения: 7
Репутация: 10
Печаль !

Дело в том, что мне не нужно просто сохранить канву принтера в изображение. Пробовал разные варианты, пока не получается-сохраняет пустое изображение.
Как вариант-печатать сразу в файл, но это не красиво для решения моей задачи. Нужно что-то наподобие этого... объясните, в чем ошибка...
Код:
  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  
Старый 23.03.2014, 10:31
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

удали Bitmap вообще и не используй Abort
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 24.03.2014, 10:32
Akunin Akunin вне форума
Прохожий
 
Регистрация: 02.12.2010
Сообщения: 7
Репутация: 10
По умолчанию

И что дальше?
Каким образом тогда сохранять канву в файл?
Такое ощущение, что вы не совсем педставляете задачу...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:45.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025