Búsqueda incremental en xHarbour

Post Reply
User avatar
Manuel Aranda
Posts: 561
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Búsqueda incremental en xHarbour

Post by Manuel Aranda »

En Clipper+Fivewin el siguiente código funciona correctamente, es decir cada vez que se introduce una letra en el GET el Listbox se mueve hasta el registro que contiene esas letras, sin embargo con FWH el Listbox no se mueve conforme se van introduciendo letras, solamente cuando se pulsa la tecla retroceso después de introdocir una cadena. Por favor, pueden echarle un vistazo al código ?, tal vez sea necesaria alguna optimización para xHarbour pero no encuentro que puede ser:

Code: Select all

 REDEFINE GET oGet VAR cText ID 801 PICTURE "@!" OF oDlg;
     ON CHANGE ( Self:Assign(),;
     Locator(""+SubStr(cText,1,Self:nPos-1)+Upper(Chr( nKey )),oLbx,cUsaBase) )


*********#######*****************
FUNCTION LOCATOR(cKey,oB,cUsaBase)
*********#######*****************
// oB = TWBrowse Object, cKey = Contenido del Get
local nSeekrec
//
nSeekrec:=(cUsaBase)->(Recno())
IF GetASyncKey( VK_BACK )
cKey := SubStr(cKey,1,Len(cKey)-1)
EndIF

(cUsaBase)->(DbSeek(cKey,.T.))
If !Found()
GO nSeekrec
EndIF
//
oB:Refresh()
//
RETURN( NIL )
//
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Manuel,

Aqui tienes un ejemplo completo:
http://fivetechsoft.com/forums/viewtopi ... ncremental
regards, saludos

Antonio Linares
www.fivetechsoft.com
Francisco Horta
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Post by Francisco Horta »

que tal manuel,
yo uso la busqueda incremental en la msgbar con la twbrowse tee paso un ejemplo de su uso, espero te sirva:

LOCAL cDefaulMsg:=""
DEFINE DIALOG oDls bla bla bla...
REDEFINE LISTBOX oBrs ;
FIELDS (oDCli)->Nombre, (oDCli)->Codigo bla bla bla ....

oBrs:bSeek := {|lRet| oBrs:DbfSeek(.T.) }
oBrs:bUpdateBuffer:= {|| UpdateBuffer( oDls:oMsgBar, ;
cDefaultMsg, oBrs:cBuffer ) }

ACTIVATE DIALOG oDls CENTERED;
ON INIT MsgBarra(oDls,cDefaultMsg)

STAT FUNCTION MsgBarra(oDls,cDefaultMsg)
SET MESSAGE OF oDls TO cDefaultMsg NOINSET
RETURN Nil

FUNCTION UpdateBuffer( oMsgBar, cDefaultMsg, cBuffer )
local nClrText:= oMsgBar:nClrText
local cMsg, oFont

DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 0,-10 BOLD

if Len( cBuffer ) > 0
cMsg:= "Buscando: " + upper(cBuffer)
oMsgBar:nClrText:= CLR_BLUE
oMsgBar:SetFont(oFont)
else
cMsg:= cDefaultMsg
endif
oMsgBar:SetMsg( PadR( cMsg ,200) )
oMsgBar:nClrText:= nClrText
oFont:End()
return Nil

Salu2
Paco
User avatar
Manuel Aranda
Posts: 561
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Post by Manuel Aranda »

Gracias Antonio y Francisco. Lo pruebo.

Un saludo,
Manuel
Post Reply