Hola Dbarrio:
Como estas? Mira, yo utilizo las dos formas en los formularios de busqueda. La incremental y la por contenido.
Te muestro la funcion buscar.
FUNCTION buscar(base,oDlg)
LOCAL oDlg1,oBot1:=ARRAY(3),oGet1:=ARRAY(2),mvar1:=ARRAY(2),oLbx,i,retorno, Bus := .f.
(base)->(DBSETORDER(2))
(base)->(DBGOTOP())
mvar1[1] := SPACE(30)
DEFINE DIALOG oDlg1 RESOURCE "BUSCAR" TITLE "Busqueda" OF oDlg
oDlg1:lHelpIcon := .f.
REDEFINE BROWSE oLbx ID 101 OF oDlg1 ON DBLCLICK oDlg1:End();
ALIAS (base)
ADD COLUMN TO oLbx DATA FieldWBlock( aCampo[1], Select(base) ) ;
SIZE 100 HEADER "Codigo" ALIGN RIGHT
ADD COLUMN TO oLbx DATA FieldWBlock( "nombre", Select(base) ) ;
SIZE 1300 HEADER "Detalle"
REDEFINE GET oGet1[1] VAR mvar1[1] ID 102 OF oDlg1
REDEFINE GET oGet1[2] VAR mvar1[2] ID 105 OF oDlg1
oGet1[1]:bKeyDown := { |nKey,nFlag| bus(base, oGet1[1], oLbx, nKey) }
oGet1[2]:bKeyDown := { |nKey,nFlag| Cam(oGet1[2], nKey, @Bus) }
REDEFINE BUTTON oBot1[1] ID 103 OF oDlg1 ACTION oDlg1:End()
REDEFINE BUTTON oBot1[3] ID 106 OF oDlg1 ACTION ;
BuscarCon(mvar1[2],oLbx,base,@Bus)
ACTIVATE DIALOG oDlg1 ON INIT oGet1[1]:SetFocus()
retorno = (base)->codigo
(base)->(DBSETORDER(1))
RETURN retorno
*********************************************
** Buscar por contenido
STATIC FUNCTION BuscarCon(Texto,oBrw,base,Bus)
LOCAL anterior := SELECT()
IF Bus
SELECT (base)
CONTINUE
ELSE
Bus := .t.
SELECT (base)
LOCATE FOR ALLTRIM(Texto) $ (base)->nombre
ENDIF
SELECT(anterior)
oBrw:BugUp()
oBrw:Refresh()
RETURN nil
*********************************
** Busqueda incremental
FUNCTION Bus(base, oGet, oLbx, nKey)
LOCAL cBus
cBus := LEFT(oGet:cText,oGet:nPos-1) + CHR(nKey)
(base)->(DBSEEK(cBus))
// Se refresca el listbox
oLbx:BugUp()
oLbx:refresh()
RETURN .T.