Estoy tratando de usando MsgMeter en la generación de un reporte, me aparece un cuadro de dialogo que debe ser del msgmeter
pero no veo la barra de avance
Este es mi prg
Code: Select all
/* -------------------------------------------------------------------------
PROGRAMA : ------------------------------ LISCAP.PRG
PROPOSITO : ----------------------------- LISTADO DE CAPTURA DE INVENTARIO
FISICO DE MARBETE Y/O DE HOJAS DE
TOMA DE INVENTARIO
APLICACION : ---------------------------- INVENTARIOS FISICOS
FECHA : --------------------------------- 28/08/14 J.A.T.
-----------------------------------------------------------------------------*/
# include "fivewin.ch"
FUNCTION LisCapFis()
LOCAL oDlg, oRad
LOCAL aoBtn := { nil, nil }
LOCAL cTitulo := "Listado de captura de inventario fisico"
dbCloseAll()
if !net_use( "cat",,, oApp:xDatos ) .or. ;
!net_use( "mar",,, oApp:xDatos ) .or. ;
!net_use( "smar",,,oApp:xDatos )
dbCloseAll(); RETURN NIL
endif
nOpcion := 1
DEFINE DIALOG oDlg RESOURCE "DLG_LIS_CAP_FIS" TITLE cTitulo
REDEFINE RADIO oRad VAR nOpcion ID 501, 502 OF oDlg UPDATE
REDEFINE BUTTONBMP aoBtn[1] ID 400 OF oDlg ;
PROMPT "A&ceptar " ;
BITMAP "BTN_OK" TEXTRIGHT ;
ACTION ( if( nOpcion = 1, ;
MsgMeter( { || EmiRepMar() },, ), ;
MsgMeter( { || EmiRepRef() },, ) ), oDlg:END() ) ;
MESSAGE "Aceptar" UPDATE
aoBtn[1]:cToolTip := "Presione para Continuar"
REDEFINE BUTTONBMP aoBtn[2] ID 401 OF oDlg ;
PROMPT "&Cancelar " BITMAP "BTN_CAN" TEXTRIGHT ;
ACTION oDlg:End() ;
MESSAGE "Cancelar" UPDATE CANCEL
aoBtn[2]:cToolTip := "Presione para Cancelar"
ACTIVATE DIALOG oDlg CENTERED ON INIT oninit( oDlg )
DBCloseAll()
RETURN NIL
// ------------------------------------------------------------------------ //
STATIC FUNCTION Cabeceras( oPrn, oFontD, oFontC, cTitRep1, cTitRep2 )
oPrn:CmSay( nRow, 10.7, oApp:cEmpresa, oFontC,,,,2 )
nRow += 0.4
oPrn:CmSay( nRow, 10.7, cTitRep1, oFontC,,,,2 )
nRow += 0.4
oPrn:CmSay( nRow, 02.5, "Fecha: " + dToc( Date() ), oFontC )
oPrn:CmSay( nRow, 10.7, cTitRep2, oFontC,,,,2 )
oPrn:CmSay( nRow, 18.0, "Pagina : " + AllTrim( Str( oPrn:nPage ) ), oFontC )
nRow += 0.40
LinePrint( oPrn, nRow, 1.0, nRow, 21.0 )
nRow+=0.3
IF nOpcion = 1
oPrn:CmSay( nRow, 01.5, "Marb", oFontC,,,,2 )
ELSE
oPrn:CmSay( nRow, 01.5, "Hoja", oFontC,,,,2 )
ENDIF
oPrn:CmSay( nRow, 02.0, "Modelo", oFontC )
oPrn:CmSay( nRow, 05.5, "Cantidad", oFontC,,,,1 )
IF nOpcion = 1
oPrn:CmSay( nRow, 06.5, "Marb", oFontC,,,,2 )
ELSE
oPrn:CmSay( nRow, 06.5, "Hoja", oFontC,,,,2 )
ENDIF
oPrn:CmSay( nRow, 07.0, "Modelo", oFontC )
oPrn:CmSay( nRow, 10.5, "Cantidad", oFontC,,,,1 )
IF nOpcion = 1
oPrn:CmSay( nRow, 11.5, "Marb", oFontC,,,,2 )
ELSE
oPrn:CmSay( nRow, 11.5, "Hoja", oFontC,,,,2 )
ENDIF
oPrn:CmSay( nRow, 12.0, "Modelo", oFontC )
oPrn:CmSay( nRow, 15.5, "Cantidad", oFontC,,,,1 )
IF nOpcion = 1
oPrn:CmSay( nRow, 16.5, "Marb", oFontC,,,,2 )
ELSE
oPrn:CmSay( nRow, 16.5, "Hoja", oFontC,,,,2 )
ENDIF
oPrn:CmSay( nRow, 17.0, "Modelo", oFontC )
oPrn:CmSay( nRow, 20.5, "Cantidad", oFontC,,,,1 )
nRow+=0.4
LinePrint( oPrn, nRow, 1.0, nRow, 21.0 )
nRow+=0.5
RETURN NIL
// ------------------------------------------------------------------------ //
STATIC FUNCTION EmiRepMar()
LOCAL oPrn, oFontC, oFontD, nContador
LOCAL nRegIni, nRegFin, nCols, nColMar, nColCla, nColCan
LOCAL cTitRep1, cTitRep2
LOCAL cTitulo := "Listado de captura de inventario fisico"
LOCAL nTotReg := 0, nRegAnt
LOCAL nTotFis := 0
cTitRep1 := "REPORTE DE CAPTURA DE INVENTARIO FISICO"
cTitRep2 := "POR MARBETE"
mar->(OrdSetFocus(3))
mar->(dbgotop())
PRINT oPrn NAME cTitulo /*FROM USER*/ PREVIEW
If Empty( oPrn:hDC )
Return NIL
End
DEFINE FONT oFontC NAME "Tahoma" SIZE 0, -8 BOLD OF oPrn
DEFINE FONT oFontD NAME "Tahoma" SIZE 0, -7 OF oPrn
DEFINE PEN oPen WIDTH 2 OF oPrn
oPrn:lPrvModal := .T.
PAGE
nRow := 1
Cabeceras( oPrn, oFontC, oFontD, cTitRep1, cTitRep2 )
nContador := 1
do while !mar->(EOF())
nRegIni := mar->(recno())
nCols := 1
//nContador := 1
nColMar := 01.5
nColCla := 02.0
nColCan := 05.5
do while nCols <= 4
oPrn:CmSay( nRow, nColMar, mar->reflis, oFontD,,,,2 )
oPrn:CmSay( nRow, nColCla, mar->clave, oFontD )
oPrn:CmSay( nRow, nColCan, TRANSFORM(mar->cant_fis,"9,999.99"), oFontD,,,,1 )
LinePrint( oPrn, nRow, 01.0, nRow, 20.5 )
nTotReg += 1
nTotFis += mar->cant_fis
nRegFin := mar->(recno())
nCols += 1
nColMar += 5
nColCla += 5
nColCan += 5
mar->(dbskip(65))
if mar->(eof())
exit
endif
enddo
nRow += 0.35
nContador += 1
if nContador > 65
if nCols > 4
mar->(dbgoto(nRegFin))
mar->(dbskip())
if !mar->(eof())
oPrn:EndPage()
oPrn:StartPage()
nRow := 1
nContador := 1
Cabeceras( oPrn, oFontC, oFontD, cTitRep1, cTitRep2 )
mar->(dbgoto(nRegFin))
mar->(dbskip())
endif
endif
else
mar->(dbgoto(nRegIni))
mar->(dbskip())
endif
enddo
LinePrint( oPrn, nRow, 01.0, nRow, 20.5 )
nRow += 0.20
if nRow >= 26
oPrn:EndPage()
oPrn:StartPage()
nRow := 1
Cabeceras( oPrn, oFontC, oFontD, cTitRep1, cTitRep2 )
endif
oPrn:CmSay( nRow+0.20, 06.0, "Total de registros --> ", oFontD,,,,1 )
oPrn:CmSay( nRow+0.20, 06.5, AllTrim(Transform(nTotReg,"99,999")),oFontD )
nRow += 0.60
if nRow >= 26
oPrn:EndPage()
oPrn:StartPage()
nRow := 1
Cabeceras( oPrn, oFontC, oFontD, cTitRep1, cTitRep2 )
endif
oPrn:CmSay( nRow, 06.0, "Total de físico --> ", oFontD,,,,1 )
oPrn:CmSay( nRow, 06.5, AllTrim(Transform(nTotFis,"999,999.99")),oFontD )
ENDPAGE
ENDPRINT
oFontC:End()
oFontD:End()
oPen:End()
RETURN NIL
// ------------------------------------------------------------------------ //
STATIC FUNCTION EmiRepRef()
LOCAL oPrn, oFontC, oFontD, nContador
LOCAL nRegIni, nRegFin, nCols, nColMar, nColCla, nColCan
LOCAL cTitRep1, cTitRep2
LOCAL cTitulo := "Listado de captura de inventario fisico"
LOCAL nTotReg := 0, nRegAnt
cTitRep1 := "REPORTE DE CAPTURA DE INVENTARIO FISICO"
cTitRep2 := "HOJAS DE TOMA DE INVENTARIO"
smar->(dbgotop())
PRINT oPrn NAME cTitulo /*FROM USER*/ PREVIEW
If Empty( oPrn:hDC )
Return NIL
End
DEFINE FONT oFontC NAME "Tahoma" SIZE 0, -8 BOLD OF oPrn
DEFINE FONT oFontD NAME "Tahoma" SIZE 0, -7 OF oPrn
DEFINE PEN oPen WIDTH 2 OF oPrn
oPrn:lPrvModal := .T.
PAGE
nRow := 1
Cabeceras( oPrn, oFontC, oFontD, cTitRep1, cTitRep2 )
nContador := 1
do while !smar->(EOF())
nRegIni := smar->(recno())
nCols := 1
//nContador := 1
nColMar := 01.5
nColCla := 02.0
nColCan := 05.5
do while nCols <= 4
oPrn:CmSay( nRow, nColMar, smar->reflis, oFontD,,,,2 )
oPrn:CmSay( nRow, nColCla, smar->clave, oFontD )
oPrn:CmSay( nRow, nColCan, TRANSFORM(smar->cant_fis,"9,999.99"), oFontD,,,,1 )
LinePrint( oPrn, nRow, 01.0, nRow, 20.5 )
nTotReg += 1
nRegFin := smar->(recno())
nCols += 1
nColMar += 5
nColCla += 5
nColCan += 5
smar->(dbskip(65))
if smar->(eof())
exit
endif
enddo
nRow += 0.35
nContador += 1
if nContador > 65
if nCols > 4
smar->(dbgoto(nRegFin))
smar->(dbskip())
if !smar->(eof())
oPrn:EndPage()
oPrn:StartPage()
nRow := 1
nContador := 1
Cabeceras( oPrn, oFontC, oFontD, cTitRep1, cTitRep2 )
smar->(dbgoto(nRegFin))
smar->(dbskip())
endif
endif
else
smar->(dbgoto(nRegIni))
smar->(dbskip())
endif
enddo
LinePrint( oPrn, nRow, 01.0, nRow, 20.5 )
nRow += 0.20
if nRow >= 26
oPrn:EndPage()
oPrn:StartPage()
nRow := 1
Cabeceras( oPrn, oFontC, oFontD, cTitRep1, cTitRep2 )
endif
oPrn:CmSay( nRow, 04.0, "Total de registros --> " + STR(nTotReg),oFontD )
ENDPAGE
ENDPRINT
oFontC:End()
oFontD:End()
oPen:End()
RETURN nil
// ------------------------------------------------------------------------ //
STATIC FUNCTION MsgMeter( bAction, cMsg, cTitle )
local oDlg, oMeter, oText, oBtn, oFont
local lEnd := .f., lCancel := .f.
local nVal := 0
DEFAULT bAction := { || nil },;
cMsg := "Processing...", cTitle := "Please, wait"
DEFINE FONT oFont NAME GetSysFont() SIZE 0, -8
DEFINE DIALOG oDlg FROM 5, 5 TO 13, 45 TITLE cTitle FONT oFont
@ 00.20, 00.50 SAY oText VAR cMsg SIZE 130, 20 OF oDlg
@ 02.00, 00.50 METER oMeter VAR nVal TOTAL 10 SIZE 150, 10 OF oDlg
@ 02.40, 10.40 BUTTON oBtn PROMPT "&Cancelar" OF oDlg ACTION ( lEnd:= .t., lCancel:= .t. ) SIZE 32, 11
// This block gets evaluated only the first time the DialogBox is painted !!!
oDlg:bStart = { || Eval( bAction, oMeter, oText, oDlg, @lEnd, oBtn ),;
lEnd := .t., oDlg:End() }
ACTIVATE DIALOG oDlg CENTERED VALID lEnd
oFont:End()
return lCancel
Saludos