* Escribe este codigo en el evento InteractiveChange
LOCAL lnUltimaTecla, lcMostrarValor,lcUltimoValorMostrado, ;
lnUltimaSeleccion, lnSeleccionados
lnUltimaTecla = LASTKEY()
lcUltimoValorMostrado = ""
lnUltimaSeleccion = 0
lnSeleccionados = 0
IF (lnUltimaTecla >= 32 AND lnUltimaTecla <= 126)
IF THIS.SELSTART >= 1
lcMostrarValor = SUBSTR(THIS.DISPLAYVALUE,1,THIS.SELSTART-1)+(CHR(lnUltimaTecla))
ELSE
lcMostrarValor = (CHR(lnUltimaTecla))+ALLT(THIS.DISPLAYVALUE)
ENDIF
IF EMPTY(lcMostrarValor)
lcMostrarValor = ALLT(CHR(lnUltimaTecla))
ENDIF
FOR i = 1 TO THIS.LISTCOUNT
IF UPPER(lcMostrarValor) = UPPER(SUBSTR(THIS.LIST(i),1,LEN(lcMostrarValor)))
THIS.DISPLAYVALUE = THIS.LIST(i)
IF LEN(ALLT(THIS.DISPLAYVALUE)) > LEN(lcMostrarValor)
THIS.SELSTART = LEN(lcMostrarValor)
THIS.SELLENGTH = LEN(ALLT(THIS.DISPLAYVALUE))-LEN(lcMostrarValor)
ENDIF
lcUltimoValorMostrado = THIS.DISPLAYVALUE
lnUltimaSeleccion = THIS.SELSTART
lnSeleccionados = THIS.SELLENGTH
RETURN
ENDIF
ENDFOR
THIS.DISPLAYVALUE = lcUltimoValorMostrado
THIS.SELSTART = lnUltimaSeleccion
THIS.SELLENGTH = lnSeleccionados
ENDIF
Oscar Arley Yepes AristizabalNota del editor: A continuación un ejemplo completo para ejecutar con el código anterior.
PUBLIC oMiFormulario
oMiFormulario=NEWOBJECT("MiFormulario")
oMiFormulario.SHOW
RETURN
*--------------------------------
DEFINE CLASS MiFormulario AS FORM
DOCREATE = .T.
CAPTION = "Autocompletar en ComboBox"
NAME = "frmAutocompletar"
ADD OBJECT combo1 AS COMBOBOX WITH ;
FONTBOLD = .T., ;
FONTSIZE = 12, ;
ROWSOURCETYPE = 1, ;
ROWSOURCE = "ALICIA,AMIRA,ANA,ELENA,ESTELA," + ;
"ESTHER,MARCELA,MARIA,MARTA," + ;
"MARTINA,MERCEDES,MIRTA,MONICA", ;
HEIGHT = 24, ;
LEFT = 24, ;
TOP = 24, ;
WIDTH = 240, ;
NAME = "Combo1"
PROCEDURE combo1.INTERACTIVECHANGE
LOCAL lnUltimaTecla, lcMostrarValor,lcUltimoValorMostrado, ;
lnUltimaSeleccion, lnSeleccionados
lnUltimaTecla = LASTKEY()
lcUltimoValorMostrado = ""
lnUltimaSeleccion = 0
lnSeleccionados = 0
IF (lnUltimaTecla >= 32 AND lnUltimaTecla <= 126)
IF THIS.SELSTART >= 1
lcMostrarValor = SUBSTR(THIS.DISPLAYVALUE,1,THIS.SELSTART-1)+(CHR(lnUltimaTecla))
ELSE
lcMostrarValor = (CHR(lnUltimaTecla))+ALLT(THIS.DISPLAYVALUE)
ENDIF
IF EMPTY(lcMostrarValor)
lcMostrarValor = ALLT(CHR(lnUltimaTecla))
ENDIF
FOR i = 1 TO THIS.LISTCOUNT
IF UPPER(lcMostrarValor) = UPPER(SUBSTR(THIS.LIST(i),1,LEN(lcMostrarValor)))
THIS.DISPLAYVALUE = THIS.LIST(i)
IF LEN(ALLT(THIS.DISPLAYVALUE)) > LEN(lcMostrarValor)
THIS.SELSTART = LEN(lcMostrarValor)
THIS.SELLENGTH = LEN(ALLT(THIS.DISPLAYVALUE))-LEN(lcMostrarValor)
ENDIF
lcUltimoValorMostrado = THIS.DISPLAYVALUE
lnUltimaSeleccion = THIS.SELSTART
lnSeleccionados = THIS.SELLENGTH
RETURN
ENDIF
ENDFOR
THIS.DISPLAYVALUE = lcUltimoValorMostrado
THIS.SELSTART = lnUltimaSeleccion
THIS.SELLENGTH = lnSeleccionados
ENDIF
ENDPROC
ENDDEFINE
*--------------------------------
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.