delphi中怎么选择电脑中不同的打印机打印?
展开全部
只有二个方法,一是调用API接口类来处理(不要追问我关于API的原理和方法,靠简单地在网上问是代替不了读书的。),直接获取打印机句柄,然后在窗体创建时写入ComBoBox的Items,供选择;
二是声明引用TPrinters类,通过自定义函数取得打印机句柄及其列表,在窗体创建时转入ComBoBox的Items中。
你参考这段代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Printers ,StdCtrls;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//取得本机打印机列表,可不调用。
function GetCurrentPrinterHandle: THandle;
var
Form1: TForm1;
implementation
{$R *.dfm}
function GetCurrentPrinterHandle: THandle;
var
Device, Driver, Port : array[0..255] of char;
hDeviceMode: THandle;
begin
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
if not OpenPrinter(@Device, Result, nil) then
RaiseLastWin32Error;
end;
//取得本机打印机列表
procedure TForm1.FormCreate(Sender: TObject);
Var
hPrinter : THandle;
begin
hprinter := GetCurrentPrinterHandle; //如果想取得详细的打印机信息,可用此句柄,否删除这行
ComboBox1.Items.Assign(Printer.Printers);
ComboBox1.ItemIndex := 0;//指向第一台打印机
end;
end.
二是声明引用TPrinters类,通过自定义函数取得打印机句柄及其列表,在窗体创建时转入ComBoBox的Items中。
你参考这段代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Printers ,StdCtrls;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//取得本机打印机列表,可不调用。
function GetCurrentPrinterHandle: THandle;
var
Form1: TForm1;
implementation
{$R *.dfm}
function GetCurrentPrinterHandle: THandle;
var
Device, Driver, Port : array[0..255] of char;
hDeviceMode: THandle;
begin
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
if not OpenPrinter(@Device, Result, nil) then
RaiseLastWin32Error;
end;
//取得本机打印机列表
procedure TForm1.FormCreate(Sender: TObject);
Var
hPrinter : THandle;
begin
hprinter := GetCurrentPrinterHandle; //如果想取得详细的打印机信息,可用此句柄,否删除这行
ComboBox1.Items.Assign(Printer.Printers);
ComboBox1.ItemIndex := 0;//指向第一台打印机
end;
end.
展开全部
1、delphi中,打印机选择如下:
var
mdevice : array[0..255] of char;
mdriver : array[0..255] of char;
mport : array[0..255] of char;
mhdmode : thandle;
mpdmode : pdevmode;
begin
printer.getprinter(mdevice, mdriver, mport, mhdmode);
printer.setprinter('fineprint pdffactory pro', mdriver, mport, mhdmode); //设置打印机
printer.begindoc;
printer.canvas.moveto(0, 0);
printer.canvas.lineto(300, 300);
printer.canvas.textout(20, 20, '打印文字');
printer.enddoc;
end;
2、显示默认打印机
ComboBox1.Text:=printer.Printers[printer.printerindex]
Tprinter.printers.count可以得到打印机数
Tprinter.printers可以得到打印机列表
Tprinter.printerINDEX可以设当前打印机
Tprinter.printerINDEX:=-1可以恢复默认打印机
3、Delphi枚举出系统所有的打印机
在uses中包含prints
procedure Tprintsetform.FormShow(Sender: TObject); //获取系统所有打印机
begin
Memo1.Clear;
memo1.Lines.Assign(Printer.Printers);
if trim(memo1.Text) = '' then
begin
showmessage('没有安装打印机!');
end;
end;
var
mdevice : array[0..255] of char;
mdriver : array[0..255] of char;
mport : array[0..255] of char;
mhdmode : thandle;
mpdmode : pdevmode;
begin
printer.getprinter(mdevice, mdriver, mport, mhdmode);
printer.setprinter('fineprint pdffactory pro', mdriver, mport, mhdmode); //设置打印机
printer.begindoc;
printer.canvas.moveto(0, 0);
printer.canvas.lineto(300, 300);
printer.canvas.textout(20, 20, '打印文字');
printer.enddoc;
end;
2、显示默认打印机
ComboBox1.Text:=printer.Printers[printer.printerindex]
Tprinter.printers.count可以得到打印机数
Tprinter.printers可以得到打印机列表
Tprinter.printerINDEX可以设当前打印机
Tprinter.printerINDEX:=-1可以恢复默认打印机
3、Delphi枚举出系统所有的打印机
在uses中包含prints
procedure Tprintsetform.FormShow(Sender: TObject); //获取系统所有打印机
begin
Memo1.Clear;
memo1.Lines.Assign(Printer.Printers);
if trim(memo1.Text) = '' then
begin
showmessage('没有安装打印机!');
end;
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有个TPrinterDialog让你选择打印机啊。
追问
不用delphi自己带的控件,自己用combobox选择打印机
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询