El código es el correcto, lo probable es que estas obteniendo un indice de impresora no válido.
Yo lo uso de esta manera en el evento OnBeforePrint
Código Delphi
[-]
procedure TFrmPrinter.QTicketsBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
Var
LiIndexPrinter: Integer; begin
LiIndexPrinter := GetPrinterIndex( ReadStringIni(FILE_CONFIG,'Printers','Ticket') ) ;
with QTickets.PrinterSettings Do
If PrinterIndex <> LiIndexPrinter Then
PrinterIndex := LiIndexPrinter;
end;