quickreport一问,急!!!高手指点,3x...(60分)

  • 主题发起人 主题发起人 guchenyi
  • 开始时间 开始时间
G

guchenyi

Unregistered / Unconfirmed
GUEST, unregistred user!
用QUICKREPORT作了一张报表。可是当我在REPORT SETTING 里面设置成A4纸是可以调用默认打印机
打印的,但是,我想打那种医院的配药发票,其长度只有A4的一半左右,所以我设置成
Custom size,但是每次打印,就会弹出Printer selected is not valid,是怎么回事??
难道,用CUSTOM SIZE设置后,默认打印机就变了??
还有一问,就是医院发票需要连续打印,我该如何处理,而且我发现发票的位置实在是很难
对准,希望有经验者赐教。。。。
 
手工设置打印机的纸张大小,要和QReport设置一样
以前我也有过这样的情况
 
能说明白点吗?在哪里设置??
 
自己在程序中指定纸张大小吧.
比如长宽,宽度.
 
老兄,我建议你还是用WHF改编自FR的REPORT MACHINE,不要用QR了,多累啊.
 
QR在处理版面方面,实在是太费事太罗嗦,你用FR或用REPORT MACHINE来做吧,估计你用一天时间就会熟悉的。
如果你非要在QR中做,你首先需要在打印机设置里,先设置好CUSTOM SIZE,然后,才可以在QR中设置。即便这个样子,程序在
运行时,估计还要出问题。根源一般在打印机开机后的默认纸张大小上,一般你要自己写程序控制打印机初始化默认纸大小。如果不这个样子,保险起见,程序
运行前,手工设置打印机默认属性为你定义好的那个CUSTOM SIZE。
 
楼上的,我也正想知道这个问题,如何手工设置打印机默认属性?
我试过printer.pagewidht和printer.pagelength,这两个均为readonly,不能修改!
 
可以利用API函数来实现。
下面这个你可以看下
http://www.9headbird.com/book/manual/vbapi/print1.htm
 
楼上的,可以具体说明吗?
如果自定义的纸张宽度只有60mm,可以控制打印完不继续走纸吗?
 
http://person.zj.cninfo.net/~yhaiyan/technology/vc/vc123.htm
讲的是用C来实现的。ITSME可以去看看。
 
http://www.powerba.com/develop/delphi/article/20010312007.htm
更改最后的数字,8,9,10,11,里面有详细的实现,DELPHI的。我刚查到。
对打印机的代码控制。
那个工具有好多呀,好象论坛里就有好多,你搜下就可以了。现在已经是2.46的了。
 
首先可以把你的QR升级到3.0以上的版本,这样用自定义纸张大小才有用。
也可以自己用API函数定义纸张大小,如下:(只要传入你要的纸张长度和宽度就可以了)
procedure SetCustomPaper(paperlength:integer;paperwidth:integer);
var
Device : array[0..255] of char;
Driver : array[0..255] of char;
Port : array[0..255] of char;
hDMode : THandle;
PDMode : PDEVMODE;
begin
//Printer.PrinterIndex := Printer.PrinterIndex;
{Printer.GetPrinter(Device, Driver, Port, hDMode);
if hDMode <> 0 then
begin
pDMode := GlobalLock(hDMode);
if pDMode <> nil then
begin
pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
pDMode^.dmPaperSize := DMPAPER_LEGAL;

pDMode^.dmFields := pDMode^.dmFields or
DM_PAPERSIZE or
DM_PAPERWIDTH or
DM_PAPERLENGTH;
pDMode^.dmPaperSize := DMPAPER_USER;
pDMode^.dmPaperWidth := 2794;//2160 ;
pDMode^.dmPaperLength := 1420;//380 ;
ResetDC(Printer.Handle,pDMode^);
GlobalUnlock(hDMode);
end;
end;
}
// Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(Device,Driver,Port,hDMode);
if (paperlength >= 0) and (paperwidth >= 0) then
begin
if hDMode <> 0 then
begin
pDMode := GlobalLock(hDMode);
if pDMode <> nil then
begin
pDMode^.dmPaperSize := 256;
pDMode^.dmPaperLength := paperlength;
pDMode^.dmPaperWidth := paperwidth;
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE;
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERLENGTH;
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERWIDTH;
ResetDC(Printer.Handle,pDMode^);
GlobalUnlock(hDMode);
end;
end;
end;
end;
 
对了,中间大括号中的不要。
 
816,谢谢。能告诉我fast report在哪里有?
我用qr来打印一个票据,宽度只有60mm,但打印后却走了一整纸,能控制它打印到最后一行
后就不走纸吗?

 
多人接受答案了。
 
后退
顶部