Hace tiempo que uso el DBCombo, pero recien me di cuenta que no funciona bien el autoserch. Despues de leer varios post del foro me puse a analizar el codigo fuente DBCombo.prg y ComboBox.prg.
Ahi vi que:
1. cSearchKey esta definida en ambos prg, creo que no deberia estar en DBCombo.prg
2. En el metodo KeyChar(..) de DBCombo.prg se debe colocar RETURN 0 una vez que se a encontrado un nuevo item y evaluado bChange, si no se hace esto DBCombo ejecuta Super:KeyChar(nKey, nFlags) y ahi se ejecuta otra busqueda que cambia de nuevo la posicion del DBCombo.
Mi version de FWH es 8.02 y el codigo corregido en concreto seria:
- Code: Select all Expand view RUN
METHOD KeyChar( nKey, nFlags) CLASS TDBCombo
local nNewAT := 0, nOldAT:=::nAT
// Incremental search
if nKey = 32 // space resets the search
::cSearchKey := ""
::Set(1)
else
if nKey = VK_BACK
::cSearchKey := left(::cSearchKey,Len(::cSearchKey)-1)
else
::cSearchKey += upper(chr(nKey))
endif
nNewAT := ascan(::aList, {|x| upper(x) = ::cSearchKey} )
if nNewAt != nOldAt .and. nNewAT != 0 // If found and changed
if ::lSound
tone(60,.3) // sound if searchkey found
endif
::set( nNewAt )
if ::bChange != nil
if ::oGet != nil // Always not nil for dropdown
::oGet:VarPut( Eval( ::bSetGet ) ) // udate variable before calling bChange
::oGet:Refresh()
endif
Eval( ::bChange, Self, ::varGet() )
endif
return 0 // <- ACA ESTA EL CAMBIO!!!!!!!!
else
::cSearchKey := left(::cSearchKey,Len(::cSearchKey)-1)
endif
endif
Super:KeyChar(nKey, nFlags)
RETURN 0 // Must be 0 - We don't want API default behavior.
Con esta correccion corre bien el DBCombo .
Saludos
Rolando
Sauro Srl.
Informática y Sistemas
Cochabamba - Bolivia
FWH 8.02 xharbour 1.1.0 (SimpLex)