Saludos amigos, tengo un listbox con un array, es una lista de clientes por nombre, lo que necesito y no se como hacerlo es que al oprimir la tecla t, vaya a donde empiecen por t, no quiero una busqueda incrementan que vaya buscando por varias letras, solo la primera, asi como se hacia antes en clipper, aca esta el codigo
bien a esta punto ya viene el arreglo con n nombres de clientes y codigos
DEFINE DIALOG DIALOGO TITLE " Buscar por Nombre " FROM 5,5 TO 320,450 FONT OFONT PIXEL
@ 006, 005 say " Empresas" PIXEL font font55 COLOR CLR_RED
@ 020, 005 listbox olbx
FIELDS EMPRE[NCUR][1],EMPRE[NCUR][2],"" HEADERS "Nombre", "Codigo","" ;
ON DBLCLICK (Dialogo:End(),EXISTE(VAL(EMPRE[NCUR,2])) ) OF Dialogo size 15,110 pixel
oLbX:bGoTop = { || nCur := 1 }
oLBX:bGoBottom = { || nCur := Len( EMPRE ) }
oLbX:bSkip = { | nSkip | Skipper( EMPRE, @nCur, nSkip ) } // con array
oLbX:bLogicLen := { || LEN(EMPRE) }
oLbX:cAlias := "Array"
oLbX:bKeydown := { | nKey | IF ( nKey == VK_RETURN , EVAL(oLBX:bLDblClick), NIL ) }
oLbX:aColSizes := {342,60,1}
oLbX:lCellStyle := .T.
oLbX:aJustify := { .F.,.F.,.F.}
oLbX:nLineStyle = 4 //0=nada, 2=delgada negra, 1=gruesa negra, 3=gris, 4=punteada
ACTIVATE DIALOG DIALOGO
como dije solo quiero que si se aprieta "T" vaya a las que empiezan por t, que si se aprieta "R" vaya a las que empiezan por r, etc
gracias
buscar la primera letra en un listobx
buscar la primera letra en un listobx
Software especializado para oficinas contables con grandes volumenes de Informacion
Impresion de todos los formularios del Seniat, Dian
alex_patino74@hotmail.com
whatsapp 57+3214777217
Impresion de todos los formularios del Seniat, Dian
alex_patino74@hotmail.com
whatsapp 57+3214777217
- Manuel Aranda
- Posts: 561
- Joined: Wed Oct 19, 2005 8:20 pm
- Location: España
Re: buscar la primera letra en un listobx
Seguramente habrá alguna forma más limpia y moderna de hacerlo, pero yo uso esta desde tiempos inmemoriables y que alguien puso por aquí en su día, y siguiendo la máxima de que "si funciona no lo toques" es la que yo uso desde siempre:
Code: Select all
//
oLbx:bkeydown:={|nKey|DOKEYCHECK(nKey,oLbx)}
//
*******************************************************
METHOD FUNCTION DOKEYCHECK(nKey,oLbx)
*******************************************************
*------SINGLE CHARACTER BROWSE SEARCHER----------------------
local cKEY, nSeekrec
nSeekrec:=recno() && Record number before the seek...
&& 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
//
cKey:=UPPER(CHR(nKEY)) && Change ACSII nKey value to a Character value for the SEEK...
//
SET SOFTSEEK ON && Get as close as you can to the key value...
SEEK UPPER(cKey)
SET SOFTSEEK OFF && Reset softseek
oLbx:oVscroll:setpos(recno()) && Refresh browser object sequence...
oLbx:refresh() &&
oLbx:UpStable() && Stablize
SysRefresh()
RETURN( NIL ) && Drop out!
ENDIF
//
//
*-RECORD SELECTION AFTER A RETURN KEY HIT...POSSIBLY TO DROP TO EDIT WINDOW -*
DO CASE
/*
CASE nKEY == VK_CONTROL
MSGINFO("Esto es el tabuladoraaa!!!...")
*/
CASE nKEY == VK_SPACE
//
CASE nKEY == VK_RETURN
//
*/
ENDCASE
//
RETURN( NIL )
Un saludo,
Manuel
xH 1.2.3, FWH 14.09, BC++ 5.8.2, xVerce CW 1.0, PellesC
Manuel
xH 1.2.3, FWH 14.09, BC++ 5.8.2, xVerce CW 1.0, PellesC
- Raymundo Islas M.
- Posts: 590
- Joined: Tue Mar 14, 2006 11:34 pm
- Location: Acapulco, Gro. MEXICO
Re: buscar la primera letra en un listobx
QAZWSX2K,
Espero te sirva.
Saludos
Code: Select all
oListBox:bKeyDown := { |nKey| FindLtr( nKey ) }
Static Function FindLtr( nKey )
local nEle := ascan( Empre, { |aEle| substr( aEle[1], 1, 1 ) == upper( chr( nKey ) ) } )
if nEle > 0
nCur := nEle
oListBox:refresh()
endif
return nil
Espero te sirva.
Saludos
FWH 10.6 + xHarbour + Borland 582
- Willi Quintana
- Posts: 859
- Joined: Sun Oct 09, 2005 10:41 pm
- Location: Cusco - Perú
- Contact:
Re: buscar la primera letra en un listobx
Hola, uso esto con mucho exito,,,,
Code: Select all
oApp:cDatSeek:="" // esta es una variable de uso en toda la aplicacion
...
...
REDEFINE LISTBOX oLbx ;
FIELDS aBalance[oLbx:nAt, 1], ;
aBalance[oLbx:nAt, 2], ;
aBalance[oLbx:nAt, 3], ;
aBalance[oLbx:nAt, 4], ;
aBalance[oLbx:nAt, 5], ;
aBalance[oLbx:nAt, 6] ;
HEADERS ...........
ON CHANGE (oApp:cDatSeek:="" ) ;
ID ...........
oLbx:bKeyDown := {|nKey,nFlags| ASEEK(oLbx, nKey, aBalance, 1)), oLbx:SetFocus()}
//---------------------------------------------------------------------------------------
Function ASEEK(oLbx, nKey, aArray, nCol, nCol2, nFact) // incremental en array
local nPos, nLen, cDato, nCont
DEFAULT nCol2 := 0
DEFAULT nFact := 0
cDato := ""
nPos := 0
DO CASE
CASE nKey = 13 .OR. nKey = 9 // enter y tab
oApp:cDatSeek := ""
cDato := oApp:cDatSeek
Return(Nil)
CASE nKey = 8 // retroceso
oApp:cDatSeek := SUBSTR(oApp:cDatSeek,1,LEN(oApp:cDatSeek)-1)
cDato := oApp:cDatSeek
CASE nKey >=65 .AND. nKey <=90 .OR. nKey =32 .OR. nKey = 189 .OR. nKey = 190 .OR. nKey = 192// son letras
DO CASE
CASE nKey = 189
cDato := oApp:cDatSeek + "-"
CASE nKey = 190
cDato := oApp:cDatSeek + "."
CASE nKey = 192
cDato := oApp:cDatSeek + "Ñ"
OTHER
cDato := oApp:cDatSeek + CHR(nKey)
ENDCASE
oApp:cDatSeek := cDato
OTHER
oApp:cDatSeek := ""
cDato := oApp:cDatSeek
Return(Nil)
ENDCASE
nLen := LEN(cDato)
nPos := ASCAN(aArray, {|aVal|SUBST(ALLTRIM(aVal[nCol]),1, nLen) = cDato})
If nPos > 0
oLbx:nAt := nPos
oLbx:Refresh()
EndIf
Return(Nil)
Re: buscar la primera letra en un listobx
gracias a todos, las pruebo todoas y les comento
Software especializado para oficinas contables con grandes volumenes de Informacion
Impresion de todos los formularios del Seniat, Dian
alex_patino74@hotmail.com
whatsapp 57+3214777217
Impresion de todos los formularios del Seniat, Dian
alex_patino74@hotmail.com
whatsapp 57+3214777217