在timage控件上画好的图案怎么把他打印出来(200分)

  • 主题发起人 主题发起人 alei_nb
  • 开始时间 开始时间
A

alei_nb

Unregistered / Unconfirmed
GUEST, unregistred user!
在timage控件上画好的图案怎么把他打印出来
 
qrimage1.Picture:=image1.Picture;
QuickRep1.Preview;
 
Printer
Canvas
 
用下面的方法即可
if PrintDialog1.Execute then

begin

Printer.begin
Doc;
Printer.Canvas.Draw(0,0,Image1.Picture.Graphic);
Printer.EndDoc;
end;

不过这种方法使用的是打印机的分辨率,处理起来不太灵活,可以试试打印机Canvasr的StrethDraw
方法,方法声明为:
procedure StretchDraw(const Rect:TRect;Graphic:TGraphic);
其中RECT参数代表图形输出区域的大小,TRECT的类型声明为:
TRect=record
case Integer of
0:(Left,Top,Right,Bottom:Integer);
1:(TopLeft,BootomRight:TPoint);
end;

只要调整Rect的大小及在打印页面上位置就可达到满意的效果。
 
uses printers;
with printerdo

begin

begin
Doc;
Canvas.Draw((PageWidth - image1.Width) div 2,
(PageHeight - image1.Height) div 2,
image1.bitmap.Graphic);
EndDoc;
end;

 
编写通用的函数,参数为canvas,代入iamge1.canvas 可看到效果。代入print.canvas则
输出到打印机,
另外加 begin
Doc,... EndDoc;
一般正常,但好像不同打印机输出的结果不同,具体我明天再test
 
Delphi文本和图形的打印方法


一、基本知识

1、在代码单元的Uses部分增加Printers,打印实际上是把要打印的内容画到tprinter的canvas画布上。

2、选择输出的打印机:printdialog1.execute

3、选择打印控制选项 printersetupdialog1.execute;


二、打印文本

//打印Memo1中的内容

procedure TForm1.BitBtn1Click(Sender: TObject);

var

lines:integer;

prntext:text;
定义打印文本变量

begin


if printdialog1.execute then


assignprn(prntext);
//将prntext文件分配给打印机

rewrite(prntext);
//打开prntext文件

printer.canvas.font:=memo1.font;
//设置打印对象的canvas的字体

for lines:=0 to memo1.lines.count-1do


writeln(prntext

memo1.lines[lines]);
//把Memo1的内容写到打印机对象

system.close(prntext);
//关闭打印文件

end;



三、打印图形

1、利用打印机的分辨率,图形将打印在页面的左上角,图形较小。

procedure TForm1.BitBtn1Click(Sender: TObject);

begin


if printdialog1.execute then


begin


printer.begin
doc;

printer.canvas.draw(0

0

image1.picture.graphic);

printer.enddoc;

end;


end;


2、利用打印机画布canvas的stretchdraw方法

可以对图形进行更为灵活的处理。

其中要用到一个代表图形输出区域的Rect参数

Trect的类型定义如下:

TRect = record

case Integer of

0: (Left

Top

Right

Bottom: Integer);

1: (TopLeft

BottomRight: TPoint);

end;

 


例:通过调整Rect的范围、图形大小及其在打印页面上的位置,实现图形打印:

procedure TForm1.Button1Click(Sender: TObject);

var strect:Trect;
//定义打印输出矩形框的大小

temhi

temwd:integer;

begin


if printdialog1.execute then


begin


temhi:=image1.picture.height;

temwd:=image1.picture.width;

while (temhi<printer.pageheight div 2) and //将图形放大到打印页面的1/2 (temwd<printer.pagewidth div 2)do
begin


temhi:=temhi+temhi;

temwd:=temwd+temwd;

end;


with strectdo
//定义图形在页面上的中心位置输出

begin


left:=(printer.pagewidth -temwd) div 2;

top:=(printer.pageheight-temhi) div 2;

right:=left+temwd;

bottom:=top+temhi;

end;


with Printerdo
begin


begin
doc;
//将放大的图形向打印机输出

canvas.stretchdraw(strect

image1.picture.graphic);

enddoc;

end;


end;


end;

 
按照显示比例打印IMAGE上的图象 :

uses Printers;

procedure TForm1.Button1Click(Sender: TObject);
var
ScaleX, ScaleY: Integer;
R: TRect;

begin

Printer.begin
Doc;
// **
with Printerdo

try
ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
R := Rect(0, 0, Image1.Picture.Width * ScaleX,
Image1.Picture.Height * ScaleY);
Canvas.StretchDraw(R, Image1.Picture.Graphic);
// **
finally
EndDoc;
// **
end;

end;
 
我今天下午就在做这活。
既然有各种报表工具,你干吗不用?
几乎所有的报表工具都有这中功能(我今天就是把以前的qr改为fast的)
打印之前用
qrimage1.Picture:=image1.Picture;

qrimage1.Picture.bmp.assign(image1.Picture.bmp) 都行;



 
hamsoft,能不能说说你的具体做法呀,分数好说!!
 
后退
顶部