Hi Jack
some month ago i posted a sleInputTimer class in the X#-Forum. With some
small modifications the code seems to work with a DROPDOWNLIST Combo too. To
see what's going on, i added some console output to the attached
cmbTimerSearch class. Just inherit your comboBox from cmbTimerSearch and
give it a try.
What the CB_SELECTSTRING msg does is described here:
https://docs.microsoft.com/en-us/windows/win32/controls/cb-selectstring
regards
Karl-Heinz
CLASS cmbTimerSearch INHERIT ComboBox
PROTECT _lTimerActive AS LOGIC
PROTECT _nInterval := 400 AS DWORD
PROTECT _cSearch AS STRING
METHOD Destroy() CLASS cmbTimerSearch
SELF:StopTimer()
SUPER:Destroy()
RETURN NIL
METHOD Dispatch ( oEv ) CLASS cmbTimerSearch
LOCAL oEvent AS Event
oEvent := oEv
DO CASE
CASE oEvent:message == WM_CHAR
_cSearch += CHR (oEvent:wParam )
CASE oEvent:message == WM_KEYUP
SELF:StartTimer()
CASE oEvent:message == WM_KEYDOWN
SELF:StopTimer()
CASE oEvent:message == WM_KILLFOCUS
SELF:StopTimer()
CASE oEvent:message == WM_TIMER
IF ! Empty ( _cSearch )
SELF:StopTimer()
? "Search for:" , _cSearch := "R-" + _cSearch
? SendMessage( SELF:Handle() , CB_SELECTSTRING , DWORD (
_CAST , -1 ) , LONG (_CAST, String2Psz ( _cSearch ) ) )
_cSearch := ""
ENDIF
ENDCASE
RETURN SUPER:Dispatch ( oEvent )
METHOD init (oOwner, nID, oPoint, oDimension, kComboType, kStyle ) CLASS
cmbTimerSearch
SUPER:init (oOwner, nID, oPoint, oDimension, kComboType, kStyle )
RETURN SELF
METHOD SetTimerInterval ( n ) CLASS cmbTimerSearch
_nInterval := n
RETURN SELF
METHOD StartTimer() CLASS cmbTimerSearch
IF ! _lTimerActive
IF SetTimer(SELF:Handle(), 4711 , _nInterval , NULL_PTR) == 4711
_lTimerActive := TRUE
ENDIF
ENDIF
RETURN _lTimerActive
METHOD StopTimer() CLASS cmbTimerSearch
IF _lTimerActive
IF KillTimer ( SELF:Handle() , 4711 )
_lTimerActive := FALSE
ENDIF
ENDIF
RETURN ! _lTimerActive