Ahora no tengo delphi a mano para comprobarlo, intenta esto:
Código Delphi
[-]
if Assigned(QRPreview1.QRPrinter) then
If QRPreview1.QRPrinter.Status = mpBusy then
begin
QRPreview1.QRPrinter.Cancel;
Application.processMessages;
end
else
Freeandnil(QRPreview1); Close
end;
Si eso no funciona, entonces tendrás que obligar a que no se cierre el listado mientras esté ocupado el QRPrinter, podrías usar el evento OnCloseQuery y denegar la petición de cerrado.
saludos