Q:  Crystal Reports does not let the user select a printer at run-time. How do I provide this functionality.

1) Include CRPE and PRINTERS in 'uses' (CRPE.pas is packaged with Crystal Reports)

2) Add a TPrinterSetupDialog obect to the form (to allow the user to select a different printer)

3) Create printer variables:

Var
  JobHandle : Integer
  ADevice, ADriver, APort : Array[0..30] of Char;
  ADeviceMode : THandle;

4) Use engine calls to run the report.  Issue the following functions before issuing a PEStartPrintJob:
 
{ Open print job }
PEOpenEngine()
JobHandle = PEOpenPrintJob(<filename>)
.
.
.
{ Change printer }
Printer.GetPrinter(ADevice, ADriver, APort, ADeviceMode);
PESelectPrinter(JobHandle, ADriver, ADevice, Aport,
  PDevMode(PTR(ADeviceMode,0))^);
.
.
.
{ Start print job }
PEStartPrintJob(JobHandle, True);
PECloseEngine();