Page 1 of 1

Busqueda incremental en wbrowse de arreglo

Posted: Tue Mar 18, 2008 4:28 am
by jllinas
Pues eso....

A ver si alguien me tira la toalla...

Para hacer esto en dbf esta bien, pero en arreglos, no se. Sobre todo, una vez encontrado el elemento, para refrescar el browse hago:

oBrw:UpStable()
oBrw:Refresh()

Pero en este caso, es diferente la cosa, pues ::Upstable() arroja un error si es un arreglo.

AYUDA !

Posted: Tue Mar 18, 2008 8:43 am
by Antonio Linares
Julio,

A que te refieres con un browse de arreglo ?

A usar un array en vez de una DBF ?

Posted: Tue Mar 18, 2008 1:13 pm
by Raymundo Islas M.
Julio :

nLenStr := Len( cXStr )
nEle := Ascan( TuArreglo,{ | aEle | SubStr( aEle[2], 1, nLenStr ) == cXStr } )
If nEle > 0
pSM := nEle
tulistbox:REFRESH()
ENDIF

// aEle[2] lo ajustas dependiendo en que dimension quieras buscar

En si, lo que hay que hacer, es ya encontrado el "registro", asignar al puntero de tu arreglo, el indice donde fue encontrado y refrescar.


Saludos

Posted: Wed Mar 19, 2008 12:44 am
by jllinas
Eso, eso Antonio.... un browse de array, no de DBF

Raymundo, ¿Pudieras orientarme con un poco mas de código de como "mover" el puntero del browse a ese valor encontrado?

Supondo que la variable "cXStr" es la que contiene el valor a buscar.... no?

Gracias anticipadas !

Posted: Wed Mar 19, 2008 1:20 am
by Raymundo Islas M.
Julio :


Aqui tienes un ejemplo :

Code: Select all


// Estas las manejo como Static
aSrcMar := { {"","",""} }
pSM := 1


REDEFINE LISTBOX lbSrcMar ;
	FIELDS aSrcMar[pSM,1] ;
	HEAD "NOMBRE" ;
	ID 103 ;
	FONT oBrwFnt ;	
	OF oFldSrc:aDialogs[1]

	lbSrcMar:SetArray( aSrcMar )
	lbSrcMar:nLineStyle  := 2
	lbSrcMar:lDrawFocusRect := .F.
	lbSrcMar:nClrLine    := CLR_WHITE
	lbSrcMar:BGOTOP     := { || pSM :=1}
  	lbSrcMar:BGOBOTTOM  := { || pSM := eval( lbSrcMar:bLogicLen ) }
  	lbSrcMar:BSKIP      := { | nwant, nold | nold := pSM , pSM += nwant,;
		pSM := max( 1, min( pSM, eval( lbSrcMar:bLogicLen ) ) ), pSM - nOld }
	lbSrcMar:BLOGICLEN  := { || Len( aSrcMar ) }
	lbSrcMar:nClrPane   := { || IIF( pSM%2 == 0, CLR_A, CLR_B ) }
	lbSrcMar:bKeyDown   := { | nKey | SRCMARKEY( nKey ) }


Static Function SRCMARKEY( nKey )
cStr2Seek += Upper( Chr( nKey ) )
nLenStr := Len( cStr2Seek )
nEle := Ascan( aSrcMar, { |aEle| SubStr( aEle[1], 1, nLenStr ) == cStr2Seek } )
IF nEle > 0
	pSM := nEle
	lbSrcMar:REFRESH()
ENDIF
Return NIL

Este codigo esta trabajando OK, solo ponle los ajustes que requieras.


Saludos

Posted: Wed Mar 19, 2008 2:09 am
by jllinas
Gracias amigo,

Lo pruebo y cualquier cosa te "grito" popr aqui !

Abrazos,