Buen Dia con todos.
Seguro que es sencillo...
Cuando tenemos un proceso largo, debemos mostrar al usuario un dialogo donde se vea su avance ademas que asi evitamos el famoso mensaje "programa no responde" del Windows, bueno este dialogo es algo mas que un simple oMeter...
Imaginense procesar una tabla de 200,000 registros de operaciones, donde alguno de ellos van aser Ajustados o recalculados..,
En este dialogo es necesario mostrar en que Nro de Documento va, el Cliente y periodo.. Hasta aqui no hay problema pero tambien debo de ir mostrando un LOG de los registros que fueron reajustados o recalculados en el mismo dialogo:
me dan una mano como ir mostrando este LOG en ese dialogo ?
1. Que tipo de objeto creo en el dialogo (Get When .f. o u Say ), como voy actualizado este Objeto ..
2. LLegado el momento como puedo Cancelar el proceso en cualquier momento, a mitad de camino..?? (antes usaba en nuestro querido clipper el Inkey() )
Aqui les muestro como lo voy haciendo
Gracias por adelantado
Lubin
Seguro que es sencillo...
Cuando tenemos un proceso largo, debemos mostrar al usuario un dialogo donde se vea su avance ademas que asi evitamos el famoso mensaje "programa no responde" del Windows, bueno este dialogo es algo mas que un simple oMeter...
Imaginense procesar una tabla de 200,000 registros de operaciones, donde alguno de ellos van aser Ajustados o recalculados..,
En este dialogo es necesario mostrar en que Nro de Documento va, el Cliente y periodo.. Hasta aqui no hay problema pero tambien debo de ir mostrando un LOG de los registros que fueron reajustados o recalculados en el mismo dialogo:
me dan una mano como ir mostrando este LOG en ese dialogo ?
1. Que tipo de objeto creo en el dialogo (Get When .f. o u Say ), como voy actualizado este Objeto ..
2. LLegado el momento como puedo Cancelar el proceso en cualquier momento, a mitad de camino..?? (antes usaba en nuestro querido clipper el Inkey() )
Aqui les muestro como lo voy haciendo
FUNCTION MSG_CLIENTES()
*********************
LOCAL oDlg
*Variables Locales para Definicoin de Orgigen de la data
*######################## CAMPOS DEL REGISTRO && 9xx ID en recursos
LOCAL xTitulo :="CALULANDO PRECIOS" ,oTitulo
LOCAL xCLIENTE:="Iniciando..." ,oIniciando
LOCAL xPERIODO :="Registro...0%" ,oPERIODO
LOCAL xMensaje:="Mensaje " ,oMensaje
*Variables Locales para contrl del avanvce
LOCAL oCLIENTE ,XCLIENTE := SPACE(40)
LOCAL oPERIODO ,XPERIODO := SPACE(40)
LOCAL oAVANCE ,XAVANCE := SPACE(40)
LOCAL Msg_oVMen:={}
DEFINE DIALOG oDlg RESOURCE "MSG_CLIENTES" TITLE "CONTROL DE CLIENTES "
REDEFINE SAY oTitulo VAR XTitulo ID 601 OF oDlg WHEN .F.
REDEFINE GET oCLIENTE VAR XCLIENTE ID 901 OF oDlg PICTURE "@!" WHEN .F. UPDATE
REDEFINE GET oPERIODO VAR XPERIODO ID 902 OF oDlg PICTURE "@!" WHEN .F. UPDATE
REDEFINE GET oAVANCE VAR XAVANCE ID 903 OF oDlg PICTURE "@!" WHEN .F. UPDATE
REDEFINE BUTTON ID 8011 OF oDlg ACTION RECALCULO(oDlg,oCliente,oPeriodo,oavance)
REDEFINE BUTTON ID 8012 OF oDlg ACTION (oDlg:End())
ACTIVATE DIALOG oDlg CENTERED
RETURN .T.
FUNCTION RECALCULO(ocliente,oPeriodo)
******************** FUNCION PARA PROCESAR LA TABLA
LOCAL XT:=0
LOCAL XN:=0
SELECT OPERACIONES
GOTOP
XT:=OPERACIONES->LASTREC()
DO WHILE .NOT. EOF()
*ACTUALIZO EL DIALOGO PARA EL CLIENTE
ocliente:ctext:=OPERACIONES->CLIENTE
oPeriodo:ctext:=OPERACIONES->PERIODO
oavance:ctext:=STR(XN/XT*100,4,0)+" % "
sysrefresh()
....
.... CALCULOS
OPERACIONES->skip()
ENDDO
msginfo("termine...")
oDlg:end()
RETURN .T.Gracias por adelantado
Lubin