Setting the Default Printer from code
=====================================
If you need to use a different printer than the default you
may have to change the default printer programmatically, run
your report and then change it back. Here is some sample code to do this: 
procedure SetDefaultPrinter(PrinterName: String);
var
   I: Integer;
   Device : PChar;
   Driver : Pchar;
   Port   : Pchar;
   HdeviceMode: Thandle;
   aPrinter : TPrinter;
begin
  Printer.PrinterIndex := -1;
  getmem( device, 255);
  getmem( Driver, 255);
  getmem( Port, 255);                                           
  aPrinter := TPrinter.create;
  for I := 0 to Printer.printers.Count-1 do
  begin
    if Printer.printers[i] = PrinterName then
    begin
      aprinter.printerindex := i;
      aPrinter.getprinter( device, driver, port, HdeviceMode);
      StrCat(Device, ',');
      StrCat(Device, Driver );
      StrCat(Device, Port );
      WriteProfileString('windows', 'device', Device );
      StrCopy( Device, 'windows' );
      SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, Longint(@Device));
   end;
  end;
  freemem( device, 255);
  freemem( Driver, 255);
  freemem( Port, 255);
  aPrinter.free;
end;