PDA

Ver la Versión Completa : Excepción al configurar impresora con QReport


darkerviti
09-01-2018, 12:59:09
Buenas,

Os comento el problema:

Tengo un informe con QuickReport en Delphi XE5, genero el informe sin problema, le doy a configurar impresora desde el preview, pero al cambiar la impresora (o el número de páginas o cualquier otra cosa) y aceptar me da una excepción y muchas veces me obliga a cerrar la aplicación.

He estado depurando el error, me lleva al archivo QRPrnSu.pas, dentro de :
function TQRCommonDialog.TaskModalDialog(DialogFunc: Pointer; var DialogData): Bool;En concreto en la línea:
Result := TDialogFunc(DialogFunc)(DialogData);Espero que alguien pueda arrojar algo de luz al asunto.

Un saludo y muchas gracias.

duilioisola
09-01-2018, 16:01:21
Te falta informarnos la excepción de que se trata.

Si se trata de
ERR_OUT_OF_MEMORY, te falta memoria.
ERR_OUT_OF_DISK_SPACE, te falta espacio en disco.
ERR_...

TOPX
09-01-2018, 16:17:10
También existe una excepción llamada EProgrammerNotFound.

Más información (http://neftali.clubdelphi.com/eprogrammernotfound-exception/).
-

darkerviti
10-01-2018, 08:37:02
Te falta informarnos la excepción de que se trata.

Si se trata de
ERR_OUT_OF_MEMORY, te falta memoria.
ERR_OUT_OF_DISK_SPACE, te falta espacio en disco.
ERR_...

Perdón por el empanamiento.

A ver, es un error de violación de acceso a memoria, despues de un día largo de depuración
y haciendo el mismo programa de prueba en delphi XE5 (el que falla) y en delphi 7 (que funciona)
solo he visto una diferencia, en el QRPrnSu.pas que comentaba todo es igual, pero cuando busco
la definición del tipo de DialogData (TPrintDlg) me llevan al archivo CommDlg, y ahí, en XE5 lo
encuentro como un alias de TPrintDlgW mientras que en delphi 7 es TPrintDlgA.
He estado mirando y las estructuras solo cambian en 1 cosa, 2 campos (lpPrintTemplateName
y lpSetupTemplateName) que para la versión W es de tipo LPCWSTR (Renombrado de PWideChar)
y en la versión A el tipo es PAnsiChar.

Y ahora me encuentro en este punto, no sé si esta información adicional será util, si voy por el
buen camino en la busqueda de una solución o me estoy confundiendo de por donde avanzar.

Una vez más muchas gracias.

darkerviti
15-01-2018, 08:15:00
Buenas, lo he solucionado por otro lado,

Lo pongo aquí por si a alguien le puede servir.

El problema estaba en el uso de la clase TQRPrintDialog en el procedimiento TCustomQuickRep.PrinterSetup del archivo QuickReport.pas.
Lo que he hecho ha sido cambiar el tipo del objeto que se utiliza por uno de tipo TPrintDialog, con eso y un par de cambios por pequeñas variaciones de la estructura del objeto se soluciona el problema.

Espero que le sirva a alguien.

Un saludo.