none
Barra de progreso y acciones Access 2003 RRS feed

  • Pregunta

  • Hola:

    Estoy realizando ciertas mejoras a mi aplicación y una de ellas es incluir barras de progreso en ciertas partes de la aplicacion para que resulte más "bonito"

    Sé como hacer una barra de progreso, simplemente cambiando el ancho de un textbox. Lo que quiero hacer ahora es algo más profesional.Tengo una barra de progreso en la que tengo que realizar varias tareas. Por ejemplo:

    tarea 1: de 1 a 30%

    tarea2: de 31 a 65%

    tarea3: de 66 a 100%

    Lo que quiero conseguir es que la barra de progreso avance lentamente desde 1 al 30% en lo que se está ejecutando la tarea1. Si la tarea acaba antes, se ejecuta hasta el 30 más rapido, y si acaba mas tarde se queda en 30%.

    No se como implementarlo exactamanete, pues no sé si es algo "multihilo" y se puede hacer en vba o si se puede hacer con DoEvents

    Alguien ha echo algo parecido?

    viernes, 24 de septiembre de 2010 17:27

Todas las respuestas

  • Esa barra debe ir creciendo en la medida que la tarea se realiza. Si estás realizando operaciones con registros, toma cuantos registros se van a recorrer (si el ancho máximo de la barra de es 4000 y tengo 250 registros, cada registro incrementa 16 unidades mi rectangulo).

    Aplica lo mismo para la siguiente 'etapa', inclusive le puedes cambiar el color a la barra para que el efecto sea mejor.

    Voy a desarrollar un mini ejemplo, ya que este tema es solicitado regularmente y nadie cuelga un ejemplo.

    domingo, 26 de septiembre de 2010 12:57
  • Coloca en un formulario un rectángulo con fondo=normal, de nombre cuadro0. Agrega una etiqueta llamada lbl, para ver el progreso porcentual.

    El llamado a Sleep es en caso de que los registros son pocos, retardarlo para poder ver el efecto. Podrías crear dinámicamente el retardo (sleep 50 0 100) dependiendo de la cantidad de registros encontrados.

    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

    Private Sub Form_Open(Cancel As Integer)
    Dim rst As New ADODB.Recordset, cuantos As Long, crece As Single, vueltas As Integer
    rst.Open "SELECT codigo from clientes", CurrentProject.Connection, 1, 2
    rst.MoveLast: rst.MoveFirst
    cuantos = rst.RecordCount
    crece = 5000 / cuantos

    vueltas = 0

    Do Until rst.EOF    Sleep 50

    Cuadro0.Width = Cuadro0.Width + crece
        lbl.Caption = Round(vueltas * 100 / cuantos) & " %"
            If vueltas > cuantos * 0.7 Then
                Cuadro0.BackColor = RGB(255, 0, 0)
            End If
        Me.Repaint
        vueltas = vueltas + 1
        rst.MoveNext
    Loop
    rst.Close
    Set rst = Nothing
    End Sub

    domingo, 26 de septiembre de 2010 13:18
  • Hola

    También podrías usar el control Progressbar. Aunque es de VB, lo puedes usar sin problemas en Access.

    Sí no lo encuentras, lo tienes disponible en http://tinyurl.com/2cfz945, y en http://tinyurl.com/27hejcq tienes ejemplos de su uso.

    Salu2,


    José Mª Fueyo [MS MVP Access]
    lunes, 27 de septiembre de 2010 15:40