FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Actualizar LIstbox
Posts: 199
Joined: Fri Apr 18, 2008 04:21 PM
Actualizar LIstbox
Posted: Fri Jun 20, 2008 04:24 PM

Hola a todos

Actualmente tengo un Dialogo en el que tengo un get y un boton Buscar.

Luego de darle buscar refresco mi listbox y despliego los datos.

Lo que quiero es obviar el boton buscar y que desaparesca el get,
es decir lo que quiero es escribir en el formulario y e vez que salga el get salga un osay con lo que estoy escribiendo y automaticamente se este refrezcando el Listbox con lo que estoy buscando.

Si pongo Julio que me aparezcan todo lo que contenga Julio sin necesidad de escribir en un get y luego darle buscar.

De antemano les agradezco su ayuda

Atentamente,
Julio Ponce[/img]

Posts: 610
Joined: Wed Oct 19, 2005 08:20 PM
Actualizar LIstbox
Posted: Fri Jun 20, 2008 05: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.

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
Posts: 199
Joined: Fri Apr 18, 2008 04:21 PM
Actualizar LIstbox
Posted: Fri Jun 20, 2008 08:56 PM
Gracias,

Estare probando con Mysql y te cuento,
Muy Agradecido

Atentamente,
Julio Rodrigo Ponce Hinestroza



Manuel Aranda wrote: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.

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.)
Posts: 199
Joined: Fri Apr 18, 2008 04:21 PM
Actualizar LIstbox
Posted: Sat Jun 21, 2008 03:02 PM

Gracias
Ya lo hice con Mysql Gracias.

Solo tengo que ver por que es un poco lento.

Pero ya tengo la idea.

Atentamente
Julio Rodrigo Ponce Hinestroza

Continue the discussion