请问大虾,怎样获得Windows打印机当前打印纸张名称PaperName

leemingsong 2001-09-22 06:22:13
请问大虾,怎样获得Windows打印机当前打印纸张名称PaperName
TPrinter只能获知PaperHeight,PaperWidth 但我需要的是PaperName
(因为有打印机把我通过PaperHeight,PaperWidth设置的打印纸张认成了Custom,以致于让打印机无法自动打印,而需要人工干预,用A4或其它规定的纸张代替)
帮忙的各位,谢了先
急急急急急急急急急急急急急急急急急急急急
...全文
356 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
leemingsong 2001-12-29
  • 打赏
  • 举报
回复
这问题我自己解决了,呵呵,能给自己加分就好了!!!
调用win API,取得当前设备(打印机)的信息
还是发分吧,这是信用
水之手 2001-10-10
  • 打赏
  • 举报
回复
当前长宽:TPrinter.PaperWidth/PaperHeight.
类型:TPrinter.Paper.
然后将TPrinter.Paper转换成字符串就行了,每种纸张对应的编号是固定的。
leemingsong 2001-10-08
  • 打赏
  • 举报
回复
谢谢楼上这位。
但我还是不明白,我想要的是一个自定义函数,返回当前设置的纸张类型或纸张长宽的函数。
line 2001-10-06
  • 打赏
  • 举报
回复
gz
水之手 2001-10-06
  • 打赏
  • 举报
回复
可以用DeviceCapabilities获取系统标准纸张名称,但是英文的,可以转换为以下常用中文名称:
PageSize1 = "信笺, 8 1/2 x 11 英寸"
PageSize2 = "+A611 小型信笺, 8 1/2 x 11 英寸"
PageSize3 = "小型报, 11 x 17 英寸"
PageSize4 = "分类帐, 17 x 11 英寸"
PageSize5 = "法律文件, 8 1/2 x 14 英寸"
PageSize6 = "声明书,5 1/2 x 8 1/2 英寸"
PageSize7 = "行政文件,7 1/2 x 10 1/2 英寸"
PageSize8 = "A3, 297 x 420 毫米"
PageSize9 = "A4, 210 x 297 毫米"
PageSize10 = "A4小号, 210 x 297 毫米"
PageSize11 = "A5, 148 x 210 毫米"
PageSize12 = "B4, 250 x 354 毫米"
PageSize13 = "B5, 182 x 257 毫米"
PageSize14 = "对开本, 8 1/2 x 13 英寸"
PageSize15 = "四开本, 215 x 275 毫米"
PageSize16 = "10 x 14 英寸"
PageSize17 = "11 x 17 英寸"
PageSize18 = "便条,8 1/2 x 11 英寸"
PageSize19 = "#9 信封, 3 7/8 x 8 7/8 英寸"
PageSize20 = "#10 信封, 4 1/8 x 9 1/2 英寸"
PageSize21 = "#11 信封, 4 1/2 x 10 3/8 英寸"
PageSize22 = "#12 信封, 4 1/2 x 11 英寸"
PageSize23 = "#14 信封, 5 x 11 1/2 英寸"
PageSize24 = "C 尺寸工作单"
PageSize25 = "D 尺寸工作单"
PageSize26 = "E 尺寸工作单"
PageSize27 = "DL 型信封, 110 x 220 毫米"
PageSize28 = "C5 型信封, 162 x 229 毫米"
PageSize29 = "C3 型信封, 324 x 458 毫米"
PageSize30 = "C4 型信封, 229 x 324 毫米"
PageSize31 = "C6 型信封, 114 x 162 毫米"
PageSize32 = "C65 型信封,114 x 229 毫米"
PageSize33 = "B4 型信封, 250 x 353 毫米"
PageSize34 = "B5 型信封,176 x 250 毫米"
PageSize35 = "B6 型信封, 176 x 125 毫米"
PageSize36 = "信封, 110 x 230 毫米"
PageSize37 = "信封大王, 3 7/8 x 7 1/2 英寸"
PageSize38 = "信封, 3 5/8 x 6 1/2 英寸"
PageSize39 = "U.S. 标准复写簿, 14 7/8 x 11 英寸"
PageSize40 = "德国标准复写簿, 8 1/2 x 12 英寸"
PageSize41 = "德国法律复写簿, 8 1/2 x 13 英寸"
leemingsong 2001-10-06
  • 打赏
  • 举报
回复
up
leemingsong 2001-10-06
  • 打赏
  • 举报
回复
up
Starrock 2001-09-24
  • 打赏
  • 举报
回复
关注...
leemingsong 2001-09-24
  • 打赏
  • 举报
回复
up^
//////////////////////////////////////////////////////////////////////////
//现在我写了个函数返回当前设置的纸张类型,长宽
//////////////////////////////////////////////////////////////////////////
procedure TForm1.GetPrinterPaper(APrinter:TPrinter;
var APageSize,AHeight,AWidth:integer);
var print:TPrinter;
dout :PDeviceMode;
tmp :TDeviceMode;
HPrint :THANDLE ;
size :integer;
device:PChar;
begin
print := APrinter;
device := PChar(print.printers[print.printerindex]);
OpenPrinter(device,HPrint, nil);
size := DocumentProperties(HWND(nil),HPrint,device,tmp,tmp,0);
GetMem(dout,size+1);
DocumentProperties(HWND(nil),HPrint,device,dout^,tmp,DM_OUT_BUFFER);
APageSize:= dout.dmPaperSize;
AHeight := dout.dmPaperLength div 10;
AWidth := dout.dmpaperWidth div 10;
FreeMem(dout);
ClosePrinter(HPrint);
end;
//////////////////////////////////////////////////////////////////////////
//疑问:APageSize,AHeight,AWidth返回的都是当前的默认值,而并非当前设置值?
//高人请指导一下,或者有写好的示范程序,mail一个,不甚感激
//E-mail: leemingsong@sina.com
//////////////////////////////////////////////////////////////////////////
telstar 2001-09-23
  • 打赏
  • 举报
回复
TPrinter.PageHeight,PageWidth是各个打印机的分辨率,和屏幕分辨率同
leemingsong 2001-09-23
  • 打赏
  • 举报
回复
up
4.TPrinter.PageHeight,PageWidth 的单位是什么(像素/mm/英寸)
5.为什么不同打印驱动的A4纸,PageHeight,PageWidth各不相同,难道A4不是固定规格吗?
leemingsong 2001-09-23
  • 打赏
  • 举报
回复
急急急急急急急急急急急急
leemingsong 2001-09-23
  • 打赏
  • 举报
回复
难道没人知道了?
Starrock 2001-09-23
  • 打赏
  • 举报
回复
?
leemingsong 2001-09-23
  • 打赏
  • 举报
回复
......
leemingsong 2001-09-23
  • 打赏
  • 举报
回复
wait......
leemingsong 2001-09-23
  • 打赏
  • 举报
回复
wait......
myy 2001-09-22
  • 打赏
  • 举报
回复
WinApi:与GetDeviceCaps差不多的函数GetDeviceC.....sorry记不清了
leemingsong 2001-09-22
  • 打赏
  • 举报
回复
谢谢以上三位快速回复,但我的问题还未解决,现在我把问题简化一下
如:程序通过PrinterSetupDialog1.Execute设置了打印机(HP4050)和纸张(A4),下一步我想获知纸张名称PaperName (结果应该是'A4'),怎么得到?
sundayboys 2001-09-22
  • 打赏
  • 举报
回复
按你的要求,将你要设置的纸张大小设置为最接近的标准大小就是了。
with DevMode^ do
begin//设置纸张尺寸
dmFields:=dmFields or DM_PAPERSIZE;
dmPaperSize:=DMPAPER_A4
end;
加载更多回复(3)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧