Page 1 of 1
como marcar lineas en un LISTBOX
Posted: Mon Oct 30, 2006 5:00 pm
by Elias Torres
Hola a todos....
Esta vez me encuentro con que necesito marcar o resaltar cada linea que toco de un listbox. La verdad es que no se como hacerlo. Imagino que cogiendo el recno() de la linea y luego no se como decirle que esa linea me la pinte de un color....
Alguien me puede indicar el camino...
Saludos y gracias
Elías Torres.
Posted: Mon Oct 30, 2006 6:36 pm
by Antonio Linares
Elias,
Añade un nuevo campo lógico (lSelect) a la DBF. Cuando el usuario seleccione ese registro, cambias el valor a .t.. Y usas el siguiente codeblock para el color:
oBrowse:nClrPane := { || If( Tabla->lSelect, COLOR_<uno>, COLOR_<otro> ) }
Posted: Thu Nov 02, 2006 6:04 pm
by Elias Torres
Gracias Antonio por la ayuda. La verdad es que me falta poco para que me funcione lo que quiero. El problema que me encuentro es que no se como hacer que cuando se pulse en una linea se cambie de color y cuando se vuelva a pulsar en el mismo sitio vuelva a cambiar el color....
El codigo en el que quiero poner eso es este..
--------------------------------------
FUNCTION Listado_de_articulos()
--------------------------------------
LOCAL hBmp := ReadBitmap( CurDir() + "\go.bmp" )
LOCAL ocolor:=RGB(255,255,255),ocolor2:=RGB(123,123,123)
SELECT articulos
articulos->(DbGoTop())
DEFINE dialog odlg resource "Listado_articulos"
redefine LISTBOX oBrw;
FIELDS hBmp, articulos->cod_art, articulos->nom_art;
HEADERS "","Código", "Descripción" ID 500 OF oDlg
redefine button id 140 of odlg action;
( nRecno := articulos->( Recno() ),oDlg:End(),cesta_de_compra())
redefine button id 150 of odlg action odlg:end(),registros()
oBrw:nClrPane := { || If( articulos->lSelect, ocolor2, ocolor ) }
odlg:setcolor(RGB(1,1,1),RGB(230,184,94))
ACTIVATE dialog odlg
RETU nil
Saludos y gracias
Elías Torres.
Posted: Fri Nov 03, 2006 9:14 am
by Elias Torres
Hola a todos....
Bueno he sacado la forma de marcar y desmarcar la linea, lo malo es que solo he podido hacerlo de la siguiente manera, marco con el botón izquierdo y desmarco con el derecho. Esto me funciona pero creo que no es la mejor forma (para lo que yo quiero). Entonces se me ha ocurrido que lo mejor seria poner un 'check' para cada linea con lo que si lo marco se marcaria la linea y si lo desmarco se desmarcaría esa linea...¿esto es posible?. ¿Existe alguna forma de integrar un check box en el brows?...
Un saludo y gracias por la respuesta Antonio, ha sido de gran ayuda como siempre...
Elías Torres.
Posted: Fri Nov 03, 2006 10:14 am
by Biel EA6DD
Hola Elias, no se si he entendido bien lo que quieres hacer.
Prueba con el siguiente codigo.
Code: Select all
oBrw:blClicked:={||Articulos->lSelect:=!Articulos->lSelect,oBrw:Refresh()}
Posted: Fri Nov 03, 2006 11:03 am
by Elias Torres
Hola Biel, gracias por la ayuda es lo que me hacia falta.
Una duda..cuando estoy en un dialogo y desde alli llamo a otro, cuando salgo de este ultimo me vuelve al anterior. Es como que no se cierra el dialogo antes de llamar al segundo. Yo lo que estoy haciendo antes de llamar al segundo es terminar el primero con action odlg:end(), pero parece que no hace lo que pretendo...
Un saludo y gracias por la ayuda, sin este foro las cosas se me complicarían mucho....
Elías Torres.
Posted: Fri Nov 03, 2006 11:15 am
by Antonio Linares
Elías,
Si desde un diálogo modal llamas a otro, el anterior permanece activo. La forma de hacer lo que quieres es llamar al segundo despues de la activación del primero:
DEFINE DIALOG oDlg1 ...
ACTIVATE DIALOG oDlg1
// Aqui ya se ha terminado con oDlg1
DEFINE DIALOG oDlg2 ...
ACTIVATE DIALOG oDlg2