各位大虾,我编的打印程序为什么打不出图形??急急急急急!!!!!!150大散分!(150分)

  • 主题发起人 主题发起人 -{GOD}-Casal
  • 开始时间 开始时间
G

-{GOD}-Casal

Unregistered / Unconfirmed
GUEST, unregistred user!
我的原代码是:
procedure TForm1.Print1Click(Sender: TObject);
var
strect:trect;
gao,kuan:integer;
begin
if printdialog1.Execute then
begin
gao:=image1.Picture.height;
kuan:=image1.Picture.width;
while (gao=(printer.pageheight div 2))and(kuan=(printer.pagewidth div 2))do
begin
gao:=gao+gao;
kuan:=kuan+kuan;
end;
with strectdo
begin
top:=(printer.PageHeight-gao) div 2;
left:=(printer.PageWidth-kuan) div 2;
right:=left+kuan;
bottom:=top+gao;
end;
with printerdo
begin
begin
doc;
canvas.StretchDraw(strect,image1.Picture.Graphic);
enddoc;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
image1.Canvas.MoveTo(50,50);
image1.Canvas.LineTo(100,100);
image1.Canvas.LineTo(150,200);
image1.Canvas.LineTo(50,50);
end;

end.
请各位大虾看看哪个地方有问题??
现在是能打印,但打不出图形来,谢谢了!
快来帮忙,up!!
 
打印机是不是彩色的,如果是,请检查墨盒。
看你提供的代码,总觉得没什么问题。
 
procedure TForm1.Print1Click(Sender: TObject);
var
strect:trect;
gao,kuan:integer;
begin
if printdialog1.Execute then
begin
gao:=image1.Picture.height;
kuan:=image1.Picture.width;
while (gao=(printer.pageheight div 2))and(kuan=(printer.pagewidth div 2))do
begin
gao:=gao+gao;
kuan:=kuan+kuan;
end;
with strectdo
begin
top:=(printer.PageHeight-gao) div 2;
left:=(printer.PageWidth-kuan) div 2;
right:=left+kuan;
bottom:=top+gao;
end;
with printerdo
begin
begin
doc;
canvas.StretchDraw(strect,image1.Picture.Graphic);
enddoc;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
image1.Canvas.MoveTo(50,50);
image1.Canvas.LineTo(100,100);
image1.Canvas.LineTo(150,200);
image1.Canvas.LineTo(50,50);
end;

end.
大家看看那地方出错了,为什么打印纸上没有图
 
to chnplzh:
谢谢你的回答,我已经检查了打印机,是彩色的,墨盒也有
可就是打不出图形,我很头痛啊
现在还急着用!!
 
给strect赋一固定值试试。
 
实在不行,那按你的代码试试在FORM上能否显示,如果能正常,那就只好
检查打印代码了。
另外一种排除法是,输出一段文字,如用TextOut,看看打印机能否打印。
 
不要用StretchDraw,打印出来的质量太差
 
你是否在此98下运行你的程序?
 
因为打印机和屏幕的分辨率不一样,所以你的strect所划定的区域可能很小,看不出来
转换一下:
ScaleX :=GetDeviceCaps(Handle,LogPixelsX) div Screen.PixelsPerInch ;
ScaleY :=GetDeviceCaps(Handle,LogPixelsY) div Screen.PixelsPerInch;
gao:=image1.Picture.height*Scalex;
kuan:=image1.Picture.width*Scaley
 
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;
 
后退
顶部