como marcar lineas en un LISTBOX

Post Reply
Elias Torres
Posts: 233
Joined: Wed Aug 09, 2006 3:07 pm

como marcar lineas en un LISTBOX

Post 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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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> ) }
regards, saludos

Antonio Linares
www.fivetechsoft.com
Elias Torres
Posts: 233
Joined: Wed Aug 09, 2006 3:07 pm

Post 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.
Elias Torres
Posts: 233
Joined: Wed Aug 09, 2006 3:07 pm

Post 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.
User avatar
Biel EA6DD
Posts: 680
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca
Contact:

Post 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()}
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
Elias Torres
Posts: 233
Joined: Wed Aug 09, 2006 3:07 pm

Post 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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply