Mira este codigo y fijate si te sirve lo qu ehace es create un form y agregarle un combobox, toma la parte del combo y `programala desde tu formulario dinamicamente o desde los metodos del combo
Si pegas este codigo en un prg y lo ejecutas vas a ver como funciona
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 MILANO,AMIRA,ANA,ELENA,ESTELA," + ;
"ESTHER,MARCELA,MARIA,MARTA," + ;
"MARTINA,MERCEDES,MIRTA,MONICA", ;
HEIGHT = 24, ;
LEFT = 24, ;
TOP = 24, ;
WIDTH = 240, ;
NAME = "Combo1"
style = 0
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