https://foro.gambas-es.org/viewtopic.php?f=4&t=1441&p=8350#p8350
-----------------------------------
angelnu
Viernes, 25 Febrero 2011, 21:16

Funcion Para Buscar En Un ComboBox Mientras Se  Escribe
-----------------------------------
Hola, estoy haciendo una función para buscar en un comboBox mientras se escribe, mas o menos funciona, quisiera que se resaltase el texto encontrado, lo hago mediante [code linenumbers=false syntax=gambas]
  cmbCombo.Select(ipos, Len(cmbCombo.Text) - ipos)[/code]
 
pero al restaurar la posición del cursor, el texto seleccionado se quita y no encuentro manera.

La función es [code linenumbers=false syntax=gambas] 
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 [/code]


