Dialogo que muestre como avanza un proceso

Dialogo que muestre como avanza un proceso

Postby lubin » Wed May 20, 2009 8:20 pm

Buenos Dias

Necesito crear un Dialogo que me permita ver cual ese el avance de un proceso Activado desde un boton que esta en el mismo dialogo
Para esto tendremos el el dialogo tres campos: Proceso , Avance, y Mensaje ademas de dos Botones: "INICIAR" , "CANCELAR"
Cuando se presione "INICIAR" se activara el proceso el cual recibe como argumentos los objetos de oDlg, oProceso, oAvance, oMensaje
a media que va avanzando se van actualizando dichos campoos...

Bueno ese es el deseo .. pero no me funciona :(

Aqui les dejo un ejemplo corto de lo que estoy haciendo, me ayudan por favor , que esta mal,, ??

Gracias por adelantado cualquier suguerencia.
Lubin

Code: Select all  Expand view
#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)    

* 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

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
     oAvance:refresh()
     FOR I=1 TO 100
      XMEN="PROCESO ("+K_PRO+") -->" +STR(I,10,0)
      oAvance:cText:=xMEN
      oAvance:UPDATE()
      KPAUSE()  &&...  haciendo tiempo para el ejemplo
     NEXT I


K_PRO="B"  && Aqui va otro proceso
     oProceso:cText:="Proceso >>>"+K_PRO
     oAvance:refresh()
     FOR I=1 TO 100
      XMEN="PROCESO ("+K_PRO+") -->" +STR(I,10,0)
      oAvance:cText:=xMEN
      oAvance:UPDATE()
      KPAUSE()    && Haciendo tiempo para el ejemplo
     NEXT I

RETURN .T.


FUNCTION KPAUSE(XN)  &&  FUNCION USADA  EN ESTE  CASO  SOLO PARA HACER TIEMPOO....
LOCAL XI:=0
IF XN=NIL
  XN=5
ENDIF
FOR XI=1 TO XN*10000
NEXT XI
RETURN NIL

 
User avatar
lubin
 
Posts: 449
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru

Re: Dialogo que muestre como avanza un proceso

Postby ADBLANCO » Wed May 20, 2009 9:21 pm

TE MANDO UN EJEMPLO CON METTER

Code: Select all  Expand view
******************************************************************************************
FUNCTION d_rechtradat(oDlgAnt,lnuevo)         && && Pide los Datos a procesar
******************************************************************************************
LOCAL lRET := .F.  ,inc := .F.   ,bor := .F.   ,nSelect      ,XNTR
LOCAL oDlg         ,oCODSUC      ,oANOSIN      ,oNROSIN      ,oTNR         ,oFECOCU      ,;
      oFECAVI      ,oTIPREC      ,oTIPACC      ,oButSalir    ,bButSalir    ,oButProc     ,;
      bButProc     ,bProcede     ,lSalir:=.f.  ,bButDisable  ,bButEnable   ,oFKey        ,;
      dFecha       ,nTotInde     ,oTxt0        ,oTxt2        ,oFecha       ,oTotInde     ,;
      oMtr         ,nPercent     ,mDSAV        ,omDSAV       ,omTDAT       ,omTAPR       ,;
      omTAUT       ,omRAPR       ,oTXTRAPR     ,oTxt3

  oFKey:=tvkey():NEW   // CLASE TVKEY (control de teclas de funcion)

  SETKEY(VK_ESCAPE, { || EVAL(bButSalir)  } )
  SETKEY(VK_F8    , { || IIF(oButProc:lActive,EVAL(bButProc),)  } )
  bButDisable  := { || oButProc:Disable(),oButSalir:Disable()}
  bButEnable   := { || oButProc:Enable() ,oButSalir:Enable() }
  bButSalir    := { || oDlg:End()}
  bButProc     := { || EVAL(bButDisable),TRANSFRECH(oMtr,oTXT0,oTXT2,oTXT3,oDlg),EVAL(bButEnable),oDlg:End()}
  XNTR         := MTNR
  mMOTIVO      := SPACE(100)
  MSGRUN('Espere..., Cargando los registros',,{||carg_sinn()}) // CARGA INFORMACION DE SINIESTRO
  mFECRECH     := IIF(mFECRECH=CTOD(""),yFECHA,mFECRECH)           // ASIGNA FECHA DE RECHAZO
  dFecha       := MFECRECH
  MTIPREC      := RECLAMOS->TIPREC
  MTIPACC      := RECLAMOS->TIPACC
  mAMPAROAF  := b_amparo(mTIPREC,mTIPACC)
  mDESCAMP     := b_namparo(mAMPAROAF)
  DEFINE    DIALOG  oDlg      RESOURCE "SSN22F";
            FONT    oFontGen                   ;
            OF      oDlgAnt                    ;
            TITLE 'Siniestros - '+'Actualizar Datos de Rechazos en las Agencias'
    oDlg:lHelpIcon  :=.f.  && Apago el Icono de Help
    REDEFINE  GET oCODSUC     VAR mCODSUC    ID 227 OF oDlg;
              PICTURE "999"   WHEN .F.
    REDEFINE  GET oANOSIN     VAR mANOSIN    ID 228 OF oDlg;
              PICTURE "99"    WHEN .F.
    REDEFINE  GET oNROSIN     VAR mNROSIN    ID 229 OF oDlg;
              PICTURE "99999" WHEN .F.
    REDEFINE  GET oTNR        VAR mTNR       ID 230 OF oDlg;
              PICTURE "999"   WHEN .F.
    REDEFINE  GET   oFECOCU   VAR mFECOCU    ID 231 OF oDlg;
              PICTURE "@D"    WHEN .F.
    REDEFINE  GET   oFECAVI   VAR mFECAVI    ID 232 OF oDlg;
              PICTURE "@D"    WHEN .f.
    REDEFINE  GET   oTIPREC   VAR mDESCAMP   ID 233 OF oDlg;
              PICTURE "@!"    WHEN .f.
    REDEFINE  GET   oFecha    VAR dFecha     ID 251 OF oDlg;
              PICTURE "@D"    WHEN .f.
    REDEFINE  METER oMtr      VAR nPercent   ID 801 OF oDlg TOTAL 100
    REDEFINE  SAY oTXT0 PROMPT "" ID 97 OF oDlg
    REDEFINE  SAY oTXT2 PROMPT "" ID 98 OF oDlg
    REDEFINE  SAY oTXT3 PROMPT "" ID 99 OF oDlg
    REDEFINE  BUTTON  oButProc     ID  102  OF oDlg;
              MESSAGE "Pulse para Procesar"        ;
              PROMPT  "[F8]-Procesar"              ;
              ACTION  EVAL(bButProc)
    REDEFINE  BUTTON  oButSalir    ID  101  OF oDlg;
              MESSAGE "Pulse para Salir"           ;
              PROMPT  "[Esc]-Salir"                ;
              ACTION  EVAL(bButSalir)        && Sale de la Rutina, Por Convencion el ID es 101
    ACTIVATE DIALOG oDlg CENTER
  oFKey:End()
  RETURN lRET

******************************************************************************************
PROCEDURE TRANSFRECH(oMeter,oMsg,oMsg2,oMsg3,oDlgAnt)
******************************************************************************************
  IF MSGNOYES('Desea Actualizar','Seleccione')
    oMsg:settext('Espere..., Verificando Conexión remota a la Agencia')
    IF con_tra(oMeter,oMsg,oMsg2,oMsg3,oDlgAnt)
      oMsg:settext('Espere..., Transmitiendo los Datos del Rechazo')
      pre_rechdat(oMeter,oMsg,oMsg2,oMsg3,oDlgAnt)
    ENDIF
  ENDIF
  RETURN

******************************************************************************************
FUNCTION pre_rechdat(oMeter,oMsg,oMsg2,oMsg3,oDlgAnt)        && Prepara los Archivos a transferir
******************************************************************************************
LOCAL lOk:=.f.,NNUMERO,CNOMBRE
  oMsg2 :settext('...Paso 1   Preparando Archivo 01 de 05')
  oMeter:nTotal:=13
  oMeter:Set( 0 )                              //
  oMeter:Refresh()                             // REFRESCA EL METER
  IF SELECT('SINTRAS')=0
    O_FILES({'SINTRAS'},.F.,.F.)
  ENDIF
  archt := 'c:\OSINIES.TXT'
  SELE SINIEST
  COPY TO &ARCHT FOR _FIELD->CODSUC = mCODSUC .AND.;
                     _FIELD->ANOSIN = mANOSIN .AND.;
                     _FIELD->NROSIN = mNROSIN      ;
                     DELIMITED
  oMeter:Set( 1 )                              //
  oMeter:Refresh()                             // REFRESCA EL METER
  oMeter:Set( 2 )                              //
  oMeter:Refresh()                             // REFRESCA EL METER
  oMsg2 :settext('...Paso 1   Preparando Archivo 02 de 05')
  archt := 'C:\ORECLAM.TXT'
  SELE RECLAMOS
  COPY TO &ARCHT FOR _FIELD->CODSUC = mCODSUC .AND.;
                     _FIELD->ANOSIN = mANOSIN .AND.;
                     _FIELD->NROSIN = mNROSIN .AND.;
                     _FIELD->TNR    = mTNR         ;
                     DELIMITED
  oMeter:Set( 3 )                              //
  oMeter:Refresh()                             // REFRESCA EL METER
  oMsg2 :settext('...Paso 1   Preparando Archivo 03 de 05')
  archt := 'C:\OSINOREC.TXT'
  SELE SINORECH
  COPY TO &ARCHT FOR _FIELD->CODSUC = mCODSUC .AND.;
                     _FIELD->ANOSIN = mANOSIN .AND.;
                     _FIELD->NROSIN = mNROSIN .AND.;
                     _FIELD->TNR    = mTNR         ;
                     DELIMITED
  oMeter:Set( 4 )                              //
  oMeter:Refresh()                             // REFRESCA EL METER
  oMsg2 :settext('...Paso 1   Preparando Archivo 04 de 05')
  archt := 'C:\OSINREC.TXT'
  SELE SINRECH
  COPY TO &ARCHT FOR _FIELD->CODSUC = mCODSUC .AND.;
                     _FIELD->ANOSIN = mANOSIN .AND.;
                     _FIELD->NROSIN = mNROSIN .AND.;
                     _FIELD->TNR    = mTNR         ;
                     DELIMITED
  oMeter:Set( 5 )                              //
  oMeter:Refresh()                             // REFRESCA EL METER
  oMsg2 :settext('...Paso 1   Preparando Archivo 05 de 05')
  archt := 'C:\OMOVDSI.TXT'
  SELE MOVDSIN
  COPY TO &ARCHT FOR _FIELD->CODSUC = mCODSUC .AND.;
                     _FIELD->ANOSIN = mANOSIN .AND.;
                     _FIELD->NROSIN = mNROSIN      ;
                     DELIMITED
  oMeter:Set( 6 )                              //
  oMeter:Refresh()                             // REFRESCA EL METER
  oMsg2 :settext('...Paso 2   Transfiriendo Archivos (Preparando)')
  xDDIR := ddir
  ddir  := mDIRECT
  set path to ( ddir )
  m_CAMINO  := ddir
  ppal_path := ddir
  archt := MDIRECT+'SINTRAS.DBF'
  IF !FILE(ARCHT)
    SELECT('SINTRAS')
    COPY STRU TO &ARCHT
  ENDIF
  n_close('SINTRAS')
  archt := MDIRECT+'SINTRAS'
  IF N_USE(ARCHT,'',EXCLUSIVO,0,,'SINTRAS')
    BEGIN SEQUENCE
      SELECT('SINTRAS')
      SINTRAS->(DBGOBOTTOM())
      IF SINTRAS->(EOF())
        nNumero:=1
      ELSE
        nNumero:=SINTRAS->NRO+1
      ENDIF
      oMsg2 :settext('...Paso 2   Transfiriendo Archivos 1 de 04')
      oMeter:Set( 7 )                              //
      oMeter:Refresh()                             // REFRESCA EL METER
      CNOMBRE:=M_CAMINO+'SINIE'+STRZERO(nNumero,3,0)+".TRA"
      COPY FILE c:\OSINIES.TXT TO &CNOMBRE
      oMsg2 :settext('...Paso 2   Transfiriendo Archivos 2 de 04')
      oMeter:Set( 8 )                              //
      oMeter:Refresh()                             // REFRESCA EL METER
      IF FILE('c:\ORECLAM.TXT')
        CNOMBRE:=M_CAMINO+'RECLA'+STRZERO(nNumero,3,0)+".TRA"
        COPY FILE c:\ORECLAM.TXT TO &CNOMBRE
      ENDIF
      oMsg2 :settext('...Paso 2   Transfiriendo Archivos 3 de 04')
      oMeter:Set( 9 )                              //
      oMeter:Refresh()                             // REFRESCA EL METER
      IF FILE('c:\OSINOREC.TXT')
        CNOMBRE:=M_CAMINO+'SINOR'+STRZERO(nNumero,3,0)+".TRA"
        COPY FILE c:\OSINOREC.TXT TO &CNOMBRE
      ENDIF
      oMsg2 :settext('...Paso 2   Transfiriendo Archivos 4 de 04')
      oMeter:Set( 10)                              //
      oMeter:Refresh()                             // REFRESCA EL METER
      IF FILE('c:\OSINREC.TXT')
        CNOMBRE:=M_CAMINO+'SINRE'+STRZERO(nNumero,3,0)+".TRA"
        COPY FILE c:\OSINREC.TXT TO &CNOMBRE
      ENDIF
      oMsg2 :settext('...Paso 2   Transfiriendo Archivos 4 de 05')
      oMeter:Set( 11)                              //
      oMeter:Refresh()                             // REFRESCA EL METER
      IF FILE('c:\OMOVDSI.TXT')
        CNOMBRE:=M_CAMINO+'MOVDS'+STRZERO(nNumero,3,0)+".TRA"
        COPY FILE c:\OMOVDSI.TXT TO &CNOMBRE
      ENDIF
      SINTRAS->(DBAPPEND())
      oMeter:Set( 12 )                              //
      oMeter:Refresh()                             // REFRESCA EL METER
      oMsg2 :settext('...Paso 3   Transfiriendo Archivos (Cerrando)')
      SINTRAS->TIPO :="REC"
      SINTRAS->NRO  :=NNUMERO
      _FIELD->CODSUC:=mCODSUC
      _FIELD->ANOSIN:=mANOSIN
      _FIELD->NROSIN:=mNROSIN
      _FIELD->TNR   :=mTNR
      oMeter:Set( 13 )                             //
      oMeter:Refresh()                             // REFRESCA EL METER
      N_CLOSE('SINTRAS')
      MSGALERT("Transferencia Completada, Informe a la Agencia","Atención...")
      lOk:=.T.
    RECOVER
      MSGALERT("Transferencia No Se Pudo Completar,"+CRLF+"Problemas de Comunicación","Atención...")
    END
  ELSE
    MSGALERT("Archivo de Siniestros Ocupado, No puede transferir Informacion","Atención...")
  ENDIF
  ddir := xDDIR
  set path to ( ddir )
  m_CAMINO  := ddir
  ppal_path := ddir
  RETURN NIL
 
Saludos

Angel, Valencia, Venezuela

xH .997 - FW 7.9 - BCC55 - WorkShop - MySql
User avatar
ADBLANCO
 
Posts: 299
Joined: Mon Oct 22, 2007 3:03 pm
Location: Valencia - Venezuela

Re: Dialogo que muestre como avanza un proceso

Postby lubin » Wed May 20, 2009 10:11 pm

Gracias ADBLANCO,,
entrare a estudiarlo.. indudablemente hay mayor codigo,

Una consulta con respecto al Meter... no consume muchos recursos ???
y la metodologia que estaba planteando, parece que no anda verdad.. ??


Lubin
User avatar
lubin
 
Posts: 449
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru

Re: Dialogo que muestre como avanza un proceso

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

Re: Dialogo que muestre como avanza un proceso

Postby lubin » Wed May 20, 2009 10:25 pm

Gracias Francisco...

Estare aplicando tu sugerencia creo que vamos en el mismo camino..
Te comento los resultados, al llegar a mi oficina

Lubin
User avatar
lubin
 
Posts: 449
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru

Re: Dialogo que muestre como avanza un proceso

Postby lubin » Thu May 21, 2009 5:55 pm

Hola Francisco,

Los cambios sugueridos han funcionado correctamente, y como dicen es una espina menos!! ahora si anda...

Estudiare la otra alternativa de adicionar el Meter, la cual tambien fue sugerido en este post, pues indudablemente seria mas vistoso

La pregunta respecto al Meter consumiria mas recursos ??, sin problemas en WinXp o Win Vista ??

Gracias por el apoyo
Lubin
User avatar
lubin
 
Posts: 449
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru

Re: Dialogo que muestre como avanza un proceso

Postby ADBLANCO » Mon May 25, 2009 2:33 pm

Cero problemas desde xp y/o vista (comprobado)
Saludos

Angel, Valencia, Venezuela

xH .997 - FW 7.9 - BCC55 - WorkShop - MySql
User avatar
ADBLANCO
 
Posts: 299
Joined: Mon Oct 22, 2007 3:03 pm
Location: Valencia - Venezuela


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 45 guests

cron