pero al restaurar la posición del cursor, el texto seleccionado se quita y no encuentro manera.
La función es
PUBLIC SUB Buscar_Combo(cmbCombo AS ComboBox)
'Funcion para buscar en un combobox mientras se escribre
'se puede poner en un modulo y llamar desde el ComboBox_KeyPress() pasando
'el combobox como parametro
DIM scad AS String, ipos AS Integer
DIM aa AS Boolean, idd AS Integer
DIM SList AS String[]
' Si se pulsan teclas de control o el combobox es solo lectura salimos sin hacer nada
IF Asc(Key.Text) < 32 OR Key.Code = key.Delete OR cmbCombo.ReadOnly THEN RETURN
ipos = cmbCombo.Pos ' Guardamos la posicion del cursor
scad = Mid(cmbCombo.Text, 1, ipos) 'guardamos como cadena la izquierda del cursor
' PRINT "scad = " & scad
SList = cmbCombo.List
' bucle para buscar en el combo
FOR idd = 0 TO cmbCombo.List.Count - 1
aa = cmbCombo.List[idd] LIKE scad & Key.Text & "*"
IF aa THEN BREAK ' si hay coincidencia se sale del bucle
NEXT
IF aa THEN ' se ha encontrado coincidencia
STOP EVENT ' cancelar el evento para no insertar la tecla pulsada
scad &= Key.Text
Object.Lock(cmbCombo) ' Bloquear el combo para que no dispare el evento Click o Change
cmbCombo.Text = SList[idd] ' asignar al combo la coincidencia
ipos = Len(scad)
cmbCombo.Select(ipos, Len(cmbCombo.Text) - ipos) ' Seleccionar la derecha del cursor
cmbCombo.Pos = ipos ' restaurar el cursor
' PRINT "Seleccion = " & cmbCombo.Selection.Text & "longitud = " & ipos
Object.UNLOCK(cmbCombo) ' desbloquear el combo para que reciba eventos
ELSE ' no hay coincidencia
STOP EVENT ' cancelar el evento para no insertar la tecla pulsada
scad &= Key.Text
Object.Lock(cmbCombo) ' Bloquear el combo para que no dispare el evento Click o Change
cmbCombo.Text = scad
Object.UNLOCK(cmbCombo) ' desbloquear el combo para que reciba eventos
ENDIF
END