Informatica Grafica
C A P I T U L O13 Botones y Menús

Button, checkbutton y radiobutton

Existen tres diferentes clases de botones a parte del botón propio de los menús (el menubutton): el button, el checkbutton y el radiobutton. El primero, el button, es el ya conocido gracias al ejemplo del capítulo 10 de "Hola Mundo"; es el más clásico, y básicamente sirve para hacer una llamada a un comando para que se ejecute.

El segundo, el checkbutton, es un botón que puede tener dos estados: activado o desactivado; según sea su estado, una variable asociada tomará el valor 1 o 0; además también puede hacer llamadas a un comando en el momento de pulsarse.

El tercero, el similar al anterior, también posee dos estados posibles, pero la diferencia con este, radica en que los radiobutton aparecen siempre en grupos, de tal manera que sólo uno de cada grupo puede estar activado. Recibe su nombre de los botones de las antiguas radios para coches, en los que al pulsar un botón de sintonía, el anterior saltaba. Al igual que el checkbutton, también tienen una variable asociada para todo el grupo, de forma que tome el valor del radiobutton que esté activo en cada momento.

Button

La forma básica de crear un button es la siguiente:

button .b1 -text Boton1 -command "destroy ." -relief raised

Se ha creado un botón con el texto "Boton1", de relieve elevado, y que en caso de ser pulsado, destruirá su ventana.

Es frecuente que aparezca un número elevado de botones en una ventana, con la gran cantidad de líneas de código que esto conlleva. Una forma rápida y elegante de generar un buen número de botones sin excesivo código consiste en crear una lista con los textos de cada botón y otra con los comandos a ejecutar cada uno de ellos. A continuación, mediante el comando foreach o mediante un bucle for, se recorrerá la lista tomando el texto y el comando correspondiente y creando el botón.

El siguiente ejemplo implementa lo anteriormente explicado para crear una barra de tareas similar a la barra flotante de Microsoft Office.

Ejemplo 13-1
# Se coloca la ventana en la pantalla.
wm geometry . +190+210<
# Se coloca el t¡tulo en la
wm title . "Barra de Tareas"
# Toma el foco
focus .
# Se crean las imagenes.
image create photo bot_msdos -file [file join c:/1/msdos.gif]
image create photo bot_word -file [file join c:/1/word.gif]
image create photo bot_mina -file [file join c:/1/mina.gif]
image create photo bot_paint -file [file join c:/1/paint.gif]
image create photo bot_bloc -file [file join c:/1/bloc.gif]
# Se crea la lista de imagenes.
lappend Imagenes "bot_bloc" "bot_msdos" "bot_mina" "bot_paint" "bot_word"
# Se crea la lista de comandos.
lappend comandos "c:/windows/notepad.exe" \
"c:/windows/txtpad" \
"c:/windows/winmine.exe" \
"c:/windows/pbrush.exe" \
"c:/winword/winword.exe"
set i 0
foreach imagen $Imagenes {
button .b$i -image $imagen \
-command "exec [lindex $comandos $i]" pack .b$i -side left
incr i 1 }

En este ejemplo, y para hacer esta barra más parecida a la barra de Office, se colocan sobre los botones iconos y no texto. Para ello se parte de iconos en formato .GIF, que es el único que Tk acepta junto al .PPM y al .XBM, y se crean unas imágenes mediante el comando image create. De haberlo hecho con texto, hubiera sido exactamante igual.

El resultado es este:

Esta barra permitirá llamar, gracias al comando exec, al bloc de notas, a una ventana de MS-DOS, al Buscaminas, al Paint y al Word.


Radiobutton

Como ya se ha explicado anteriormente, estos botones, por su naturaleza, van agrupados, de manera que un sólo miembro de cada grupo puede estar activo en un momento dado. Al pulsar sobre otro del mismo grupo, el anterior deja de estar seleccionado. La característica común entre los radiobutton que forman un grupo es la variable; es decir, los radiobotones de un mismo grupo tienen la misma variable, que tomará un valor distinto según cuál sea el radiobutton activo. El nombre de la variable se especifica con la opcion -variable, y su valor con la opcion -value.

Así, para crear dos radiobotones para seleccionar entre el color rojo y el azul, sería:

radiobutton .rb1 -text Rojo -variable color -value rojo
radiobutton .rb2 -text azul -variable color -value azul

Es una buena política aprovecharse de que en Tcl/Tk el valor de una variable puede ser casi cualquier cosa, y tomar como valor de la variable algo que pueda ser utilizado posteriormente.

Por ejemplo, en el caso anterior si se selecciona el color rojo la variable color tomará, lógicamente, el valor rojo; pero si después se desea hacer algo con este valor, como por ejemplo dibujar un círculo rojo, no se podría ya, que Tk entiende como color rojo red y no rojo. Hubiera sido mucho mejor haber tomado como valor red y blue. Esto que en este caso parece evidente, en otros ca no lo es tanto, siendo conveniente pensar bien el valor a tomar por la variable.

En el siguiente ejemplo se muestra una ventana con radiobuttons para la selección de la configuración de un PC.

Ejemplo 13-2.
# Se coloca la ventana en la pantalla.
wm geometry . +190+210
# Se coloca el t¡tulo en la ventana.<
wm title . "Configuracion de PCs"
# Toma el foco
focus .
lappend Micros "Pentium 120MHz" "Pentium 133MHz" "Pentium 166MHz" \
"Pentium 200MHz" "Pentium Pro 200MHz" "Pentium MMX 200MHz"
lappend Rams "8Mb" "16Mb" "32Mb" "64Mb"
lappend Discos "1Gb" "1.2Gb" "1.6Mb" "2Mb"
lappend Monitores "14''" "15''" "17''" "20''"
lappend CDs "4x" "8x" "12x" "16x"
# Se inicializan los radiobotones.
set micro "Pentium 133MHz"
set ram "16Mb"
set cd "8x"
set monitor "15''"
set disco "1Gb"
# Crea la frame principal.
frame .princ -bd 2 -relief groove
pack .princ -side top -padx 2m -pady 2m
# Crea la frame para los botones del microprocesador.
frame .princ.micro -bd 2 -relief groove
pack .princ.micro -side left -padx 2m -pady 2m
# Crea la etiqueta para colocar el nombre de cada elemento sobre sus
# botones.
label .princ.micro.l1 -text "MICROPROCESADOR"
pack .princ.micro.l1 -side top
# Crea los radiobotones para los tipos de microprocesadores.
set i 1
foreach un_micro $Micros {
radiobutton .princ.micro.b$i -text $un_micro \
-variable micro \
-value $un_micro
pack .princ.micro.b$i -side top -anchor w incr i 1
}
# Se crea una frame para agrupar al resto de elementos.
frame .princ.ele
pack .princ.ele -side left -anchor n
# Se crea una frame para agrupar el restod e frames hacia arriba.
frame .princ.ele.arriba
pack .princ.ele.arriba -side top
# Crea la frame para los botones de la RAM.
frame .princ.ele.arriba.ram -bd 2 -relief groove
pack .princ.ele.arriba.ram -side left -padx 2m -pady 2m -anchor n
label .princ.ele.arriba.ram.l1 -text "MEMORIA RAM"
pack .princ.ele.arriba.ram.l1 -side top -padx 2m
# Crea los radiobotones para los tipos de microprocesadores.
set i 1
foreach una_ram $Rams {
radiobutton .princ.ele.arriba.ram.b$i -text $una_ram \
-variable ram \
-value $una_ram
pack .princ.ele.arriba.ram.b$i -side top -anchor w
incr i 1
}
# Crea la frame para los botones del lector de CD-Rom.
frame .princ.ele.arriba.hd -bd 2 -relief groove
pack .princ.ele.arriba.hd -side left -padx 2m -pady 2m -anchor n
label .princ.ele.arriba.hd.l1 -text "DISCO DURO"
pack .princ.ele.arriba.hd.l1 -side top -padx 2m
# Crea los radiobotones para el lector de CD-Rom.
set i 1
foreach un_Hd $Discos {
radiobutton .princ.ele.arriba.hd.b$i -text $un_Hd \
-variable disco \
-value $un_Hd
pack .princ.ele.arriba.hd.b$i -side top -anchor w
incr i 1
}
# Crea la frame para los botones del lector de CD-Rom.
frame .princ.ele.arriba.cd -bd 2 -relief groove
pack .princ.ele.arriba.cd -side left -padx 2m -pady 2m -anchor n
label .princ.ele.arriba.cd.l1 -text "CD-ROM"
pack .princ.ele.arriba.cd.l1 -side top -padx 2m
# Crea los radiobotones para el lector de CD-Rom.
set i 1
foreach un_cd $CDs {
radiobutton .princ.ele.arriba.cd.b$i -text $un_cd \
-variable cd \
-value $un_cd
pack .princ.ele.arriba.cd.b$i -side top -anchor w
incr i 1
}
# Crea la frame para los botones del monitor.
frame .princ.ele.arriba.mon -bd 2 -relief groove
pack .princ.ele.arriba.mon -side left -padx 2m -pady 2m -anchor n
label .princ.ele.arriba.mon.l1 -text "MONITOR"
pack .princ.ele.arriba.mon.l1 -side top -padx 2m
# Crea los radiobotones para el tipo de monitor.
set i 1
foreach un_monitor $Monitores {
radiobutton .princ.ele.arriba.mon.b$i -text $un_monitor \
-variable monitor \
-value $un_monitor
pack .princ.ele.arriba.mon.b$i -side top -anchor w
incr i 1
}
frame .princ.ele.bot -bd 2 -relief groove
pack .princ.ele.bot -side bottom -padx 2m -pady 1m -expand true -fill x
button .princ.ele.bot.b1 -text "Cancelar" \
-command "destroy ."
button .princ.ele.bot.b2 -text "Aceptar" \
-command ""
pack .princ.ele.bot.b1 -side left -padx 10m
pack .princ.ele.bot.b2 -side right -padx 10m

En este ejemplo, puede verse que existe un gran número de frames, algunas de ellas necesarias y otras no. Se ha hecho así para colocar de una forma estática los radiobuttons, y para debujar un cierto reborde alrededor de los grupos de radiobotones.

El resultado puede verse aquí:

También se podrá ver en el código la utilización de la opcion -anchor w en el pack de cada radiobutton.Esto es así para que cada radiobutton se apile hacia la izquierda ( w, west, oeste). De no haberlo utilizado, el resultado hubiera sido este:

También se ha utilizado el widget label (etiqueta), que permite insertar un texto. Este widget es de muy fácil utilización y será tratado con profundidad en en el capítulo siguiente.


Checkbutton

El checkbutton es similar al radiobutton visto anteriormente, pero se diferencia de él en que cada checkbutton es independiente de cualquier otro, pudiendo estar varios cativos a la vez.

Cada checkbutton posee una variable distinta al resto de checkbuttons, y será esta la que tome el valor 1 (por defecto, pero puede ser cambiado) si estuviera activo, o 0 (por defecto) si estuviera inactivo.

La forma de crear un checkbutton sería:

checkbutton -text Chack1 -variable var1 -relief flat

Ejemplo 13-3
lappend Programas1 "MS-DOS" "MS-DOS+MicroSoft Windows 3.11" \
"MicroSoft Windows 95"
lappend Programas2 "MicroSoft Works 4.0" "MicroSoft Word 6.0" \
"MicroSoft Word 7.0"
lappend Programas3 "MicroSoft Office 97" "MicroSoft Visual Basic 4.0" \
"MicroSoft Visual C++ 4.1"
.
.
.
# Crea los botones de chequeo para el software.
# Crea la frame que los va a contener
frame .soft -relief groove -bd 2
pack .soft -side bottom -padx 2m -fill x -expand true
# Crea una frame para colocarla a la izquierda.
frame .soft.izq
pack .soft.izq -side left -anchor w
# Una para el centro.
frame .soft.cent
pack .soft.cent -side left -padx 5m -anchor w
# Otra a la izquierda.
frame .soft.der
pack .soft.der -side right
# Crea los checkbuttons.
set i 1
foreach un_programa $Programas1 {
checkbutton .soft.izq.b$i -text $un_programa -variable programa1$i
pack .soft.izq.b$i -side top -anchor w
incr i 1
}
set i 1
foreach un_programa $Programas2 {
checkbutton .soft.cent.b$i -text $un_programa -variable programa2$i
pack .soft.cent.b$i -side top -anchor w
incr i 1
}
set i 1
foreach un_programa $Programas3 {
checkbutton .soft.der.b$i -text $un_programa -variable programa3$i
pack .soft.der.b$i -side top -anchor w
incr i 1
}<

Este ejemplo, aparte de algunas pequeñas modificaciones para derle un aspecto más estético, es una continuación del ejemplo de los radiobuttons, al que se le ha añadido unos checkbuttons para seleccionar el software. El resultado es este:

Opciones de los botones

Las opciones posibles para un botón son las siguientes:


Tabla 13-1. Opciones de los botones.

activebackground

Color del botón cuando el ratón está sobre él.

activeforeground

Color del texto del botón cuando el ratón está sobre este.

background

Color del botón. Se puede abreviar a bg.

borderwidth

Ancho del borde. Se puede abreviar a bd.

command

Comando a ejecutar por el botón ( button, radiobutton o ckeckbutton.

font

Fuente para el texto del botón.

foreground

Color del texto del botón.

height

Alto del botón en caracteres.

highlightcolor

Color del borde que lo rodea cuando tiene el foco.

image

Imagen a colocar sobre el botón.

menu

Menú que aparece cuando el botón es pulsado (menubutton)

offvalue

Valor de la variable de un checkbuton desactivado.

onvalue

Valor de la variable de un checkbutton activado.

relief

Relieve del botón ( flat, groove, raised, sunken o ridge)

state

normal (activable), o disabled (desactivado)

text

Texto del botón.

textvariable

Variable de un botón.

underline

Caracter que va a aparecer subrayado en un menú.

value

Valor que tomará la variable.

variable

Variable asociada a un botón.

width

Ancho de un botón en caracteres o en pixels (para imágenes)




Operaciones con los botones

Las operaciones que es posible realizar con los botones son las siguientes, donde $w es el nombre del botón.

Tabla 13-2. Operaciones con botones.

$w cget opcion

Devuelve los valores del atributo especificado.

$w configure ?opcion? ?valor?

Configura el botón con el valor dado por valor para la opcion.

$w flash

Redibuja el botón varias veces en colores alternados.

$w invoke

Invoca la acción asociada con el botón $w.




Menus

Como ya se comentó en la introducción de este trabajo, la version 8.0 proporciona una nueva forma, algo más simple, de crear menús. Hasta este momento los menús eran uno de los widgets más liosos, enrevesados y poco claros de Tk. Con la nueva versión se ha mejorado algo, pero aún siguen teniendo un código bastante confuso. Se va a hacer el mismo menú al estilo de la versión 7.6 y anteriores , y al estilo de la 8.0, para poder comparar las diferencias entre ambos.

La forma de cear un menú es la siguiente: primeramente se declara el menú como widget menu. A continuación, se crean cada uno de los items de la barra superior como cascade con el comando add. La palabra clave cascade indicará que pulsando sobre él se desplegará un menú. El siguiente paso consistirá en crear cada uno de los items de cada menú desplegable. estos items podrán ser comandos, botones de chequeo, botones de radio o separadores. Todos ellos se añadirán al menú mediante el comando add. Si se desean crear submenús, deberán crearse estos como cascade en lugar de comandos, checkbuttons o radiobuttons. No existe límite en el número de niveles de anidamiento de menús.El último paso consistirá en insertar el menú en la ventana con el comando configure.

Con el siguiente ejemplo se creará un menú que contiene todos los casos que se puedan presentar durante la creación de un menú.

Ejemplo 13-4
set w .menu
catch {destroy $w}
toplevel $w
wm title $w "Menu al estilo nuevo"
wm geometry $w 300x50
# Se declara el menu.
menu $w.menu -tearoff 0
# Se crea el primer item de la barra de menús.
set m $w.menu.fichero
menu $m -tearoff 0
$w.menu add cascade -label "Fichero" -menu $m -underline 0
$m add command -label "Nuevo ..." -command {} -underline 0
$m add command -label "Abrir" -command {} -underline 0
$m add command -label "Guardar" -command {} -underline 1
$m add command -label "Guardar como" -command {} -underline 0
$m add separator
$m add command -label "Preparar página ..." -command {}
$m add command -label "Imprimir ..." -command {}
$m add separator
$m add command -label "Salir" -command "destroy $w"
set m $w.menu.edicion
menu $m -tearoff 0
$w.menu add cascade -label "Edición" -menu $m -underline 0
$m add command -label "Cortar" -command {} -accelerator CTRL+Z -underline 3
$m add command -label "Copiar" -command {} -accelerator CTRL+V -underline 0
$m add command -label "Pegar" -command {} -accelerator CTRL+X -underline 0
$m add command -label "Eliminar" -command {} -accelerator SUPR -underline 0
$m add separator
$m add command -label "Seleccionar todo" -command {} -accelerator F5 -underline 0
$m add command -label "Hora/Fecha" -command {} -underline 0
$m add separator
$m add command -label "Ajuste de línea" -command "destroy $w"
# Es necesario asignar binds a los menus que tienen acelerador...
bind $w <Control-z> {puts "Se ha pulsado CTRL+Z"}
bind $w <Control-v> {puts "Se ha pulsado CTRL+V"}
bind $w <Control-x> {puts "Se ha pulsado CTRL+X"}
set m $w.menu.cascade
$w.menu add cascade -label "Cascadas" -menu $m -underline 0
menu $m -tearoff 0
$m add cascade -label "Botones de checkeo" \
-menu $w.menu.cascade.check -underline 0
$m add cascade -label "Botones de radio" \
-menu $w.menu.cascade.radio -underline 0
set m $w.menu.cascade.check
menu $m -tearoff 0
$m add check -label "Chequeo del aceite" -variable oil
$m add check -label "Checkeo de la transmisión" -variable trans
$m add check -label "Chequeo de los frenos" -variable brakes
$m add check -label "Chequeo de luces" -variable lights
# Inicializa la 1 y la 3
$m invoke 1
$m invoke 3
set m $w.menu.cascade.radio
menu $m -tearoff 0
$m add radio -label "10" -variable pointSize -value 10
$m add radio -label "14" -variable pointSize -value 14
$m add radio -label "18" -variable pointSize -value 18
$m add radio -label "24" -variable pointSize -value 24
$m add radio -label "32" -variable pointSize -value 32
$m add sep
$m add radio -label "Roman" -variable style -value roman
$m add radio -label "Bold" -variable style -value bold
$m add radio -label "Italic" -variable style -value italic
# Inicializa la 1 y la 7
$m invoke 1
$m invoke 7
$w configure -menu $w.menu

El resultado obtenido es el siguiente:

El aspecto que presentan los menús al ser desplegados es este:

En el menú desplegable anterior se insertaron dis separadores. En el siguiente se van a añadir los denominados aceleradores, es decir, combinaciones de teclas que ejecutan lo mismo que el teclado, aunque este no está desplegado.

Es importante hacer notar que la inserción de los aceleradores es automática si se utiliza la opción del widget menu -accelerator. Pero esto no es suficiente para que funcione, ya que deben de añadirse los bind que permitan que al pulsar cierta combinación de teclas ocurra algo.

En el siguiente menú se insertaron dos menú desplegables en cascada, los cuales a su vez contienen radiobotones y botones de chequeo. En el caso de los radiobotones, son dos grupos de ellos totalmente idenpendientes entre sí.

El menú con botones de chequeo:

El menú con los dos grupos de botones de radio

Estos menús poseen una opción, -tearoff, que en caso de no estar a 0 permite convertir un menú en menú flotante con el sólo hecho de pulsar sobre una línea discontínua que presentarán en este caso. En el menú de ejemplo anterior no se deseaba esto y por ello se optó por poner esta opción a 0. De no haberlo hecho el resultado sería este:

Puede verse la línea discontínua en la que hay que pinchar con el cursor para convertir este menú en flotante.

Este es el aspecto una vez convertido el menú anterior en menú flotante. Hay que tener en cuenta que no es necesario que todos los menús tengan esta opción a 0 o con un valor distinto de cero; cada menú es independiente, en este aspecto, del resto.

La versión 8.0 es compatible con el estilo antiguo de los menús. Este estilo obligaba a declarar una frame donde iba a ser insertado el menú. La nueva versión presenta mejoras en cuanto a facilidad y legibilidad del código, pero también en otro apartado, como es el del aspecto nativo.

Su aspecto es mucho más "Windows", especialmente porque permite que al pasar sobre los destintos items del menú con el ratón estos se desplieguen de forma automática, cosa que no ocurría con la versión anterior, y que es una característica de Windows 95.

Para el que desee hacer los menús al estilo antiguo (compatibles con las versiones de Tcl/Tk para UNIX), aquí está el código del ejemplo anterior escrito al estilo antiguo.

Ejemplo 13-5.
set w .menu
catch {destroy $w}
toplevel $w
wm title $w "Menú al estilo antiguo"
wm geometry $w 300x50
# Es necesario crear una frame para el menu.
frame $w.menu
pack $w.menu -side top -fill x -expand true
set m $w.menu.file.m
menubutton $w.menu.file -text "Fichero" -menu $m -underline 0
menu $m -tearoff 0
$m add command -label "Nuevo ..." -command {} -underline 0
$m add command -label "Abrir" -command {} -underline 0
$m add command -label "Guardar" -command {} -underline 1
$m add command -label "Guardar como" -command {} -underline 0
$m add separator
$m add command -label "Preparar página ..." -command {}
$m add command -label "Imprimir ..." -command {}
$m add separator
$m add command -label "Salir" -command "destroy $w"
set m $w.menu.basic.m
menubutton $w.menu.basic -text "Edición" -menu $m -underline 0
menu $m -tearoff 0
$m add command -label "Cortar" -command {} -accelerator CTRL+Z -underline 3
$m add command -label "Copiar" -command {} -accelerator CTRL+V -underline 0
$m add command -label "Pegar" -command {} -accelerator CTRL+X -underline 0
$m add command -label "Eliminar" -command {} -accelerator SUPR -underline 0
$m add separator
$m add command -label "Seleccionar todo" -command {} -accelerator F5 -underline 0
$m add command -label "Hora/Fecha" -command {} -underline 0
$m add separator
$m add command -label "Ajuste de línea" -command "destroy $w"
# Es necesario asignar binds a los menus que tienen acelerador...
bind $w <Control-z> {puts "Se ha pulsado CTRL+Z"}
bind $w <Control-v> {puts "Se ha pulsado CTRL+V"}
bind $w <Control-x> {puts "Se ha pulsado CTRL+X"}
set m $w.menu.cascade.m
menubutton $w.menu.cascade -text "Cascadas" -menu $m -underline 0
menu $m -tearoff 0
$m add cascade -label "Botones de checkeo" -menu $w.menu.cascade.m.check \
-underline 0
$m add cascade -label "Botones de radio" -menu $w.menu.cascade.m.radio \
-underline 0
set m $w.menu.cascade.m.check
menu $m -tearoff 0
$m add check -label "Chequeo del aceite" -variable oil
$m add check -label "Checkeo de la transmisión" -variable trans
$m add check -label "Chequeo de los frenos" -variable brakes
$m add check -label "Chequeo de luces" -variable lights
# Inicializa la 1 y la 3
$m invoke 1
$m invoke 3
set m $w.menu.cascade.m.radio
menu $m -tearoff 0
$m add radio -label "10" -variable pointSize -value 10
$m add radio -label "14" -variable pointSize -value 14
$m add radio -label "18" -variable pointSize -value 18
$m add radio -label "24" -variable pointSize -value 24
$m add radio -label "32" -variable pointSize -value 32
$m add sep
$m add radio -label "Roman" -variable style -value roman
$m add radio -label "Bold" -variable style -value bold
$m add radio -label "Italic" -variable style -value italic
# Inicializa la 1 y la 7
$m invoke 1
$m invoke 7
# En esta versión es necesario hacer el pack.
pack $w.menu.file $w.menu.basic $w.menu.cascade -side left -anchor w

Tabla 13-3. Indices de los menús.

index

Indice numérico a partir de 0.

active

El item activado porque está sobre él el ratón.

last

El último item del menú.

none

Ninguno.

ycoord

El item bajo las coordenadas Y dadas.

pattern

Una cadena que se utiliza para buscar un nombre del menú que coincida con este patrón.

Tabla 13-4. Operaciones con los menús.

$w active indice

Ilumina el item especificado.

$w add tipo ?opcion? ?valor? ...

Añade un nuevo item del tipo dado y con las opciones dadas.

$w cget opcion

Devuelve los valores del atributo especificado.

$w configure ?opcion? ?valor?

Configura el botón con el valor dado por valor para la opcion.

$w delete i1 ? i2 ?

Borra los menus desde el índice i1 hasta el í2.

$w entrycget indice opcion

Devuelve el valor de la opción del menú especificado por indice.

$w entryconfigure indice ?opcion? ?valor?

Configura un item del menú con los valores dados para las opciones.

$w index indice

Devuleve el índice numérico para indice.

$w post x y

Presenta el menú en pantalla en X e Y.

$w type indice

Devuelve el tipo de item de indice.

$w unpost

Elimina el menú de la pantalla.

$w yposition index

Devuelve la posición Y de la parte superior del item del menú..

Tabla 13-6. Atributos más comunes de los menús.

index

Indice numérico a partir de 0.

active

El item activado porque está sobre él el ratón.

last

El último item del menú.

none

Ninguno.

ycoord

El item bajo las coordenadas Y dadas.

pattern

Una cadena que se utiliza para buscar un nombre del menú que coincida con este patrón.


Previous Page Next Page


© 1995-98, etsimo WWW team
Última modificación: 19 de Agosto de 1998 - 17:47:37