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.

Completar barra de progreso en Windows Vista.

Foro de Xailer profesional en español
Responder
jrcpoli
Mensajes: 240
Registrado: Mié Oct 25, 2006 8:55 pm

Completar barra de progreso en Windows Vista.

Mensaje por jrcpoli »

Saludos:
Como es sabido cuando trabajamos con Windows Vista la barra de progreso
no se completa y esto hace que algunos de los clientes sospechen que no se
ha terminado la tarea completamente y esto se acentua mas cuando ponemos un
contador que presenta el tanto por ciento que se ha completado, en cierta
ocasión hablando con José F. Gimenez me dijo que quizás la solución
estubiera en poner un Ttimer que hiciera que se relentizara.
Y esta es mi pregunta, ¿alguno ha conseguido que la barra de progreso
llegue al final antes del que el formulario se cierre?, si es así­ le
importarí­a poner un ejemplo o una explicación de como hacerlo.
Yo necesito que la barra llegue al final antes de que se cierre el
formulario en este pequeño ejemplo de codigo, que se ejecuta antes de
empezar el programa para comprobar que todas las bases existen así­ como sus
indices y sino existe alguna o su indice es incorrecto lo genera de nuevo,
por eso cuando termina cierra el formulario que solo contiene una barra de
progreso y un label que va indicando el tanto por ciento realizado.
** Recorrer la base de datos de DBNOMBRES
WITH OBJECT ::oDSNombres := TDbfDataSet():Create()
IF (:lOpen == .T.)
:lOpen := .F.
ENDIF
*
:cName := "DBNOMBRE.DBF"
:lShared := .F.
:oDataSource := ::oDataSource
*
IF (:lOpen := .T.)
:OrdSetFocus("DBNOMBRE")
::oProgressBar1:nMax := :RecCount()
n := 0
nTanto := 0
::oLabel2:cText := Str(nTanto,3,0) + "%"
DO WHILE !:Eof()
n++
*
** Comprobamos que existe el directorio
cDirBases := cDirAplicacion + Alltrim(:DIRECTORIO)
IF (nResultado := DIRCHANGE( cDirBases )) != 0
*
IF nResultado = 2
*
IF (nResultado := DIRMAKE( cDirBases )) != 0
*
MsgStop("No se puede crear el directorio." + cDirBases
+ ;
", NO SE PUEDE EJECUTAR LA APLICACION.",
AppData:gCaption)
::OpcionOK := .F.
::oForm:Close(.T.)
RETURN Nil
*
ENDIF
ENDIF
*
ENDIF
*
** Comprobamos que existe la base de datos sino la crea
cDirBases := cDirAplicacion + Alltrim(:Directorio) + ""
IF !FILE(cDirBases + Alltrim(:NOMBRE_DBF) + ".DBF")
*
** Crear base de datos
bases_dbf := ALLTRIM(:NOMBRE_DBF)
::Crear_dbf(bases_dbf, cDirBases)
*
ENDIF
*
** Crear indices
bases_dbf := ALLTRIM(:NOMBRE_DBF)
::Crear_ind(bases_dbf, cDirBases)
*
** Hacer avanzar el ProgressBar
::oProgressBar1:nValue := n
nTanto := INT(n * 100 / :RecCount())
::oLabel2:cText := Str(nTanto,3,0) + "%"
ProcessMessages()
*
** Avanzar un registro
:Skip()
*
END DO
ENDIF
:End()
END
*
** Cierra las base de datos
CierraForm()
*
** Cierra el Formulario
::oForm:Close(.T.)
*
Gracias.
José Ramón Castro.
José Ramón Castro.
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Completar barra de progreso en Windows Vista.

Mensaje por jfgimenez »

José Ramón,
el problema de las progressbar en Vista, es que windows no hace caso del
valor que se le asigna, y él por su cuenta utiliza un timer para ir
incrementando la barra a su aire. Por eso, cuando tú le asignas el 100%, él
todavía va por donde le venga en gana. La única forma que he encontrado de
forzarlo a mostrar la barra al 100%, es cambiar el límite a 1 y el valor
también a 1. P.ej.:
::oProgressBar1:nMax := 1
::oProgressBar1:nValue := 1
No obstante, se verá un salto de la barra desde el punto donde estuviera,
hasta 100% de golpe.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Responder