In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Formulario para generar indices..

Foro público de Xailer en español
Responder
Israel Solis
Mensajes: 155
Registrado: Mié Nov 03, 2004 12:42 pm
Ubicación: Cancún, México
Contactar:

Formulario para generar indices..

Mensaje por Israel Solis »

Colegas:
Tengo un problemillas:
Tengo un formulario tipo "bsDIALOG" donde estoy mostrando el avance para
la generación de archivos í­ndices y lo ejecuto de la siguiente manera
desde el menú:
METHOD MnuMainItem1_3Click( oSender, oMenu ) CLASS tFrmMain
WITH OBJECT TFrmCdx():New() /<--- Creo el objeto del formulario/
:Show() /<------- Muestro el formulario/
:GradesCdx() /<--- Proceso que se encarga de la generación de los
archivos í­ndices/
END WITH
RETURN Nil
En el método "GradesCdx()" es en donde se realiza el proceso de generar
los archivos í­ndices y de actualizar los *Progress*, el problema que se
me presenta es:
1) También en este método actualizo los *Label *para mostrar el nombre
del archivo que se está generando con ::oLblArchivo:cText := "mi
archivo..." y este no se actualiza sino hasta el final, es decir, solo
muestra el nombre del último archivo generado.
2) Si se presiona clic en el *botón Cancelar* o bien en tache rojo para
cerrar, éstos no responden hasta que los proceso de generación de
archivos ha terminado.
no se que estoy haciendo mal, alguien podrá darme luz?
Imagen progress bar
GRACIAS!!
SALUDOS!!
Israel Solis
--
Saludos :D

Israel
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Formulario para generar indices..

Mensaje por jfgimenez »

Israel,
Tengo un formulario tipo "bsDIALOG" donde estoy mostrando el avance para la generación de archivos í­ndices y lo ejecuto de la siguiente manera desde el menú:
METHOD MnuMainItem1_3Click( oSender, oMenu ) CLASS tFrmMain
WITH OBJECT TFrmCdx():New() <--- Creo el objeto del formulario
:Show() <------- Muestro el formulario
:GradesCdx() <--- Proceso que se encarga de la generación de los archivos í­ndices
END WITH
RETURN Nil
Te aconsejo que uses :ShowModal() en vez de :Show(), para evitar que el usuario pueda "tocar" por otro sitio mientras se está ejecutando el proceso. Si lo haces así­, en vez de poner la llamada a :GradesCdx() ahí­, la tendrás que poner en el evento OnShow del formulario; ten en cuenta que con :ShowModal(), la siguiente lí­nea de código no se ejecutarí­a hasta que se cerrara el formulario.
En el método "GradesCdx()" es en donde se realiza el proceso de generar los archivos í­ndices y de actualizar los Progress, el problema que se me presenta es:
1) También en este método actualizo los Label para mostrar el nombre del archivo que se está generando con ::oLblArchivo:cText := "mi archivo..." y este no se actualiza sino hasta el final, es decir, solo muestra el nombre del último archivo generado.
2) Si se presiona clic en el botón Cancelar o bien en tache rojo para cerrar, éstos no responden hasta que los proceso de generación de archivos ha terminado.
Tienes que poner llamadas a ProcessMessages() dentro del proceso, de forma que el programa pueda procesar los mensajes que genera windows de forma regular. Por otro lado, también tienes que controlar que no se siga ejecutando el proceso cuando el usuario cancela o cierra el formulario; lo más sencillo es verificar que su :Handle no esté vacio. Podrí­a ser algo así­:
METHOD FormShow( oSender ) CLASS TForm1
LOCAL aIndex := { { "Clientes", "Codigo", "Codigo" }, ;
{ "Clientes", "Nombre", "Nombre" }, ;
{ "Articulo", "Codigo", "Codigo" }, ;
{ "Articulo", "Descri", "Descri" }, ;
... }
LOCAL n := 1
WHILE n < Len( aIndex ) .AND. !Empty( ::Handle )
ProcessMessages()
// INDEXAR aIndex[ n, 1 ] POR aIndex[ n, 2 ] TAG aIndex[ n, 3 ]
...
ENDDO
RETURN Nil
--
Un saludo,
José F. Giménez
--
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Israel Solis
Mensajes: 155
Registrado: Mié Nov 03, 2004 12:42 pm
Ubicación: Cancún, México
Contactar:

Formulario para generar indices..

Mensaje por Israel Solis »

Jose:
Mil gracias, funcionó perfecto!!
----
Saludos!!
Israel Solis
Jose F. Gimenez escribió:
> Israel,
>
> Tengo un formulario tipo "bsDIALOG" donde estoy mostrando el
> avance para la generación de archivos í­ndices y lo ejecuto de la
> siguiente manera desde el menú:
>
>
> METHOD MnuMainItem1_3Click( oSender, oMenu ) CLASS tFrmMain
>
> WITH OBJECT TFrmCdx():New() /<--- Creo el objeto del formulario/
> :Show() /<------- Muestro el formulario/
> :GradesCdx() /<--- Proceso que se encarga de la generación de
> los archivos í­ndices/
> END WITH
>
> RETURN Nil
>
> Te aconsejo que uses :ShowModal() en vez de :Show(), para evitar que
> el usuario pueda "tocar" por otro sitio mientras se está ejecutando el
> proceso. Si lo haces así­, en vez de poner la llamada a :GradesCdx()
> ahí­, la tendrás que poner en el evento OnShow del formulario; ten en
> cuenta que con :ShowModal(), la siguiente lí­nea de código no se
> ejecutarí­a hasta que se cerrara el formulario.
>
>
>
> En el método "GradesCdx()" es en donde se realiza el proceso de
> generar los archivos í­ndices y de actualizar los *Progress*, el
> problema que se me presenta es:
>
> 1) También en este método actualizo los *Label *para mostrar el
> nombre del archivo que se está generando con ::oLblArchivo:cText
> := "mi archivo..." y este no se actualiza sino hasta el final, es
> decir, solo muestra el nombre del último archivo generado.
>
> 2) Si se presiona clic en el *botón Cancelar* o bien en tache rojo
> para cerrar, éstos no responden hasta que los proceso de
> generación de archivos ha terminado.
>
> Tienes que poner llamadas a ProcessMessages() dentro del proceso, de
> forma que el programa pueda procesar los mensajes que genera windows
> de forma regular. Por otro lado, también tienes que controlar que no
> se siga ejecutando el proceso cuando el usuario cancela o cierra el
> formulario; lo más sencillo es verificar que su :Handle no esté vacio.
> Podrí­a ser algo así­:
>
> METHOD FormShow( oSender ) CLASS TForm1
>
> LOCAL aIndex := { { "Clientes", "Codigo", "Codigo" }, ;
> { "Clientes", "Nombre", "Nombre" }, ;
> { "Articulo", "Codigo", "Codigo" }, ;
> { "Articulo", "Descri", "Descri" }, ;
> ... }
> LOCAL n := 1
>
> WHILE n < Len( aIndex ) .AND. !Empty( ::Handle )
> ProcessMessages()
> // INDEXAR aIndex[ n, 1 ] POR aIndex[ n, 2 ] TAG aIndex[ n, 3 ]
> ...
> ENDDO
>
> RETURN Nil
>
> --
> Un saludo,
>
> José F. Giménez
--
Saludos :D

Israel
Responder