FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Dialogo que muestre como avanza un proceso
Posts: 467
Joined: Fri Dec 09, 2005 12:41 AM
Dialogo que muestre como avanza un proceso
Posted: Wed May 20, 2009 08: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 (fw): Select all Collapse
#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
Posts: 299
Joined: Mon Oct 22, 2007 03:03 PM
Re: Dialogo que muestre como avanza un proceso
Posted: Wed May 20, 2009 09:21 PM
TE MANDO UN EJEMPLO CON METTER

Code (fw): Select all Collapse
******************************************************************************************
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
Posts: 467
Joined: Fri Dec 09, 2005 12:41 AM
Re: Dialogo que muestre como avanza un proceso
Posted: 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

Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Dialogo que muestre como avanza un proceso
Posted: 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

Francisco J. Alegr铆a P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 467
Joined: Fri Dec 09, 2005 12:41 AM
Re: Dialogo que muestre como avanza un proceso
Posted: 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

Posts: 467
Joined: Fri Dec 09, 2005 12:41 AM
Re: Dialogo que muestre como avanza un proceso
Posted: Thu May 21, 2009 05: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

Posts: 299
Joined: Mon Oct 22, 2007 03:03 PM
Re: Dialogo que muestre como avanza un proceso
Posted: Mon May 25, 2009 02:33 PM

Cero problemas desde xp y/o vista (comprobado)

Saludos



Angel, Valencia, Venezuela



xH .997 - FW 7.9 - BCC55 - WorkShop - MySql

Continue the discussion