Page 1 of 1

Guardar y abrir Metafile SOLUCIONADO

Posted: Sun Oct 26, 2008 10:22 pm
by FranciscoA
Se puede guardar el archivo metafile generado por RPreview y luego poder abrir este mismo en otra pc utilizando siempre RPreview?

Posted: Mon Oct 27, 2008 9:00 am
by Antonio Linares
Francisco,

Puedes comentarnos como lo has hecho ? gracias! :-)

PARA ANTONIO LINARES

Posted: Thu Oct 30, 2008 10:37 pm
by FranciscoA
Antonio Linares wrote:Francisco,

Puedes comentarnos como lo has hecho ? gracias! :-)

Hola, Antonio. Disculpa mi tardanza en contestarte.

Aquí te presento la forma en que logré guardar y reabrir Meta Files.

Todo se debe al requerimiendo de un cliente que no satisfecho con la exportación a Excel
me solicitó "fotografías" de la impresión original de los documentos que emite mi sistema.

Para lograr esto, tuve que modificar la clase TPrinter únicamente. Una pequeña modificacion
en el metodo END(), y una variable static al inicio de la classe.

Como puedes ver, esta modificacion se puede ampliar a RPreview(), con lo cual se conseguiría
enviar inmediatamente por Email, el documento recién creado en formato EMF.

El procedimiento consiste en guardar el metafile recién creado, el cual, posteriormente, se
puede recuperar para simplemente visualizarlo, o imprimirlo.

Dentro del metodo End() creo la variable local cDirSaveMF:=".\METAFILE", para crear, aquí mismo,
el Subdirectorio donde voy a guardas mis "Metas". Por defecto lo creo dentro del directorio actual.

Posteriormente se crea el código desde el programa para cargar el "meta" y poder visualizar/imprimir.

Por defecto, siempre requerirá si se desea guardar el fichero, pero con otra pequeña modificación
se puede dejar a opción del usuario.

Este es el c1ódigo:



static lSaveMetaF :=.t. //FranciscoA: Guardar metafile

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

CLASS TPrinter

DATA oFont
etc, etc, etc...


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

METHOD End() CLASS TPrinter
local n:=0, cDirSaveMF:=".\METAFILE" // Sin "" al final. FranciscoA


if ::hDC != 0
if ! ::lMeta
if ::lStarted
EndDoc(::hDC)
endif
else

//** FranciscoA
//Para guardar el .EMF recien creado, o que no lo borre cuando es cargado desde disco.
IF UPPER(::cDocument) <> "OLDMETAFILE" .and. ::lMeta .and. len(::aMeta) > 0
if lSaveMetaF .and. MsgNoYes("Desea guardar fichero(s) metafile(s) (.EMF)?","Elija su opcion")
if !lIsDir( cDirSaveMF )
MakeDir( cDirSaveMF )
endif
Aeval(::aMeta, {|cFile| n+=1, CopyFile( cFile, cDirSaveMF+""+ ::cDocument+"_"+alltrim(strZero(n,3))+".emf" ) })
endif
Aeval(::aMeta,{|val| ferase(val) })
ENDIF
//**
//Aeval(::aMeta,{|val| ferase(val) }) //la pasé 4 lineas arriba
::aMeta := {}
::hDCOut := 0
endif
if ::nOrient != nil
if ::nOrient == DMORIENT_PORTRAIT
::SetPortrait()
else
::SetLandscape()
endif
endif
// PrinterEnd()
DeleteDC( ::hDC )
::hDC := 0
endif

if ::oFont != nil
::oFont:End()
endif

oPrinter := nil

return nil


//--------------------------------------------------------------------------
//Funcion para cargar desde disco a xbrowse, todos los ficheros .emf guardados
//para poder visualizarlos y/o imprimirlos.
//Para seleccionar utilizo la barra espaciadora o doble-click.
//---------------------//
Function VerImpMetaF()
local aMeta:={}, oPrn
local cWorking:=cFileNoPath(cFileNoExt(cNewFileName("METASF","dbf"))), aDirectorio:=DIRECTORY(".\METAFILE\*.EMF","D")
local oDlg, oBrw, oCol, cOldSele:=Select()
local cDir:=CurDrive()+":"+CurDir()+"\METAFILE", cFich, lOK:=.f.
local bMultiSel:={|| if( upper((oBrw:cAlias)->Sel) = "S",;
(oBrw:cAlias)->Sel :=" ", (oBrw:cAlias)->Sel :="S" ),;
oBrw:Refresh() }
local nRecno:=0

local bTodos:={|| nRecno:=(cWorking)->(recno()), if( (cWorking)->Sel=" ", (cWorking)->(dbEval({|| (cWorking)->Sel:="S"},,,,,.f.)), (cWorking)->(dbEval({||(cWorking)->Sel:=" "},,,,,.f.)) ), (cWorking)->(dbgoto(nRecno)), oBrw:Refresh() }

dbCreate( (cWorking),{ {"FICHEROS", "C", 80,0 },;
{"SEL" , "C", 1,0 } } )

DBUseArea(.t.,,(cWorking),(cWorking),.f.)
DbSelectArea((cWorking))
Index on (cWorking)->ficheros to (cWorking)

AEVAL( aDirectorio, {|aFich| ( (cWorking)->(dbAppend()), (cWorking)->ficheros:= upper(aFich[F_NAME]) ) } )
SysRefresh()

(cWorking)->(dbgotop())
if (cWorking)->(bof())
MsgStop("No tiene ficheros Metafile (.EMF) guardados","Alto")
(cWorking)->(dbCloseArea())
Ferase((cWorking)+".dbf")
Ferase((cWorking)+".ntx")
dbSelectArea(cOldSele)
return nil
endif


DEFINE DIALOG oDlg FROM 1,0 TO 29,80 TITLE "Seleccion de Ficheros"
oBrw := TXBrowse():New( oDlg )
oBrw:cAlias := (cWorking)

oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW //MS

oCol = oBrw:AddCol()
oCol:bStrData = { || (cWorking)->SEL }
oCol:cHeader = "SEL"

oCol = oBrw:AddCol()
oCol:bStrData = { || (cWorking)->FICHEROS }
oCol:cHeader = "FICHEROS DISPONIBLES ACTUALMENTE EN "+cDir

oBrw:SetRDD()
oBrw:CreateFromCode()

oBrw:bKeyDown = {|nKey| if( nKey == VK_SPACE, Eval(bMultiSel),) }
oBrw:bLDblClick:={|| Eval(bMultiSel)}

oDlg:oClient := oBrw

oDlg:bGotFocus = { || dbselectarea( (cWorking) ) }

@11,4 BUTTON "&Selecc/Deselecc todos" OF oDlg SIZE 90,12 ACTION Eval(bTodos)
@11,20 BUTTON "&Ver/Imprimir Seleccionados" OF oDlg SIZE 90,12 ACTION (lOK:=.t.,oDlg:End() )
@11,38 BUTTON "&Cancelar" OF oDlg SIZE 40,12 ACTION (lOK:=.f.,oDlg:End() )

ACTIVATE DIALOG oDlg ;
ON INIT oBrw:SetFocus();
ON PAINT ( oBrw:nWidth:=oDlg:nWidth-6, oBrw:nHeight:=oDlg:nHeight-65 )

IF lOK
(cWorking)->(dbgotop())
While (cWorking)->(!eof())
if upper((cWorking)->sel) = "S"
aadd( aMeta, cDir+alltrim((cWorking)->ficheros) ) //Llenamos array con los ficheros seleccionados.
endif
(cWorking)->(dbSkip())
Enddo
SysRefresh()

if !empty(aMeta)
//FranciscoA: Previsualizar y/o imprimir el metafile
//Enviamos como nombre del Documento "OldMetaFile", para que no lo borre en Method End(), Class TPrinter()
oPrn:= TPrinter():New( "OldMetaFile", .f., .t.,, .t., .f. )
oPrn:aMeta := aMeta
RPreview(oPrn)
else
MsgStop("No selecciono ningun fichero.","Alto")
endif
ENDIF


(cWorking)->(dbCloseArea())
Ferase((cWorking)+".dbf")
Ferase((cWorking)+".ntx")
dbSelectArea(cOldSele)
return nil


Maestro:
Me gustaría recibir sus modificaciones, que de seguro las hay.

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Posted: Fri Oct 31, 2008 1:14 am
by joseluisysturiz
...

Posted: Fri Oct 31, 2008 4:17 am
by FranciscoA
joseluisysturiz wrote:...
Hola, José Luis. ¿Qué hay...?

Posted: Fri Oct 31, 2008 4:36 am
by joseluisysturiz
FranciscoA wrote:
joseluisysturiz wrote:...
Hola, José Luis. ¿Qué hay...?
Bien colega, aca viendo todo lo referente a reportes, ya termine el reporte...ahora lo pulo para publicarlo, gracias por los tips y tus aportes y los de los demas colegas.

Posted: Fri Oct 31, 2008 4:50 am
by FranciscoA
joseluisysturiz wrote:
FranciscoA wrote:
joseluisysturiz wrote:...
Hola, José Luis. ¿Qué hay...?
Bien colega, aca viendo todo lo referente a reportes, ya termine el reporte...ahora lo pulo para publicarlo, gracias por los tips y tus aportes y los de los demas colegas.
Bueno, tú sabes... estamos para ayudarnos mutuamente.

Saludos.

Posted: Fri Oct 31, 2008 8:26 am
by Antonio Linares
Francisco,

Gracias por publicar tu solución! :-)

Posted: Fri Oct 31, 2008 12:08 pm
by FranciscoA
Antonio Linares wrote:Francisco,

Gracias por publicar tu solución! :-)
Antonio, estamos para compartir nuestros pequeños conocimientos, y... gracias a tí por haber creado tan grandioso producto, que en realidad, me ha dado muchas satisfacciones.

Saludos.
Francisco.