Guardar y abrir Metafile SOLUCIONADO

Guardar y abrir Metafile SOLUCIONADO

Postby FranciscoA » Sun Oct 26, 2008 10:22 pm

Se puede guardar el archivo metafile generado por RPreview y luego poder abrir este mismo en otra pc utilizando siempre RPreview?
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Postby Antonio Linares » Mon Oct 27, 2008 9:00 am

Francisco,

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41315
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

PARA ANTONIO LINARES

Postby FranciscoA » Thu Oct 30, 2008 10:37 pm

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.
Last edited by FranciscoA on Fri Oct 31, 2008 1:42 pm, edited 2 times in total.
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Postby joseluisysturiz » Fri Oct 31, 2008 1:14 am

...
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Postby FranciscoA » Fri Oct 31, 2008 4:17 am

joseluisysturiz wrote:...


Hola, José Luis. ¿Qué hay...?
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Postby joseluisysturiz » Fri Oct 31, 2008 4:36 am

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.
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Postby FranciscoA » Fri Oct 31, 2008 4:50 am

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.
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Postby Antonio Linares » Fri Oct 31, 2008 8:26 am

Francisco,

Gracias por publicar tu solución! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41315
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby FranciscoA » Fri Oct 31, 2008 12:08 pm

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.
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 77 guests