高分请教:Delphi如何获取指定打印机所支持的纸张列表

sxdtgsh 2008-09-23 06:52:46
现在想要实现在一个窗体内有两个com下拉列表,其中一个显示系统的打印机,可通过 Com_printname.Items:=printer.Printers实现,现在的问题是,在另一个com中获取Com_printname下选定的打印机的支持纸张列表,如何实现,请各位专家指教,提供思路或者源码的都有分阿。谢谢!
...全文
227 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
柯本 2008-09-23
  • 打赏
  • 举报
回复
经研究及网上查找,终于OK:

unit getprinterpage;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
ComboBox1: TComboBox;
ComboBox2: TComboBox;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure ComboBox1Select(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
uses printers,winspool;
{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
begin
ComboBox1.Items:=Printer.Printers;
ComboBox1.ItemIndex:=1;
end;

procedure TForm1.ComboBox1Select(Sender: TObject);
const
page_name_length = 64;
var
i,p:integer;
pBuf:PChar;
pname:pchar;
begin
pname:=pchar(combobox1.Text);
p:=winspool.DeviceCapabilities(pname,'LPT1',DC_PAPERNAMES,nil,nil);
GetMem(pBuf ,page_name_length *p);
p:=DeviceCapabilities(PName,'LPT1',DC_PAPERNAMES,pBuf,nil);
ComboBox2.clear;
for i:=1 to p do
ComboBox2.Items.Add(pBuf + page_name_length * (i-1));
FreeMem(pBuf);
ComboBox2.ItemIndex:=1;

end;

end.

柯本 2008-09-23
  • 打赏
  • 举报
回复
按理,可用
DeviceCapabilities
得到,但我用D6+W2K,有问题
1.DeviceCapabilities与MSDN上介绍的参数不配(我的多了一个pDriverName)
2.DeviceCapabilities是在GDI32.dll中,但我的gdi32.dll中无此函数,我用工具看了一下,它只有:
DeviceCapabilitiesExA
我试着调用它,返回值永远是-1
再试试...

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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