Básicamente se compone de 3 propiedades
AutoCompSource: Nos Permite especificar el nombre con el que se buscara los posibles datos de referencia, util si queremos utilizar la misma lista en uno o mas textboxs, por default el dato usado es el nombre del textbox, pero podemos especificarle el propio usando esta propiedad.
AutoCompTable: Indica el nombre de la tabla en la cual se almacenaran los datos que sean introducidos en el textbox, por default la tabla que se usa para almacenar estos valores es: Autocomp.DBF almacenada en el directorio de datos del usuario actual (home(7)) pero podemos indicarle por medio de esta propiedad en que ruta y archivo queremos que se almacene.
AutoComplete: Nos permite indicar los diferentes comportamientos del autocompletar en el textbox, los posibles valores son:
- 0 - Deshabilitado: No activa el autocompletar
- 1 - Alfabético: Ordena los elementos Alfabéticamente
- 2 - Mas Frecuentemente usado (MFU): Ordena las opciones basándose en la cantidad usada de cada opcion y luego la ordena por la opcion mas recientemente actualizada
- 3 - Mas usada Recientemente: Ordena las opciones basadas en el campo "Updated" de la tabla usada para autocompletar, el cual es actualizado cada vez que se selecciona una opción.
- 4 - Personalizado: usa el Campo "Weight" de la tabla utilizada para autocompletar, el desarrollador es responsable de actualizar el campo con su propio algoritmo para especificar el ordenamiento, las opciones con el valor mas alto en el campo "Weight" son mostradas primero.
PUBLIC oFrm oFrm=NEWOBJECT("frm_autocompletar") oFrm.SHOW RETURN DEFINE CLASS frm_autocompletar AS FORM AUTOSIZE = .T. HEIGHT = 236 WIDTH = 447 DOCREATE = .T. CAPTION = "Usando Autocompletar" MAXBUTTON = .F. MINBUTTON = .F. NAME = "frm_autoCompletar" ADD OBJECT txt1 AS Txt WITH ; TOP = 30, ; AutoComplete = 1, ; AutoCompSource = "txtDemo" ADD OBJECT txt2 AS Txt WITH ; TOP = 80, ; AutoComplete = 2, ; AutoCompSource = "txtDemo" ADD OBJECT txt3 AS Txt WITH ; TOP = 133, ; AutoComplete = 3, ; AutoCompSource = "txtDemo" ADD OBJECT txt4 AS Txt WITH ; LEFT = 23, ; TOP = 192, ; WIDTH = 169, ; AutoComplete = 4 ADD OBJECT txt5 AS Txt WITH ; LEFT = 203, ; TOP = 190, ; WIDTH = 169, ; AutoComplete = 4 ADD OBJECT lbl4 AS Lbl WITH ; CAPTION = "Ordenamiento Por codigo (AutoComplete = 4)", ; TOP = 170 ADD OBJECT lbl3 AS Lbl WITH ; CAPTION = "Ordenamiento Por ultima vez usado (AutoComplete = 3)", ; TOP = 114 ADD OBJECT lbl2 AS Lbl WITH ; CAPTION = "Ordenamiento Por mas usado (AutoComplete = 2)", ; TOP = 61 ADD OBJECT lbl1 AS Lbl WITH ; CAPTION = "Ordenamiento Alfabetico (AutoComplete = 1)", ; TOP = 10 PROCEDURE txt4.VALID IF DODEFAULT() UPDATE (THIS.AutocompTable) SET weight = 1 WHERE ALLTRIM(UPPER(SOURCE)) = ; IIF(EMPTY(THIS.AutocompSource),ALLTRIM(UPPER(THIS.NAME)),ALLTRIM(UPPER(THIS.AutocompSource))) UPDATE (THIS.AutocompTable) SET weight = 0 WHERE ALLTRIM(UPPER(DATA)) = ; ALLTRIM(UPPER(THIS.VALUE)) AND ALLTRIM(UPPER(SOURCE)) = ; IIF(EMPTY(THIS.AutocompSource),ALLTRIM(UPPER(THIS.NAME)),ALLTRIM(UPPER(THIS.AutocompSource))) USE IN (THIS.AutocompTable) ENDIF ENDPROC PROCEDURE txt5.VALID IF DODEFAULT() UPDATE (THIS.AutocompTable) SET weight = 0 WHERE ALLTRIM(UPPER(SOURCE)) = ; IIF(EMPTY(THIS.AutocompSource),ALLTRIM(UPPER(THIS.NAME)),ALLTRIM(UPPER(THIS.AutocompSource))) UPDATE (THIS.AutocompTable) SET weight = 1 WHERE ALLTRIM(UPPER(DATA)) = ; ALLTRIM(UPPER(THIS.VALUE)) AND ALLTRIM(UPPER(SOURCE)) = ; IIF(EMPTY(THIS.AutocompSource),ALLTRIM(UPPER(THIS.NAME)),ALLTRIM(UPPER(THIS.AutocompSource))) USE IN (THIS.AutocompTable) ENDIF ENDPROC ENDDEFINE DEFINE CLASS Lbl AS LABEL AUTOSIZE = .T. BACKSTYLE = 0 LEFT = 24 ENDDEFINE DEFINE CLASS Txt AS TEXTBOX HEIGHT = 25 LEFT = 24 WIDTH = 265 AutocompTable = "AutoCompletar" ENDDEFINE
Para ver el efecto en acción, pruebe a ingresar en el primer textbox, 3 nombres: Juan, Pedro y Jose, (asegúrese de presionar la tecla Enter luego de terminar de escribir el nombre) luego Escriba Pedro (o Seleccionelo de la lista cuando se lo sugiera) 2 veces, Luego Escriba Jose si va al segundo Textbox luego de esto, al dar click en el control, le mostrara como primer elemento Pedro, ya que es el que mas se ha utilizado (dos veces mas que los otros en este ejemplo) ya que el segundo textbox utiliza la opcion "2- Mas Frecuentemente usado", (no presione Enter borre el contenido del segundo textbox de preferencia), Luego dirijase al tercer textbox y al dar click en el control podrá observar que el primer elemento sera Jose, ya que este utiliza la opción "3- Mas usada recientemente".
Ahora si Se Fija en los otros 2 textbox (el cuarto y quinto) estos utilizan la opcion "4- Personalizado", así que tienen código en el evento Valid para ajustar el campo "Weight" (peso en ingles) para ajustar el orden, el 4 textbox coloca el ultimo valor escrito o seleccionado en la ultima posición mientras que el quinto textbox coloca el ultimo valor escrito o seleccionado al inicio.
Saludos
Jorge Mota
Guatemala
Jorge: Yo se que esta publicación es vieja pero VFP sigue vigente. Yo programo en VFP pero primero construyo las formas e inserto los textbox en las formas. Quiero hacer un autocompletar en un textbox, pero no encuentro la forma, veo lo que tu has escrito pero ¿Como traduzco todo eso a la forma ya creada? No se que poner en AutoCompSource o en AutoCompTable. He hecho cualquier cantidad de pruebas y nada parece dar el resultado que espero. Lo que quiero es que se complete del campo de la tabla que ya está indexada ¿Tienes algún ejemplo con alguna forma ya creada?
ResponderBorrar