9 de junio de 2004

Autocompletar en un ComboBox

Método para añadir la característica Autocompletar en un control ComboBox.

* 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 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.