Print any type of document using Delphi #131

  1. Drop a TComboBox on a form. Name it "cboPrinter". Set Style to csDropDownList.
  2. Put the next two lines in the form's OnCreate event 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 method you can use to print any document type to a specified printer:

uses ShellAPI, Printers;

...

procedure TForm1.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;
Note
To use this code you'll need an application registered for each file type you want to print.
Author: Shlomo Abuisak
Contributor: Shlomo Abuisak
Added: 2009/11/05
Last updated: 2009/11/05