PDA

Ver la Versión Completa : casting Composite Report: error al imprimir


MsYo
20-07-2006, 10:18:59
Hola,
estoy desarrollando una función que, a groso modo es como sigue:

function Previsualizar (informe: TObject; ............);



varCReport: TTQRCompositeReport;
QReport: TQuickRep;
tipo: integer;



beginif (informe.ClassName = TQRCompositeReport.ClassName) then



begintipo := 0;
CReport := TQRCompositeReport (informe);



end else
if (informe.ClassName = TQuickRep.ClassName) then



begintipo := 1;
QReport := TQuickRep (informe);



end;

case tipo of
0: CReport.Preview;
1: QReport.Preview;
end;



end;

(No hago el casting de la forma "informe as TQRCompositeReport" ya que salta una excepción del tipo: "invalid class typecast".)

El problema es el siguiente: el preview se realiza correctamente, pero cuando se pulsa el botón de Imprimir, casi siempre (aunque no siempre, lo cual es muy extraño) sale una ventana de error aludiendo a la DLL en la que tengo la función y no se puede imprimir. Pero no sé por donde atacar, ya que el botón de imprimir y su evento es interno al previsualizador del composite.

Si alguien ha tenido algún problema similar o puede darme informacion útil se lo agradeceré.

MsYo
20-07-2006, 11:02:54
Debí haber informado también de que esa función está dentro de una DLL, es decir, que desde un ejecutable estoy pasando un Composite Report a una DLL para que lo previsualice y lo imprima.

El caso es que acabo de acotar más el problema. He evitado lo del casting creando una función para cada tipo de informe tal que así:

function Previsualizar (informe: TQuickRep; ............); overload;

function Previsualizar (informe: TQRCompositeReport;....); overload;

Aún así sigue produciéndose el mismo error, por lo que quizás el problema no esté en el casting sino en el hecho de pasar el composite a una DLL y que sea ella la que llame al Preview.

MsYo
24-07-2006, 12:29:09
Definitivamente el problema ocurre al pasar el Composite a una DLL (con un QuickReport sencillo no hay ningún problema) y hacer el Preview desde dentro de la DLL. Todo parece ir bien, pero al pulsar el botón de Imprimir en el previsualizador sale un error. No se da el problema si se hace un Composite.Print() por código.

Debe de ser un bug del CompositeReport, y parece que los de QuSoft no están actualizando, así que nos tendremos que buscar la vida.