程序中怎么调用自定义的纸张 ( 积分: 100 )

  • 主题发起人 主题发起人 xiongw
  • 开始时间 开始时间
X

xiongw

Unregistered / Unconfirmed
GUEST, unregistred user!
程序中怎么调用自定义的纸张,如指定打印机,先对自定义纸张进行判断,看其是否合法,合法则使用它来输出,
系统:NT/2000/XP/2003
 
很难,还是手工设置自定义纸张吧,让用户在打印机-打印首选项中,定义自定义纸张,并设置为默认纸张,程序直接打印就行。
用代码来设置自定义纸张大小,并以该自定义纸张打印,有时会行,有时会不行。
 
这样,我已以实现设置自定义纸张,但是不知道怎么在程式中调用它,
且不能用手动设定,你每次打印都要手动设定太夸张了,频度太高。人也吃不消,
那么怎么设定打印边距,如纸张的高,宽,边距等
 
已以实现设置自定义纸张,但是不知道怎么在程式中调用它?
我也有这个疑问,但是 软件肯定可以做到这个功能,我在一个软件中看到这个功能,它能显示你指定的打印机的各种纸张类型(就是驱动中的),然你选择一个,然后就可以打印,不用更改打印驱动中默认的纸张类型。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3652056
怎么设定打印边距,如纸张的高,宽,边距等?
这个应该问题不大吧。看看开发人员手册等,试试。
 
要想实现自定义纸张打印,有的情况,只要在打印过程中用代码设置就行了(不是在打印驱动中建立新的自定义纸张)。
但是,有的情况,上面的方法好像不行,很多软件需要自定义纸张打印时,都是指导用户手工在打印驱动中,建立自定义纸张,并设置为默认纸张,比如财务软件的凭证打印。软件中就不要设置纸张的代码了。
如果要用代码建立自定义纸张,软件应该能做到。
有一个问题是,用代码建立新的自定义纸张后,有的打印驱动能显示这个新的自定义纸张到它的纸张列表中,有的打印驱动不会显示新增的自定义纸张,所以,你用代码新建了自定义纸张,也不是万能的,如果打印驱动中不显示新的自定义纸张,你定义了也是没有用,更不要说后面调用了。
在DELPHI 7中 用代码建立(很容易)自定义纸张后,如何调用呢?pdmode^.dmPaperSize:=后面如何写呢?这个我就不知道了。
 
那个贴子我看过,但是一直没能实现,所以我想如果能设定纸张的宽高,与边距等,就是和实现自定义纸张是一样的
你说的那个软件的功能,那不是一个特殊的功能,通过窗口选择纸张类型,大家都可以实现,但是我是要在程式中设定,这不应该有与用户的交互。
 
通过窗口选择纸张类型,大家都可以实现
=============
假设 自己的窗体上 有一个COMBOBOX,里面是 某个打印机 驱动中列出的纸张类型名称列表
选择的是 DMPAPER_常量列表 以外的种纸张名称,“带裁剪边的无边界照片 10x15 厘米“
如何将选择的纸张类型名称 传给你自己指定的某个打印机呢?
pdmode^.dmPaperSize:=后面怎么写?
能指教一下吗?
 
项目里的一个过程,希望能用
procedure custompage(iheigth, iwidth: integer);
var
adevice, adriver, aport: array[0..255] of char;
devicehandle: thandle;
devmode: pdevicemode;
begin
printer.getprinter(adevice, adriver, aport, devicehandle);
if devicehandle = 0 then
begin
printer.printerindex := printer.printerindex;
printer.getprinter(adevice, adriver, aport, devicehandle);
end;
if devicehandle = 0 then
raise exception.create('打印机错误!')
else
begin
devmode := globallock(devicehandle);
with devmode^do
begin
dmFields := dmFields or dm_papersize;
dmPaperSize := DMPAPER_USER;
dmfields := dmfields or dm_paperlength;
dmpaperlength := iheigth;
dmfields := dmfields or dm_paperwidth;
dmpaperwidth := iwidth;
end;
ResetDC(Printer.Handle, devmode^);
globallock(devicehandle);
end;
end;
 
to:delphi
你想手动设定,使用一个printerSetupDialog不就可以了吗,
to:jrx
你的这段程式能说下具体用法吗,因为我想这样做:
{在这里调用打印机支持的自定义纸张或是设定打印边距}<<<-----
Printer.begin
Doc;
for i:=0 to 3do
begin
Printer.Canvas.StretchDraw(Rect(i*22*ScaleX*3+interval*(i+1), 0,(22*ScaleX*3+interval)*(I+1),9*ScaleY*3), bitmap);//打印内容
end;
Printer.EndDoc;//打印输出
我想知道该怎么做,我对打印这块太不熟了
 
to:delphi
你想手动设定,使用一个printerSetupDialog不就可以了吗,
=============
假设 自己的窗体上 有一个COMBOBOX,里面是 某个打印机 驱动中列出的纸张类型名称列表
====================
当然是,要求你不用printerSetupDialog,自己用代码如何实现?或者说,让你做个类似printerSetupDialog的界面,用户在程序运行时,选择一下纸张,你如何根据用户选择的纸张,将这个纸张作为当前打印的纸张,不是要你修改打印机的默认纸张。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3652056
 
接分
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3652955
 
to:liuyanghi,
可是,这只是检测打印机状态而已,与设置打印边界有什么关系吗?
 
接受答案了.
 
后退
顶部