分享

Delphi如何取指定打印机,指定纸张的宽宽度和高度等信息?

 quasiceo 2016-06-14
枚举所有打印机,按名字查询
Delphi/Pascal code?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
uses
  winspool, printers;
...
procedure TForm1.Button1Click(Sender: TObject);
var
  HPrinter: THandle;
  Forms: array of TFormInfo1;
  Count, Needed, Returned: DWORD;
  i: Integer;
begin
  Memo1.Clear;
  if OpenPrinter(nil, HPrinter, nilthen begin
    try
      if not EnumForms(HPrinter, 1nil0, Needed, Returned) then begin
        // we should fail here since we didn't pass a buffer
        if GetLastError <> ERROR_INSUFFICIENT_BUFFER then
          RaiseLastOSError;
        Count := (Needed div SizeOf(TFormInfo1)) + 1;
        SetLength(Forms, Count);
        if EnumForms(HPrinter, 1, @Forms[0], SizeOf(TFormInfo1) * Count, Needed,
            Returned) then begin
          if Returned < Count then
            SetLength(Forms, Returned);
          for i := 0 to Returned - 1 do begin
             Memo1.Lines.Add(Format('Paper name: %s,   Paper size: %dmm x %dmm',
                            [Forms[i].pName,
                             Forms[i].Size.cx div 1000,
                             Forms[i].Size.cy div 1000]))
          end;
        end else
          RaiseLastOSError;
      end;
    finally
      ClosePrinter(HPrinter);
    end;
  end else
    RaiseLastOSError;
end;
jankercsdn
关注
jankercsdn
看那山瞧那水
本版等级:T5

#3 得分:5 回复于: 2014-03-14 19:38:50
简单点可以这样:

cxcbbPrinter.Properties.Items.Assign(Printer.Printers); //cxcbbPrinter是TcxComboBox控件,列举出所有已安装的打印机

对于指定纸张,如果用自带的TPrinter对象,比较麻烦,要设置一个win32的结构TDeviceMode,请参考帮助.

如果用报表控件fastreport,则比较简单:
http://blog.csdn.net/jankercsdn/article/details/9162561

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多