Trate de correr el programa y experimente con la caja de lista.
Note que la barra de desplazamiento no opera porque aún no tenemos suficientes
ítems en la lista. La barra de desplazamiento se activará automáticamente por
si misma cuando suficientes ítems sean añadidos. El tipo de eventos 'l' solamente
indica que un click o doble-click fue hecho en un ítem de la lista. Para determinar
la selección hecha nuevamente hay que usar CTRL, como se muestra más adelante.
Generalmente, solamente un ítem puede ser seleccionado a la vez.
El nuevo mnemónico 'LISTBOX' tiene la sintaxis que ya
nos es familiar para crear un control. El título es especificado como un string
vacío en este caso debido a que el título no tiene importancia. Cajas de lista
nunca muestran un título. El mnemónico 'LISTADD' puede ser usado para añadir
detalles a una lista. Nuevos ítems son añadidos antes del índice de detalle
especificado en el segundo parámetro. Se necesita un -1 como segundo parámetro
para añadir los nuevos detalles al final de la lista. Existe una "forma
larga" para el mnemónico 'LISTADD', para evitar colocar lotes de ítems
en el parámetro de lista del mnemónico (que son de tamaño limitado). Este es
un ejemplo de la forma larga:
0041 PRINT (1)'LISTADD'(101,-1,4),
0042 WRITE (1)"John","Paul","George","Ringo"
No olvide la coma al final de la línea 41. Esta es importante
debido a que la forma larga de 'LISTADD' prepara el canal para recibir un número
de ítems (4 en este caso) escritos luego directamente al canal. Estos ítems
tienen cada uno un 'linefeed' como terminador de campo. Si la línea 41 no es
finalizada con una coma, un 'linefeed' es enviado al canal inmediatamente después
de la sentencia 'LISTADD', lo que causará que los primeros 4 ítems de la lista
sean blancos.
¡SUGERENCIA! Observe también en línea 42 el uso de WRITE en
lugar del PRINT. El WRITE inserta un 'linefeed' después de cada ítem escrito,
que justamente es lo qué deseamos en este caso. Utilizaremos de nuevo este truco
con controles de barras de desplazamiento, y nuevamente con menús, posteriormente.
Ahora vamos a cambiar el programa de modo que la caja de lista
permitirá selecciones múltiples. Esto es fácil... solamente debemos cambiar
la línea 40 agregando la bandera para "selecciones múltiples".
0040 PRINT (1)'LISTBOX'(101,10,10,80,80,"",$0400$)
Córralo de nuevo, y verá que con Ctrl-click
se seleccionarán y des-seleccionarán ítems individuales, y también verá que
Shif-click puede ser usado para seleccionar rangos.
En este ejemplo, ningún ítem es seleccionado inicialmente, pero
podemos lograrlo con el mnemónico 'LISTSEL', el cual selecciona algunos ítems
en una lista y automáticamente des-selecciona todos los otros. Vamos a añadirlo
al programa.
0045 PRINT (1)'LISTSEL'(101,1)
La línea anterior provocará que el ítem "Paul" (segundo)
sea seleccionado. La lista de índices está basada en cero.
Hay un grupo adicional de otros mnemónicos
especiales para manipulación de los controles de tipos de lista. Corra el programa
e interrúmpalo para experimentar con estos en modo inmediato. Recuerde que para
volver a visualizar la ventana gráfica puede dar <Alt>+<Tab>.
PRINT (1)'LISTDEL'(101,0)
Esto elimina un ítem de la lista. El índice
0 es el que corresponde al primer ítem en la lista. Usted puede experimentar
eliminando otros ítems.
PRINT (1)'LISTUNSEL'(101,1)
El mnemónico 'LISTUNSEL' des-selecciona algunos ítems de la
lista. En el ejemplo anterior, el segundo ítem de la lista no es seleccionado.
Inténtelo seleccionando con el ratón, y luego des-selecciónelo con esta declaración
de programa.
PRINT (1)'LISTMSEL'(101,0)
El mnemónico 'LISTMSEL' es para ser usado con cajas de lista
que permitan selecciones múltiples. 'LISTSEL', como usted recordará, selecciona
un ítem y des-selecciona todos los demás. 'LISTMSEL' le permite seleccionar
un ítem y le deja los que ya estuvieran seleccionados también activos. Naturalmente,
estos solo trabajan con cajas de lista que permiten selecciones múltiples. Este
ejemplo selecciona el primer ítem en una lista, dejando todos los demás ítems
solos.
PRINT (1)'LISTADD'(101,0,"Peter")
Usted puede añadir ítems a una lista que ya contenga algunos.
Este ejemplo añade "Peter" como el nuevo primer ítem en la lista,
corriendo los otros ítems hacia abajo un espacio.
PRINT (1)'LISTCLR'(101)
|