unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm2 = class(TForm)
cboPrinter: TComboBox;
Button1: TButton;
OpenDialog1: TOpenDialog;
Memo1: TMemo;
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
uses shellapi, printers;
procedure PrintDocument(const documentToPrint : string) ;
var
printCommand : string;
printerInfo : string;
Device, Driver, Port: array[0..255] of Char;
hDeviceMode: THandle;
begin
if Printer.PrinterIndex = form2.cboPrinter.ItemIndex then
begin
printCommand := 'print';
printerInfo := '';
end
else
begin
printCommand := 'printto';
Printer.PrinterIndex := form2.cboPrinter.ItemIndex;
Printer.GetPrinter(Device, Driver, Port, hDeviceMode) ;
printerInfo := Format('"%s" "%s" "%s"', [Device, Driver, Port]) ;
form2.memo1.Lines.Add(printerInfo);
end;
ShellExecute(Application.Handle, PChar(printCommand), PChar(documentToPrint), PChar(printerInfo), nil, SW_HIDE) ;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
PrintDocument(OpenDialog1.FileName);
end;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
//have available printers in the combo box
//cboPrinter.Items.Assign(printer.Printers);
//pre-select the default / active printer
//cboPrinter.ItemIndex := printer.PrinterIndex;
end;
procedure TForm2.FormShow(Sender: TObject);
begin
cboPrinter.Items := Printer.Printers;
end;
end.