Barras de desplazamiento (ScrollBar)

El objeto "scrollbar" permite elaborar controles en los que tenga sentido este concepto (la Figura 4-26 muestra un ejemplo de esta variedad), así como otros más complejos (grupos) en los cuales haya que proporcionar un mecanismo de desplazmiento del contenido visible de los mismos en el espacio que para ellos se haya dedicado en una ventana.

Figura 4-26. Aspecto y propiedades de un objeto tipo "scrollbar" (barra de desplazamiento).

Como ejemplo de este objeto y de su utilización, a continuación le muestro cómo he implementado una barra de estado en la que se ofrece una realimentación visual del estado de progreso de una serie de experimentos cuya duración aconsejaba dar muestras de la evolución de la misma y no dejar al usuario con la duda de "en qué punto se encontrará la ejecución del programa". Además lo utilicé como excusa para guardar el estado en cada ronda, de manera que si el programa o el sistema se tenía que reiniciar, se podía reengachar la ejecución del programa desde un punto de sincronismo cercano que evitase repetir toda la secuencia de experimentos desde su inicio. La forma de lo que se expone se puede ver en la Figura 4-27.

Figura 4-27. Ejemplo de barra de desplazamiento incorporada a un elemento del interfaz de una aplicación y utilizada para mostrar una representación gráfica de la evolución de un proceso secuencial.

Y el código que se utiliza es el siguiente:

  1. Comprobar si debe entrar: Iniciar una tanda si no se ha completado el número de estas.

  2. Anunciar con la barra de desplazamiento en modo "progreso" el avance de las tandas: ¿en qué punto estamos?.

  3. Dentro de cada tanda se han de ejecutar un número constante de experimentos: guardar el experimento que se acaba de completar.

global timerID_4

on iteracionsBucleReanudarExperiments parametre sufixe numExperimentsFets numExperiments
  set cursor to busy
    
  # Comprobar si deu entrar
  if (numExperimentsFets > numExperiments)
  then
    put line ((the number of lines of URL( "file:" & fld "directoriDeTreball" & \
        "/" & "llistaTandesFetes.txt")) \
        +1) of URL( "file:" & fld "directoriDeTreball" & "/" & "llistaTandes.txt")  & return \
        after URL( "file:" & fld "directoriDeTreball" & "/" & "llistaTandesFetes.txt")
    send "mouseUp" to button "reanudarTandes" in 10 milliseconds
  else    
    # En quin punt dels experiments estem
    set the thumbPos of scrollBar "barraEstat" of group "grupBarraEstat" to\
            numExperimentsFets
    
    send  ("explorarImatgens" &&\
        quote & (line (numExperimentsFets + 1) of\
        URL( "file:" &  fld "directoriDeTreball" & "/" & "llistaExperiments.txt" )) & quote  & "," &\
        (fld "directoriDeTreball" & "/imatgensNormalitzaes") & "," & \
        (fld "directoriDeTreball" & "/descripcioWavelets") & "," & \
        line ((the number of lines of\
        URL( "file:" & fld "directoriDeTreball" & "/" & "llistaTandesFetes.txt")) \
        + 1) of\
        URL( "file:" & fld "directoriDeTreball" & "/" & "llistaTandes.txt") ) to\
        button  "explorarImatgens"
    
    # Guardar el experiment que has acabat de completar
    put line numExperimentsFets of URL( "file:" &  fld "directoriDeTreball" & "/" & "llistaExperiments.txt" ) \
        & return after URL( "file:" &  fld "directoriDeTreball" & "/" & "llistaExperimentsFets.txt" )
    
    # # Quan acabes digues que llancen un atra tanda
    ## parametre sufixe numExperimentsFets numExperiments
    send ("iteracionsBucleReanudarExperiments" && parametre & "," & sufixe & "," &\
        (numExperimentsFets + 1) & "," & numExperiments)  to me in 10 milliseconds
    put the result into timerID_4
  end if
end iteracionsBucleReanudarExperiments