tempo fa ho inserito la ricerca approssimata nel combo box, intendo che quando questo ha il focus, digitando sulla tastiera si sposta l'item al primo che corrisponde a quanto fino a quel momento è stato digitato.
La modifica fatta al Combobox è:
Code: Select all
//----------------------------------------------------------------------------//
#ifdef UGO
METHOD GotFocus() CLASS TComboBox
::cSearchKey := ""
Return Super:GotFocus()
#endif
//----------------------------------------------------------------------------//
METHOD KeyChar( nKey, nFlags ) CLASS TComboBox
#ifdef UGO
local nNewAT := 0, nOldAT := ::nAT
// Incremental search
if nKey = VK_DELETE // 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( ::aItems, {|x| upper(x) = ::cSearchKey} )
::Select( IIF( nNewAt > 0, nNewAt, ::nAT ))
endif
if ::bChange != nil .and. ( nNewAT != nOldAt .and. nNewAt != 0 )
Eval( ::bChange, Self, ::varGet() )
endif
if nKey == VK_RETURN
return ::oWnd:GoNextCtrl( ::hWnd )
endif
Super:KeyChar(nKey, nFlags)
RETURN 0 // Must be 0 - We don't want API default behavior.
#else
if nKey == VK_RETURN
return ::oWnd:GoNextCtrl( ::hWnd )
endif
return Super:KeyChar( nKey, nFlags )
#endif
in pratica nella variabile che dovrebbe contenere l'item c'è un numero che manda in errore la procedura al primo utilizzo.
Qualcuno ha un suggerimento?
Grazie per l'aiuto.