Delphi怎么取指定打印机,指定纸张的宽宽度和高度等信息
Delphi如何取指定打印机,指定纸张的宽宽度和高度等信息?
注意是指定了打印机和纸张。谢谢!
------解决方案--------------------
枚举所有打印机,按名字查询
------解决方案--------------------
简单点可以这样:
cxcbbPrinter.Properties.Items.Assign(Printer.Printers); //cxcbbPrinter是TcxComboBox控件,列举出所有已安装的打印机
对于指定纸张,如果用自带的TPrinter对象,比较麻烦,要设置一个win32的结构TDeviceMode,请参考帮助.
如果用报表控件fastreport,则比较简单:
http://blog.csdn.net/jankercsdn/article/details/9162561
注意是指定了打印机和纸张。谢谢!
------解决方案--------------------
枚举所有打印机,按名字查询
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, nil) then begin
try
if not EnumForms(HPrinter, 1, nil, 0, 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;
------解决方案--------------------
简单点可以这样:
cxcbbPrinter.Properties.Items.Assign(Printer.Printers); //cxcbbPrinter是TcxComboBox控件,列举出所有已安装的打印机
对于指定纸张,如果用自带的TPrinter对象,比较麻烦,要设置一个win32的结构TDeviceMode,请参考帮助.
如果用报表控件fastreport,则比较简单:
http://blog.csdn.net/jankercsdn/article/details/9162561