11 января 2011
Печать изображений из TImage
Очень часто при работе с графикой возникает необходимость в выводе изображения на бумагу. Сделать это не так просто, поскольку штатной функции для печати изображений в LCL, увы, нет (хотя есть её набросок, что позволяет надеяться на появление таковой в будущем).
Однако, если воспользоваться глобальным объектом Printer, можно распечатать любое изображение без лишних хлопот:
uses printers, PrintersDlgs, jwawingdi; procedure TForm1.MyPrintBitmap(xImage: TImage); var printerDialog : TPrintDialog; myPrinter : TPrinter; ImageRect: TRect; ScaleX, ScaleY: integer; begin // Создание диалога для выбора принтера printerDialog:=TPrintDialog.Create(Form1); // Вызываем диалог выбора принтера if printerDialog.Execute then begin // Получаем доступ к глобальному объекту Printer myPrinter := Printer; with myPrinter do begin // Коэффициенты масштабирования изображения ScaleX:= GetDeviceCaps(myPrinter.Canvas.Handle, logPixelsX) div PixelsPerInch; ScaleY:= GetDeviceCaps(myPrinter.Canvas.Handle, logPixelsY) div PixelsPerInch; // Начало печати BeginDoc; // Отрисовка нашего изображения на виртуальной канве принтера ImageRect:=Rect(0, 0, xImage.Picture.Width * ScaleX, xImage.Picture.Height * ScaleY); Canvas.StretchDraw(ImageRect, xImage.Picture.Bitmap); // Конец печати EndDoc; end; end; end;
Вызывается эта функция одной простой строчкой:
procedure TForm1.Button2Click(Sender: TObject); begin // В качестве параметра передаём любой компонент TImage MyPrintBitmap(Image1); end;
Как обычно вы можете скачать пример целиком.
6 комментариев
Скачал Ваш пример. В компонент Image загрузил конкретный рисунок. Код не изменял. Попробовал скомпилировать.
В окошечке «Сообщения» выскочил следующий текст:
windres: can’t open file `TForm1′: No such file or directory
Hint: Start of reading config file C:lazarusfpc2.2.4bini386-win32fpc.cfg
Hint: End of reading config file C:lazarusfpc2.2.4bini386-win32fpc.cfg
Free Pascal Compiler version 2.2.4 [2009/10/25] for i386
Copyright (c) 1993-2008 by Florian Klaempfl
Target OS: Win32 for i386
Compiling project1.lpr
Compiling unit1.pas
unit1.pas(18,28) Hint: Parameter «Sender» not used
unit1.pas(19,26) Hint: Parameter «Sender» not used
Compiling resource C:Documents and SettingsUser??? ??????????????????????????????????? ? Lazarus?????? ???????1_Print_TImage1_Print_TImageunit1.lfm
c:lazarusfpc2.2.4bini386-win32windres.exe: can’t open file `TForm1′: No such file or directory
unit1.pas(76,2) Error: Error while linking
unit1.pas(76,2) Fatal: There were 1 errors compiling module, stopping
Не подскажете что не так?