fleal wrote:Hola Kleyber,
A ver si entiendo bien.... ¿Le das al usuario que escoja si quiere imprimir las hojas pares o impares?
Yo lo que busco es enviar desde FWH para que la impresora imprima en la misma hoja... la parte de arriba y la de atrás.
Lo que he visto es que mi impresora, no tiene esa propiedad, pero si las impresoras de mayor costo como una HP para oficina.
Saludos
Fernando
Exactamente eso, Fernando. Lo que pasa es que la mayoria de las impresoras no tiene dicha funcionalidad, pero asi como te comente, desde el preview se puede enviar primeramente las paginas impares y despues seria tan solamente invertir el papel en la impresora y entonces imprimir las paginas pares, haciendo asi lo que deseas.
Lo que hago en la verdad es asi: En la RPreview.prg puse un combobox con las opciones y cambie esto en el:
- Code: Select all Expand view RUN
static function PrintPage()
local hOldRes := GetResources()
local hMeta := oMeta1:hMeta
local oDlg, oRad, oPageIni, oPageFin
LOCAL aModo := {"Todas as Páginas","Páginas Pares","Páginas Ímpares"}
PRIVATE nOption := 1 ,;
nFirst := 1 ,;
nLast := len(DEVICE:aMeta)
PRIVATE nCopias := nItem := 1
// if nLast == 1
// PrintPrv(nil, nOption, nFirst, nLast)
// RETU nil
// endif
SET RESOURCES TO cResFile
DEFINE DIALOG oDlg RESOURCE "PRINT"
REDEFINE BUTTON ID 101 OF oDlg ;
ACTION PrintPrv(oDlg, nOption, nFirst, nLast)
REDEFINE BUTTON ID 102 OF oDlg ACTION oDlg:End()
REDEFINE RADIO oRad VAR nOption ID 103,104,105 OF oDlg ;
ON CHANGE iif(nOption==3 ,;
(oPageIni:Enable(),oPageFin:Enable()) ,;
(oPageIni:Disable(),oPageFin:Disable()) )
REDEFINE GET oPageIni ;
VAR nFirst ;
ID 106 ;
PICTURE "@K 99999" ;
VALID iif(nFirst<1 .OR. nFirst>nLast,(MessageBeep(),.F.),.T.) ;
OF oDlg
REDEFINE GET oPageFin ;
VAR nLast ;
ID 107 ;
PICTURE "@K 99999" ;
VALID iif(nLast<nFirst .OR. nLast>len(DEVICE:aMeta), ;
(MessageBeep(),.F.),.T.) ;
OF oDlg
REDEFINE GET oCopias VAR nCopias ID 108 of oDlg PICTURE "999" SPINNER ;
ON UP (++nCopias,if(nCopias>999,nCopias:=999,),oCopias:Refresh() );
ON DOWN (--nCopias,if(nCopias<1,nCopias:=1,),oCopias:Refresh() ) ;
REDEFINE COMBOBOX oItem VAR nItem ITEMS aModo ID 109 OF oDlg
oPageIni:Disable()
oPageFin:Disable()
SetResources(hOldRes )
ACTIVATE DIALOG oDlg
return nil
Y en la función PrintPrv lo hice asi:
- Code: Select all Expand view RUN
static function PrintPrv(oDlg, nOption, nPageIni, nPageEnd)
local oDevice := DEVICE
local aFiles := oDevice:aMeta
local hMeta := oMeta1:hMeta
local nFor, nXCopia, nTipoImp
CursorWait()
StartDoc(oDevice:hDC, oDevice:cDocument )
DO case
case nOption == 1 // All
FOR nXCopia = 1 to nCopias
nTipoImp := nFirst
FOR nFor := 1 TO len(aFiles)
if nItem = 1 // All Pages
#ifdef __CLIPPER__
StartPage(oDevice:hDC)
hMeta := GetMetaFile(aFiles[nFor])
PlayMetaFile( oDevice:hDC, hMeta )
DeleteMetafile(hMeta)
EndPage(oDevice:hDC)
#else
StartPage(oDevice:hDC)
hMeta := GetEnhMetaFile(aFiles[nFor])
PlayEnhMetaFile( oDevice:hDC, hMeta,, .t. )
DeleteEnhMetafile(hMeta)
EndPage(oDevice:hDC)
#endif
elseif nItem = 2 // Even Pages
if mod(nTipoImp,2)=0
#ifdef __CLIPPER__
StartPage(oDevice:hDC)
hMeta := GetMetaFile(aFiles[nFor])
PlayMetaFile( oDevice:hDC, hMeta )
DeleteMetafile(hMeta)
EndPage(oDevice:hDC)
#else
StartPage(oDevice:hDC)
hMeta := GetEnhMetaFile(aFiles[nFor])
PlayEnhMetaFile( oDevice:hDC, hMeta,, .t. )
DeleteEnhMetafile(hMeta)
EndPage(oDevice:hDC)
#endif
endif
elseif nItem = 3 // Odd Pages
if mod(nTipoImp,2)=1
#ifdef __CLIPPER__
StartPage(oDevice:hDC)
hMeta := GetMetaFile(aFiles[nFor])
PlayMetaFile( oDevice:hDC, hMeta )
DeleteMetafile(hMeta)
EndPage(oDevice:hDC)
#else
StartPage(oDevice:hDC)
hMeta := GetEnhMetaFile(aFiles[nFor])
PlayEnhMetaFile( oDevice:hDC, hMeta,, .t. )
DeleteEnhMetafile(hMeta)
EndPage(oDevice:hDC)
#endif
endif
endif
++nTipoImp
NEXT
NEXT
case nOption == 2 // Current page
FOR nXCopia := 1 to nCopias
StartPage(oDevice:hDC)
hMeta := oMeta1:hMeta
#ifdef __CLIPPER__
PlayMetaFile( oDevice:hDC, hMeta )
#else
PlayEnhMetaFile( oDevice:hDC, hMeta,, .t. )
#endif
EndPage(oDevice:hDC)
NEXT
case nOption == 3 // Range
FOR nXCopia := 1 to nCopias
nTipoImp := nFirst
FOR nFor := nPageIni TO nPageEnd
if nItem = 1 // All Pages
StartPage(oDevice:hDC)
#ifdef __CLIPPER__
hMeta := GetMetaFile(aFiles[nFor])
PlayMetaFile( oDevice:hDC, hMeta )
DeleteMetafile(hMeta)
#else
hMeta := GetEnhMetaFile(aFiles[nFor])
PlayEnhMetaFile( oDevice:hDC, hMeta,, .t. )
DeleteEnhMetafile(hMeta)
#endif
EndPage(oDevice:hDC)
elseif nItem = 2 // Even Pages
if mod(nTipoImp,2)=0
StartPage(oDevice:hDC)
#ifdef __CLIPPER__
hMeta := GetMetaFile(aFiles[nFor])
PlayMetaFile( oDevice:hDC, hMeta )
DeleteMetafile(hMeta)
#else
hMeta := GetEnhMetaFile(aFiles[nFor])
PlayEnhMetaFile( oDevice:hDC, hMeta,, .t. )
DeleteEnhMetafile(hMeta)
#endif
EndPage(oDevice:hDC)
endif
elseif nItem = 3 // Odd Pages
if mod(nTipoImp,2)=1
StartPage(oDevice:hDC)
#ifdef __CLIPPER__
hMeta := GetMetaFile(aFiles[nFor])
PlayMetaFile( oDevice:hDC, hMeta )
DeleteMetafile(hMeta)
#else
hMeta := GetEnhMetaFile(aFiles[nFor])
PlayEnhMetaFile( oDevice:hDC, hMeta,, .t. )
DeleteEnhMetafile(hMeta)
#endif
EndPage(oDevice:hDC)
endif
endif
++nTipoImp
NEXT
NEXT
endcase
EndDoc(oDevice:hDC)
CursorArrow()
if oDlg != nil
oDlg:End()
endif
return nil
Logicamente que debes cambiar la Prev32.dll y poner los dichos controles.
A ver si te sirve (y a los otros que lo desean)
Saludos,