Page 1 of 1

ARCHIVOS *.EMF DEL PREVIEW - Imposible borrarlos

PostPosted: Mon Aug 06, 2018 7:37 pm
by rterraz
Estimados amigos
Estoy usando en Rpreview en una aplicacion y me encuentro con que es imposible borrar los metafiles que se generan en el \TEMP de windows.
Cuando la aplicación arranca hago un aEval(Directory(Gentenv('TEMP')+'\*.emf'),{|aFiles| ferase(Getenv('TEMP')+'\'+aFiles[1])}) y se borran todos perfectamente.
Ahora bien, cuando hago un preview de cualquier listado o Report, todo funciona bien, se generan los metafiles correspondientes y se muestran en el Preview, luego efectúo la impresión y cierro el preview. LOS ARCHIVOS METAFILES PERMANECEN EN SU LUGAR y se van acumulando a medida que voy haciendo distintos preview, es imposible borrarlos manualmente porque me dan un error de que EL ARCHIVO A BORRAR ESTA EN USO POR OTRO PROCESO !!!
El preview ya fue cerrado, incluso cambio de proceso y no hay forma de borrarlos hasta que cierro la aplicación y la arranco nuevamente.
He probado de todo para liberarlos, oPrn:end(), DeleteEnhMetafile(CloseEnhMetafile(hHand)), ferase(cFile) etc,ctc,etc.
Con aplicaciones viejas de 16bits. el preview termina y los metafiles (*.wmf) se borran todos automáticamente. Mire la clase rpreview pero no encuentro la causa de dicho comportamiento.
Alguien podría, por favor orientarme ? será un 'BUG' de la Tprinter o la Rpreview ?
Muchas gracias a todos

Re: ARCHIVOS *.EMF DEL PREVIEW - Imposible borrarlos

PostPosted: Mon Aug 06, 2018 7:49 pm
by karinha
Intenta asi, al salir del sistema(programa principal),

Code: Select all  Expand view

FUNCTION LIBERA_TODO()

   DELETEFILE( "C:\WINDOWS\TEMP\*.EMF" )

   DbCommitAll()
   DbUnLockAll()
   DbCloseAll()
   FreeResources()
   Release All
   SysRefresh()
   HB_GCALL( .T. )
   CLEAR MEMORY

   IF FILE( "checkres.txt" )
      FErase( "checkres.txt" )
   ENDIF

   CheckRes()

   PostQuitMessage( 0 )
   QUIT

RETURN NIL
 


Saludos.

Re: ARCHIVOS *.EMF DEL PREVIEW - Imposible borrarlos

PostPosted: Tue Aug 07, 2018 2:17 pm
by rterraz
Hola Karinha un gusto conocerte!
muchas gracias por tu aporte.
Lo probe pero los *.EMF siguen sin permitir ser borrados hasta que no salgo totalmente de la aplicación o entro de nuevo.
Por lo que veo la Rpreview los genera y los abre para mostrarlos y luego no los libera mas y es imposible borrarlos.
Lo que pasa que en mi aplicación yo genero liquidaciones y al terminar guardo los *.emf en un archivo zip por si en algun momento es necesario reimprimirlas.
Si esto ocurre abro el ZIP en una carpeta, extraigo los *.emf y realizo el preview de los mismos y su reimpresión.
Hasta ahi todo Ok, una vez terminada la reimpresión debo borrar los *.EMF que recuperé para que no se mezclen con otras posibles reimpresiones y eso es imposible.Me dice que la aplicacion mantiene habiertos los archivos y que es imposible borrarlos. COMO LOS CIERRO ????
En 16bits la rpreview los borra automaticamente al terminar el preview, pero en 32bits no funciona :(
Saludos desde Argentina

Re: ARCHIVOS *.EMF DEL PREVIEW - Imposible borrarlos

PostPosted: Tue Aug 07, 2018 2:38 pm
by karinha
Creo, sea mejor generar todo en *.PDF, yo hago asi y no tengo problemas y és más seguro.

Image

Re: ARCHIVOS *.EMF DEL PREVIEW - Imposible borrarlos

PostPosted: Wed Aug 08, 2018 3:46 pm
by karinha
Code: Select all  Expand view

#include "FiveWin.ch"
#Include "Directry.ch"

static oWnd

//----------------------------------------------------------------//

function Main()

   local oBar

   /*
   AEVAL(DIRECTORY( "TEMP*.*"     ),{ |aFILE| FERASE(aFILE[F_NAME]) } )
   AEVAL(DIRECTORY( "SOMA*.*"     ),{ |aFILE| FERASE(aFILE[F_NAME]) } )
   */


   IF FILE( "C:\WINDOWS\TEMP\TESTE.EMF" )

      DELETEFILE( "C:\WINDOWS\TEMP\TESTE.EMF" )

      IF FILE( "C:\WINDOWS\TEMP\TESTE.EMF" )

         ? "Porque no borra? computadora con VIRUS? "

         LIBERA_TODO()

         RETURN NIL

      ENDIF

   ENDIF

   DEFINE WINDOW oWnd TITLE "Borra Emf"

   DEFINE BUTTONBAR oBar _3D OF oWnd

   DEFINE BUTTON OF oBar ACTION( LIBERA_TODO() ) // salir

   SET MESSAGE OF oWnd TO "Borra Emf" NOINSET CLOCK DATE KEYBOARD

   ACTIVATE WINDOW oWnd

return nil

FUNCTION LIBERA_TODO()

   DELETEFILE( "C:\WINDOWS\TEMP\*.EMF" )

   DbCommitAll()
   DbUnLockAll()
   DbCloseAll()
   FreeResources()
   Release All
   SysRefresh()
   HB_GCALL( .T. )
   CLEAR MEMORY

   /*
   IF FILE( "checkres.txt" )
      FErase( "checkres.txt" )
   ENDIF

   CheckRes()
   */


   PostQuitMessage( 0 )
   QUIT

RETURN NIL
 


Saludos.

Re: ARCHIVOS *.EMF DEL PREVIEW - Imposible borrarlos

PostPosted: Wed Aug 08, 2018 4:36 pm
by rterraz
Hora Karinha
Gracias por seguir ocupandote del tema.
Te explico...cuando recien entras a la aplicacion o cuando ejecutas la Libera_todo despues de haber terminado la aplicación (saliste de la oWnd del main)
los archivo se borran sin problemas.
El problema surge una vez que has hecho un preview.
A partir de alli TODOS los nuevos *.EMF que se van generando quedan capturados y es imposible borrarlos!!!
Proba hacer un preview de alguna impresión y una vez que hayas terminado anda a la carpeta Getenv('TEMP') de windows e intenta borrar alguno de los *emf que encuentres y vas a ver lo que ocurre (imposible borrarlos). Tenes que estar con la aplicación que hizo la impresión corriendo
Lo probamos en windows10 y windows7 y es lo mismo. Usando la Preview en 16bits los *.EMF se borran automaticamente al terminar el preview, por eso creo que el problema se encuentra en algun lugar de la Clase rPreview pero he probado algunas modificaciones de la misma y NADA.
un abrazo

Re: ARCHIVOS *.EMF DEL PREVIEW - Imposible borrarlos

PostPosted: Thu Aug 09, 2018 1:31 pm
by karinha
Mira en RPREVIEW.PRG si el comando DELETEMETAFILE(), está funcionando; Saludos.

Re: ARCHIVOS *.EMF DEL PREVIEW - Imposible borrarlos

PostPosted: Thu Aug 09, 2018 4:08 pm
by rterraz
el DeleteEnhMetafiles() no los borra
Estuve mirando con el comando OPENFILES del sistema y me muestra que todos los *.emf estan abiertos por la aplicación (el oWnd main del EXE de FWH)
Hasta que no salgo de la misma no se liberan!!!
Pasa en cualquier version de windows. Hay algo en el ejecutable que los mantiene abiertos.
Si queres probar hace un pequeño exe que haga un PREVIEW de cualquier listado y vas a ver que hasta que no cerras el exe no podes borrarlos :shock:
Estoy por abandonar :cry:
saludos

Re: ARCHIVOS *.EMF DEL PREVIEW - Imposible borrarlos

PostPosted: Sat Aug 11, 2018 7:06 pm
by FranciscoA
Que raro.
En mi versión FWH 1204, los EMF son borrados inmediatamente después de cerrar el preview.
Por supuesto si no cierras el preview no se puede borrarlos.

Tienes modificada la classe tprinter, metodo end()?

Seria bueno que mostraras tu código.

Saludos.

Re: ARCHIVOS *.EMF DEL PREVIEW - Imposible borrarlos

PostPosted: Mon Aug 13, 2018 8:29 pm
by rterraz
Tengo el fwh 18 y la clase tprinter y rpreview estan originales.
Compare el metodo end() con el de versiones anteriores y es igual.
Hay algo que mantiene los emf capturados y impide actuar al ferase() del metodo end().
He probado con oprinter:end() y oprinter:=nil y nada
Ya me canse voy a tratar por otro lado
Muchas gracias.
Pd. Cuando cierro la aplicacion los archivos se liberan.poe eso los borro todos al inicio pero ni bien hago un preview se empiezan a acumular y tengo listados que producen cientos de ellos ???