- Drop a TComboBox on a form. Name it "cboPrinter". Set Style to csDropDownLidt
- Put the next two lines in the form's OnCreate even handler:
//have available printers in the combo box cboPrinter.Items.Assign(printer.Printers); //pre-select the default / active printer cboPrinter.ItemIndex := printer.PrinterIndex;
Now, here's the function you can
use to print any document type to a specified printer:
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 = cboPrinter.ItemIndex then begin printCommand := 'print';
printerInfo := '';
end
else
begin printCommand := 'printto';
Printer.PrinterIndex := cboPrinter.ItemIndex;
Printer.GetPrinter(Device, Driver, Port, hDeviceMode) ;
printerInfo := Format('"%s" "%s" "%s"', [Device, Driver, Port]) ;
end;
ShellExecute(Application.Handle, PChar(printCommand), PChar(documentToPrint), PChar(printerInfo), nil, SW_HIDE) ;
end;