控制打印机走纸长度?(200分)

  • 主题发起人 主题发起人 myhby
  • 开始时间 开始时间
M

myhby

Unregistered / Unconfirmed
GUEST, unregistred user!
LQ-300k+打印机,连续打印纸
windows2000 delphi7.0 Qreport3.09
Qreport中页设置为自定义,高度为1/2纸的高度(5.5英寸)。打印预览时正常,可在实际打印中每打一张,打印机在换页时总是走一整页,而不是想要的半页高度。
求各位大侠高见,或解决方案?
 
你把系统中打印机属性也设置成自定义页面的高度试试。
这个时候分页应该是系统,或者是打印机自己执行的。
 
改成端口发命令算了,走纸控制自如
 
在win98中是有自定义设置的,但在win2000以上系统中是没有自定义纸张的。在win2000中虽然可以通过在“打印机设置”中的“服务器属性”中定义一个纸张类型,但在delphi+ Qreport中是没有办法选择到该纸型的。
旭用端口控制,则通用性不强。设计复杂一点的报表较难。
 
在打印机属性里,选择高级,点打印默认值按钮,选择纸张/质量,点高级按钮,设置好默认的纸张大小为自定义的纸张大小,quickreport的纸张格式设置为default即可。
 
设置一下就行
 
QR不好用設成default也沒用,建議用別的報表或用PRINTER直接輸出,並且在打印機屬性新增一個default,長度跟你的報表一樣。。。搞定,收功。。。
 
2000,xp下也可以自定义纸张大小,具体方法如下:
打印机设置,控制面板—>打印机—>选择此窗口里的文件—>服务器属性—>创建新格式—>设置新格式名称为21x9(宽21cm高9cm)—>保存格式—>打印机属性页—>高级 —>打印默认值—>纸张/质量—>高级—>纸张大小—>21x9,点确定按钮完成设置。
我也是前不久才调试好的,保证能用。
 
参考
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3550192
 
这个是老生常谈了,看看mingzy的方案吧!
另外QuickReport也要设置为Custom!
 
算了,送你一段函数吧
procedure printPage(
const formName: string;
const formWidth, formLength:integer);
var
PrintDevice, PrintDriver, PrintPort : array[0..255] of Char;
hDMode :THandle;
hPrinter :THandle;
FormInfo :TFormInfo1;
PaperSize:TSize;
PaperRect:TRect;
begin
{Win2K/XP/2003下添加打印纸张,单位:0.1毫米}
try
Printer.GetPrinter(PrintDevice, PrintDriver, PrintPort, hDMode);
OpenPrinter(PrintDevice, hPrinter, nil);
if hPrinter = 0 then
raise Exception.Create('打开打印机失败!');
try
{删除纸张格式----------------------------------------------------------------}
if(formWidth = 0)
or(formLength= 0) then
begin
DeleteForm(hPrinter, PChar(formName));
exit;
end;
{增加纸张格式----------------------------------------------------------------}
FormInfo.Flags := FORM_USER;
FormInfo.pName := PChar(FormName);
PaperSize.cx := formWidth *100;
PaperSize.cy := formLength*100;
PaperRect.Left := 0;
PaperRect.Top := 0;
PaperRect.Right := PaperSize.cx;
PaperRect.Bottom := PaperSize.cy;
FormInfo.Size := PaperSize;
FormInfo.ImageableArea := PaperRect;
if SetForm(hPrinter, PChar(FormName), 1, @FormInfo) then
exit;{纸张存在}
if AddForm(hPrinter, 1, @FormInfo) then
exit;
{添加成功}
// case GetLastError of
// ERROR_FILE_EXISTS: strTemp := '纸张格式已经存在!';
// Form name exists?
// ERROR_ACCESS_DENIED: strTemp := '存取失败!';
// ERROR_INVALID_HANDLE: strTemp := '无效句柄';
// ERROR_NOT_READY: strTemp := '设备没有准备!';
// ERROR_CALL_NOT_IMPLEMENTED: strTemp := '系统不支持!';
// else
strTemp := '增加纸张格式失败!';
// end;
// raise Exception.Create(strTemp);
finally
ClosePrinter(hPrinter);
end;
except
end;
end;

调用 printPage('Custom', 23000, 14000);{WinNT下添加自定义打印页格式}
 
大家说的不错,在NT下确实可以处定义纸张类型,但在QR中看不到处定义的纸张类型。
在QuickReport中设置为Custom,width,Hight。
在打印连续纸时(241带孔),打印内容及位置正常,只是走纸仍为一整张,不能走到半张或,1/3,/1/4。
 
quickreport的纸张格式设置为default才行
 
在Qrp中将纸张格式设置为default时,打印机确实可以正常走纸。
但是:default有个问题,就是设置width与length属性时,其数值会自动改变,另外还需要在打印机中选择定义好的纸张,不知有何解决的好办法。
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
610
import
I
D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部