在线等待打印问题,奉送所有的1326分(300分)

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

messagebox

Unregistered / Unconfirmed
GUEST, unregistred user!
操作系统:ms windows98/2000/2003/xp
报表控件:QuickRpt
使用QuickRpt控件定义一张报表
高度大约35CM,
长度大约80CM.
不需用户作任何的设置就可以完整的打印出来!!
并询问QuickRpt页面设置与打印机纸张设置的关系!!
注:已经尝试使用
procedure TForm1.SetPaperSize(X, Y: Integer);
// 单位是0.1mm
// A4时 Printer.Pagewidth:=1440; A5时 Printer.Pagewidth:=1049;
// B5时 Printer.Pagewidth:=1290; 16K时 Printer.Pagewidth:=1035;
// lq1600宽行打印机这个值宽度最大为42cm左右, 长度大约2m。
//改变devicemode结构
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);
Printer.Orientation := poPortrait;
if hDMode <> 0 then
begin
pDMode := GlobalLock(hDMode);
if pDMode <> nil then
begin
if (x = 0) or (y = 0) then
begin
{Set to legal}
pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
{pDMode^.dmPaperSize := DMPAPER_LEGAL;
changed by wulianmin}
pDMode^.dmPaperSize := DMPAPER_FANFOLD_US;
end
else
begin
// ShowMessage(IntToStr(pDMode^.dmFields));
{Set to custom size}
pDMode^.dmFields := pDMode^.dmFields or
DM_PAPERSIZE or
DM_PAPERWIDTH or
DM_PAPERLENGTH;
pDMode^.dmPaperSize := DMPAPER_USER;
pDMode^.dmPaperWidth := x {SomeValueInTenthsOfAMillimeter};
pDMode^.dmPaperLength := y {SomeValueInTenthsOfAMillimeter};
end;
{设定纸张来源}
pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL;
pDMode^.dmDefaultSource := DMBIN_MANUAL;
GlobalUnlock(hDMode);
end;
end;
end;

但不能满足要求!!!
 
通过设置打印服务器属性中的自定义纸张是可以打印出来的,不过,我这里有很多的报表,而且长度都不同,
有60CM的,有80CM的,有100Cm的,规格都是不同的!!请问如何不让用户手工选择纸张就能自动设置打印机的纸张大小呢,
注:打印机为:lq1600K III
 
勉为其难!
想法不错,但还没有智能到这一步,我想。
====>改造打印机:
1.一但放纸后,打印机象扫描器一样,立即获得纸张大小。
2.从打印中获得的纸张大小,计算机来自动调整应用程序设置。
3.于是可以达到预期的目的----不用手工调整打印机的设置。
 
后退
顶部