Page 1 of 1

Combobox Problem

Posted: Wed Feb 21, 2007 6:39 pm
by cdmmaui
Hello,

When the user presses a character to move to the item within a COMBOBOX, it does not work. I updated to version 7.01.

Posted: Wed Feb 21, 2007 11:05 pm
by driessen
I noticed that too.

To solve it for the moment, I linked in the COMBOBOX.PRG from FW 2.7.

Now it's working fine.

Regards,

Michel

Posted: Wed Feb 21, 2007 11:16 pm
by cdmmaui
Hi Michel,

Thank you. Can you send me the 2.7 PRG as I over wrote my version with the update.

Posted: Thu Feb 22, 2007 12:16 am
by driessen
No problem.

Here it is.

Just copy and paste and you've got is.

Michel

*edited by admin*

Re: Combobox Problem

Posted: Sun Mar 04, 2007 1:55 pm
by Ugo
cdmmaui wrote:When the user presses a character to move to the item within a COMBOBOX, it does not work. I updated to version 7.01.
Yes, confirm!

for solve, replace the method KeyChar with this:

Code: Select all

//----------------------------------------------------------------------------//

METHOD KeyChar( nKey, nFlags ) CLASS TComboBox

   local nNewAT := 0, nOldAT := ::nAT, uItem

   do case
      case nKey = 32   // VK_DELETE (DO NOT WORK!)
           ::cSearchKey := ""
           nNewAt := 1
           uItem := ::aItems[nNewAt]
           
      case nKey = VK_BACK
           ::cSearchKey := Left( ::cSearchKey, Len( ::cSearchKey ) - 1 )
           
      case nKey = 190
           nKey := 0
           ::cSearchKey += "."
           
      otherwise
           ::cSearchKey += Upper( Chr( nKey ) )
           
   endcase
   
   if Empty( uItem )
      if nNewAt == 0
         nNewAt := AScan( ::aItems, {|x| Upper(x) = ::cSearchKey } )
         IF nNewAt > 0 .AND. Len( ::aItems ) <= nNewAt
            uItem := ::aItems[ nNewAt ]
         ENDIF
         uItem := ::aItems[ IIF( nNewAt > 0, nNewAt, Max( ::nAT, 1 ) ) ]
      else
         uItem := ::aItems[ Max( nNewAt, 1) ]
      endif
   endif
   ::Set( uItem )

   if ::bChange != nil .and. ( nNewAT != nOldAt .and. nNewAt != 0 )
      Eval( ::bChange, Self, ::varGet() )
   endif

   if nKey == VK_RETURN
      return ::oWnd:GoNextCtrl( ::hWnd )
   endif

return 0   // Must be 0 - We don't want API default behavior.

Posted: Sun Mar 04, 2007 7:51 pm
by Antonio Linares
FWH 7.01 implements incremental search in comboboxes, thats why if you press two chars, one after another, if searches for the item that starts with both chars (implemented by Ugo).

Ugo, thanks for the fix :-)