by Manuel Aranda » Fri Jun 20, 2008 5:57 pm
Hola Julio:
Aquí te pongo un trozo de código que seguramente podrás adaptar a tus necesidades. Tal y como está te va haciendo un filtrado de la base de datos por los caracteres que vayas introduciendo, a la vez que te los refleja en un oSay.
- Code: Select all Expand view RUN
LOCAL cTecla:=""
.............................
...............................
REDEFINE LISTBOX oBj1[9] ;
FIELDS IIF(EMPTY(AGENDA->Ubicado)," ",aLevel[ 5 ] ),;
+" "+AGENDA->Texto+" ",;
+" "+AGENDA->Ubicado+" ";
FIELDSIZES 16,600,300;
HEADERS "A", " Texto", " Ubicación archivo asociado o dirección internet";
ID 200;
FONT oFont1;
ON LEFT DBLCLICK (AgendaAltaModi(oBj1[9],"Ver/Modificar texto",.F.),oBj1[9]:Refresh(),oBj1[9]:SetFocus(),oBtnVer:Refresh());
OF oDlg
oBj1[9]:bkeydown:={|nKey|DOKEYCHECK(nKey,oBj1[9],oSay2,oDlg,oBj1,@cTecla)}
REDEFINE SAY oSAY2 ID 800 OF oDlg
..............................
..............................
************************************************************
STATIC FUNCTION DOKEYCHECK(nKey,oLbx,oSay2,oDlg,oBj1,cTecla)
************************************************************
*------SINGLE CHARACTER BROWSE SEARCHER----------------------
&& Note ASCII values: 65-90 are Capital A through Z.
&& : 97-122 are lowercase a through z.
&& : 48-57 are numbers 0-9.
&& : 13 used below is for a RETURN key hit.
//
IF nKEY>=65 .AND. nKEY<=90 .OR. nKEY>=97 .AND. nKEY<=122 .OR. nKEY >=48 .AND. nKEY<=57 .OR. nKey = VK_SPACE
//
cTecla:=cTecla+UPPER(CHR(nKEY))
//
oSay2:SetText(cTecla)
oSay2:Refresh()
FilTexto(cTecla,"AGENDA",oDlg,oLbx)
oLbx:oVscroll:setpos(recno()) && Refresh browser object sequence...
oLbx:refresh() &&
SysRefresh()
RETURN( NIL )
ENDIF
//
DO CASE
*/
CASE nKEY == VK_BACK
//
cTecla=substr(cTecla,1,len(cTecla)-1)
FilTexto(cTecla,"AGENDA",oDlg,oLbx)
oSay2:SetText(cTecla)
oSay2:Refresh()
PonNumero("AGENDA",oBj1)
CASE nKEY == VK_DELETE
//
cTEcla=""
FilTexto(cTecla,"AGENDA",oDlg,oLbx)
oSay2:SetText(cTecla)
oSay2:Refresh()
ENDCASE
//
RETURN( NIL )
******************************************
FUNCTION FilTexto(cFiltro,cFile,oDlg,oLbx)
******************************************
cFiltro := ALLTRIM(cFiltro)
IF ! EMPTY(cFiltro)
(cFile)->(DBSETFILTER({|| AT(UPPER(cFiltro), UPPER((cFile)->Texto)) > 0 },"AT(UPPER(cFiltro), UPPER((cFile)->Texto)) > 0" ))
ELSE
(cFile)->(DBCLEARFILTER())
ENDIF
(cFile)->(DBGOTOP())
oLbx:Refresh()
oDlg:Update()
RETURN(.T.)
Un saludo,
Manuel
xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC