hola a todos,
alguien sabe como puedo controlar la multiseleccion en un xbrowse con :
oBrw:nMarqueeStyle:= MARQSTYLE_HIGHLWIN7
oBrw:lMultiSelect := .t.
x ejemplo, que no pueda elegir mas de 5 items ?
Gracias,
Salu2, Ariel.
hola a todos,
alguien sabe como puedo controlar la multiseleccion en un xbrowse con :
oBrw:nMarqueeStyle:= MARQSTYLE_HIGHLWIN7
oBrw:lMultiSelect := .t.
x ejemplo, que no pueda elegir mas de 5 items ?
Gracias,
Salu2, Ariel.
do you tried with oBrw:aselected ?
Fijate, oBrw:aSelected contiene las posiciones de los registros seleccionados y se va incrementando,asi que contiene cantidad de registros seleccionados, tendrias que ver si al ir seleccionando se puede hacer alguna validacion para que alli verifiques el LEN de oBrw:aSelected y si ya llego a su limite no permitirle seleccionar mas registros, la otra forma es que deje que seleccione la cantidad que quiera y cuando clickeen sobre algun boton para loque vayan hacer con los registros seleccionados verifiques el LEN de oBrw:aSelected y si es mayor a lo permitido mandes mensajes que tiene mas de lo permitido y que debe deseleccionar X cantidad que seria el LEN de oBrw:aSelected menos la cantidad permitida, espero te ayude y de idea de que hacer, saludos... ![]()
Silvio, Jose Luis,
Gracias por responder... la pregunta es... como se cuando seleccionan o no el registro ??? o sea con q metodo controlo la seleccion ?
Esta es la configuracion de la columna :
WITH OBJECT oLbx:InsCol( 1 )
:cHeader := " "
:bEditValue := { || If( AScan( oLbx:aSelected, oLbx:BookMark ) > 0, .t., nil ) }
:SetCheck()
:nHeadBmpNo := { || If( Len( oLbx:aSelected ) == oLbx:nLen, 1, 2 ) }
IF nTope == 0
:bLClickHeader := { |r,c,f,oCol| If( Len( oLbx:aSelected ) == oLbx:nLen, ;
oLbx:SelectNone(), oLbx:SelectAll() ) }
endif
END
Gracias.
Salu2, Ariel.
Ariel, el aSelect contiene es la posicion del registro seleccionado, no de columna, por lo cual cuando aSelect es mayor a cero, entonces se han hecho selecciones, tienes que tener en cuenta, que cuando marcas 1 solo registro en el xbrowse, automaticamente aSelect se incremente, eso quiere decir que casi siempre por defecto si hay click sobre un registro, entoces alimenta aSelect, para ir seleccionando los demas, debes usar tecla ctrl o shift, yo por lo menos valido LEN de aSelect al hacer click sobre un boton, igual puedes ver esta linea en la clase xBrowse a ver si responde mejor tu pregunta y revisa METHOD Select( nOperation ) CLASS TXBrowse, saludos...
lHighLite := ::lMultiSelect .and. ( Ascan( ::aSelected, Eval( ::bBookMark ) ) > 0 )
if ::lMultiSelect .and. ( nStyle == MARQSTYLE_HIGHLROWMS .or. ::nMarqueeStyle == MARQSTYLE_HIGHLWIN7 )
lHighLite := ( Ascan( ::aSelected, Eval( ::bBookMark ) ) > 0 )
endif
Hola.
//Restringir cantidad de registros seleccionados.
//Con Ctrl+Click funciona bien... con Shift+flecha-abajo, no.
oBrw:bKeyDown := { || if(len(oBrw:aSelected) = 3, MsgInfo("Seleccion maxima agotada"+STR(len(oBrw:aSelected))),) }
Si bien es cierto que usando Shift+flecha-Abj aSelect se incrementa, no obedece a la condicion expuesta arriba en oBrw:bKeyDown.
Con Shift + flecha-abajo, solo funciona si el usuario suelta la Shift y la vuelve a presionar. Creo que xBrowse necesita adaptarse a este comportamiento.
Por esto último es que abrà el post "Simular soltar y oprimir una tecla"
Saludos.
FranciscoA wrote:Hola.
//Restringir cantidad de registros seleccionados.
//Con Ctrl+Click funciona bien... con Shift+flecha-abajo, no.
oBrw:bKeyDown := { || if(len(oBrw:aSelected) = 3, MsgInfo("Seleccion maxima agotada"+STR(len(oBrw:aSelected))),) }
Si bien es cierto que usando Shift+flecha-Abj aSelect se incrementa, no obedece a la condicion expuesta arriba en oBrw:bKeyDown.
Con Shift + flecha-abajo, solo funciona si el usuario suelta la Shift y la vuelve a presionar. Creo que xBrowse necesita adaptarse a este comportamiento.
Por esto último es que abrà el post "Simular soltar y oprimir una tecla"
Saludos.
Saludos Francisco, disculpa te contradiga en lo que dices que no funciona la multi-seleccion con Shift+flecha-Abj/flecha Arr , me pusistes a dudar de lo que dije, asi que volvi a revisarlo y estoy en lo correcto, a mi me funciona sin ningun problema Shift + flecha arriba e igual flecha abajo sin necesidad de soltar el shift, igual lo uso en combinacion ctrl+click y todo funciona perfecto...acabo hacer una prueba antes de escribir, por eso lo dije y lo mantengo...saludos...
Ok Francisco, disculpa el mal entendido, tienes razon, no funciona con shift + flech arri/abaj el:
:bKeyDown := { || if(len(oBrow:aSelected) = 2, MsgInfo("Seleccion maxima agotada"+STR(len(oBrow:aSelected))),) }
creo que si revisamos como funciona al hacer click podemo repararlo entre todos, asi nos beneficiarimos y como dice Daniel, es una clase para mejorarla entre todos, revisare a ver que veo y luego comento, saludos... ![]()
Jose Luis, yo también voy a revisar la Classe a ver si encuentro algo.
Saludos.
joseluisysturiz wrote:Ariel, el aSelect contiene es la posicion del registro seleccionado, no de columna, por lo cual cuando aSelect es mayor a cero, entonces se han hecho selecciones, tienes que tener en cuenta, que cuando marcas 1 solo registro en el xbrowse, automaticamente aSelect se incremente, eso quiere decir que casi siempre por defecto si hay click sobre un registro, entoces alimenta aSelect, para ir seleccionando los demas, debes usar tecla ctrl o shift, yo por lo menos valido LEN de aSelect al hacer click sobre un boton, igual puedes ver esta linea en la clase xBrowse a ver si responde mejor tu pregunta y revisa METHOD Select( nOperation ) CLASS TXBrowse, saludos...![]()
lHighLite := ::lMultiSelect .and. ( Ascan( ::aSelected, Eval( ::bBookMark ) ) > 0 )
if ::lMultiSelect .and. ( nStyle == MARQSTYLE_HIGHLROWMS .or. ::nMarqueeStyle == MARQSTYLE_HIGHLWIN7 )
lHighLite := ( Ascan( ::aSelected, Eval( ::bBookMark ) ) > 0 )
endif
Gente;
reformulo mi consulta por si no fui explÃcito
Con el Explorador de windows, puedo, pulsando Ctrl-clic izq, marcar varios archivos. Luego, haciendo clic derecho, sobre cualquiera de ellos, abrir el menu secundario y, puedo entre otros, seleccionar "Copiar". Posteriormente al "Pegar" lo hará sobre todos los registros seleccionados.
Hasta aquà no dije nada nuevo
En un xBrowse si hago este proceso sucede que:
1.- Al señalar uno de los registros marcados y hacer clic derecho, para abrir un menu secundario y tomar una opcion (borrar x ej.). El ::aSelected contiene un solo registro (el último sobre el que se hizo clic)
2.- Si mantengo la tecla Ctrl presionada y repito el proceso, ::aSelected tiene todos los registros marcados, menos el que se corresponde con el clic derecho.
Mi intención es marcar varios, con Ctrl o Shift, para luego ejecutar una acción sobre ellos
Cual es la forma correcta?
gracias
toc...toc
Nadie usa MULTISELCT?
Como se usarÃa, si no es como prentendo hacerlo?
Ariel wrote:hola a todos,
alguien sabe como puedo controlar la multiseleccion en un xbrowse con :
oBrw:nMarqueeStyle:= MARQSTYLE_HIGHLWIN7
oBrw:lMultiSelect := .t.
x ejemplo, que no pueda elegir mas de 5 items ?
Gracias,
Salu2, Ariel.
Mr Rao;
Thank for your respond (in other post too)
sorry for my english (I write from Google Traductor)
I put, xbrowse, in active the Multi selection
First, I selec with shift+clic or ctrl+clic, some registers.
after I do right clic (to open a popup), over a selection and ::aSelected only return the last register selected.
If I do again with Ctrl pressed. ::aSelected, returned all the registers, but not the register where I did clic.
How must i do it that?. This process is clean from Windows Explorer when do a copy files, for example