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
--
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.
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..
-
- Mensajes: 155
- Registrado: Mié Nov 03, 2004 12:42 pm
- Ubicación: Cancún, México
- Contactar:
Formulario para generar indices..
Saludos
Israel
Israel
Formulario para generar indices..
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
--
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
--
-
- Mensajes: 155
- Registrado: Mié Nov 03, 2004 12:42 pm
- Ubicación: Cancún, México
- Contactar:
Formulario para generar indices..
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
--
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
Israel
Israel