by FranciscoA » Wed May 20, 2009 10:19 pm
Hola Lubin.
Te devuelvo el tuyo, trabajando y otro ejemplo mas.
Saludos
#include "FiveWin.ch" && Se incluye el Ch de FiveWin
FUNCTION JK_PROCESO()
*********************
* ESTE MODULO MUESTRA UN CUADRO DIALOOGO CON EL:
* PROCESO ....
* AVANCE ....
* MENSAJE ...
* Y el Boton ..8011 lanza el proceso
*
LOCAL oDlg_Maestro
LOCAL Z_EDIT:=.f. && pARA Q ME LO MUESTRE COM gETS PERO DESHABILITADO
*Variables Locales para Registro del PERSONAL
*######################## CAMPOS DEL REGISTRO && 9xx ID en recursos
LOCAL oPROCESO ,XPROCESO := SPACE(40)
LOCAL oAVANCE ,XAVANCE := SPACE(40)
LOCAL oMENSAJE ,XMENSAJE := SPACE(40)
SET RESOURCES TO "P2.DLL" //Esto si usas .dll
* COLOR CLR_GREEN, CLR_BLUE
DEFINE DIALOG oDlg_Maestro RESOURCE "JK_PROCESO" TITLE "CONTROL DE PROCESOS "
REDEFINE GET oPROCESO VAR XPROCESO ID 801 OF oDlg_Maestro PICTURE "@!" WHEN Z_EDIT UPDATE
REDEFINE GET oAVANCE VAR XAVANCE ID 802 OF oDlg_Maestro PICTURE "@!" WHEN Z_EDIT UPDATE
REDEFINE GET oMENSAJE VAR XMENSAJE ID 803 OF oDlg_Maestro PICTURE "@!" WHEN Z_EDIT UPDATE
REDEFINE BUTTON ID 8011 OF oDlg_Maestro ACTION JK_MODULO(oDlg_Maestro,oProceso,oAvance,oMensaje)
REDEFINE BUTTON ID 8012 OF oDlg_Maestro ACTION (oDlg_Maestro:End())
ACTIVATE DIALOG oDlg_Maestro CENTERED
SET RESOURCES TO //Esto si usas .dll
RETURN .T.
FUNCTION JK_MODULO(oDlg,oProceso,oAvance,oMensaje)
**************************************************
* ESTA FUNCION EJECUTA UN COINJUNTO DE PROCESOS... Y A MEDIDA QUE VA AVANZANDO QUISIERA QUE DE VISUALICE EN EL Dialogo MAESTRO
local I
LOCAL K_PRO:=""
LOCAL XMEN:=""
K_PRO:="A" && aqui va un proceso
oProceso:cText:="Proceso >>>"+K_PRO
oMensaje:cText:="Estoy procesando "+K_PRO
FOR I:=1 TO 100
XMEN:="PROCESO ("+K_PRO+") -->" +STR(I,10,0)
oAvance:cText:=xMEN
SysRefresh()
* KPAUSE() &&... haciendo tiempo para el ejemplo
Inkey(.05)
NEXT I
K_PRO:="B" && Aqui va otro proceso
oProceso:cText:="Proceso >>>"+K_PRO
oMensaje:cText:="Ahora, estoy procesando "+K_PRO
FOR I:=1 TO 100
XMEN:="PROCESO ("+K_PRO+") -->" +STR(I,10,0)
oAvance:cText:=xMEN
SysRefresh()
* KPAUSE() && Haciendo tiempo para el ejemplo
Inkey(.05)
NEXT I
oMensaje:cText:="He finalizado"
RETURN .T.
Este otro lo utilizo desde hace muchos años:
//----------------------------------//
function copiar()
local oDestino, Destino, lOK:=.f.
local aDirectorio:={},aFuente:={},aDestino:={}
local oDlg, oCbx1
local cItems:=aDrives(), cDrive
local cBmps:={}, n
for n:=1 to len(cItems)
aadd(cBmps,"hDrive")
next
cDrive:=cItems[1]
Destino:= space(16)
DEFINE DIALOG oDlg RESOURCE "BACKUP"
REDEFINE COMBOBOX oCbx1 VAR cDrive ;
ID 103 OF oDlg ;
ITEMS cItems ;
BITMAPS cBmps
REDEFINE GET oDestino VAR Destino ID 104 of oDlg PICTURE "@!"
REDEFINE BUTTON ID 312 OF oDLG ACTION (lOK:=.T., oDlg:End())
REDEFINE BUTTON ID 313 OF oDLG ACTION (lOK:=.F., oDlg:End())
ACTIVATE DIALOG oDlg CENTERED
IF lOK
if !BloqueaTodo()
return nil
endif
Destino:=cDrive+"\"+alltrim(Destino)
if lIsDir(destino)
If !MsgNoYes("Directorio "+destino+" ya existe. Lo sobre-escribe?","Esta Seguro?")
return nil
endif
else
lmkDir(Destino)
endif
aDirectorio:=DIRECTORY("*.DBF","D")
AEVAL(aDirectorio, {|aFich| AADD(aFuente, aFich[F_NAME]), AADD(aDestino, Destino+"\"+aFich[F_NAME]), SysRefresh() } )
aDirectorio:=DIRECTORY("*.INI","D")
AEVAL(aDirectorio, {|aFich| AADD(aFuente, aFich[F_NAME]), AADD(aDestino, Destino+"\"+aFich[F_NAME]), SysRefresh() } )
dbCloseall()
CopyFiles(aFuente,aDestino)
MsgInfo("Respaldo efectuado. Revise siempre la integridad del respaldo")
MisAreas()
ENDIF
return nil
//----------------------------------------------------------------------------//
function CopyFiles( aSource, aTarget, nBufSize )
local oDlg, oSay1, oSay2, oSay3, oBtnCancel
local oMeter1, oMeter2
local nAmount1, nAmount2
local lEnd := .f.
DEFAULT nBufSize := 4000
DEFINE DIALOG oDlg RESOURCE "CopyFiles"
REDEFINE SAY oSay1 ID 110 OF oDlg
REDEFINE SAY oSay2 ID 120 OF oDlg
REDEFINE METER oMeter1 VAR nAmount1 ID 130 OF oDlg
REDEFINE SAY oSay3 ID 140 OF oDlg
REDEFINE METER oMeter2 VAR nAmount2 ID 150 OF oDlg
REDEFINE BUTTON oBtnCancel ID 2 OF oDlg ;
ACTION ( lEnd := .t., SysRefresh(), oDlg:End() )
oDlg:bStart := { || StartCopy( aSource, aTarget, nBufSize,;
oSay1, oSay2, oMeter1, oSay3, oMeter2,;
@lEnd, oDlg ),;
oBtnCancel:SetText( "&Ok" ) }
ACTIVATE DIALOG oDlg CENTERED
return nil
//----------------------------------------------------------------------------//
static function StartCopy( aSource, aTarget, nBufSize, oSay1, oSay2,;
oMeter1, oSay3, oMeter2, lEnd, oDlg )
local n
local hSource, hTarget
local cBuffer := Space( nBufSize )
local nBytes, nFile := 0, nTotal := 0
local nTotSize := 0
for n = 1 to Len( aSource )
if ! File( aSource[ n ] )
MsgStop( "Fichero no encontrado: " + aSource[ n ], "Advertencia" )
else
hSource = FOpen( aSource[ n ] )
nTotSize += FSeek( hSource, 0, 2 )
FClose( hSource )
endif
SysRefresh()
next
oMeter2:nTotal = nTotSize
for n = 1 to Len( aSource )
IF File( aSource[ n ] )
hSource = FOpen( aSource[ n ] )
hTarget = FCreate( aTarget[ n ] )
oSay1:SetText( "Fuente : " + aSource[ n ] )
oSay2:SetText( "Destino: " + aTarget[ n ] )
oMeter1:Set( 0 )
oMeter1:nTotal = FSeek( hSource, 0, 2 )
FSeek( hSource, 0, 0 )
nFile := 0
SysRefresh()
while ( nBytes := FRead( hSource, @cBuffer, nBufSize ) ) > 0
FWrite( hTarget, cBuffer, nBytes )
oSay3:SetText( "Bytes copiados: " + ;
AllTrim( Str( nTotal += nBytes ) ) )
oMeter1:Set( nFile += nBytes )
oMeter2:Set( nTotal )
SysRefresh()
end
FClose( hSource )
FClose( hTarget )
if lEnd
exit
endif
ENDIF
next
oDlg:End()
return nil
Last edited by
FranciscoA on Wed May 20, 2009 10:26 pm, edited 1 time in total.
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql