* 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 ENDIFOscar Arley Yepes Aristizabal
Nota 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.