---------------------------------------------------------------
                      [BUG/PRB.] VFP 9.0 FIX - COMBOBOX CONTROL SELECT ITEM
                                 January 2024
                 ---------------------------------------------------------------
                                     CCB



1. BUG:

     In vfp9, for the ComboBox control, sometimes when we move the mouse to select one item, but we can not select the item.

     The bug only occurs in vfp 9.0.0.3504 (SP1) or later, it does not occur in vfp6, vfp7, vfp8 and vfp 9.0.0.2412.

     The bug was reported by Swen Kleinau and kangss.


2. CAUSE:

     There are some BUGs in the following code.


3. RESOLUTION:

     We can write some code to fix the BUG.

     Label8c7512 ::
             cmp  dword ptr [ ebp + 0100h ] , 07h                            ;0x008c7512 :        83bd0001000007
             jne Label8c755d                                                 ;0x008c7519 :        7542
             mov edx , 01h                                                   ;0x008c751b :        ba01000000
             mov ecx , edi                                                   ;0x008c7520 :        8bcf
             call Fun42f404                                                  ;0x008c7522 :        e8dd7eb6ff
             mov  eax , dword ptr [eax]                                      ;0x008c7527 :        8b00
             mov  ecx , dword ptr [ eax + 0D0h ]                             ;0x008c7529 :        8b88d0000000
             mov  edx , dword ptr [ecx]                                      ;0x008c752f :        8b11
             mov  esi , dword ptr [ edx + 20 ]                               ;0x008c7531 :        8b7214
             mov edx , 01h                                                   ;0x008c7534 :        ba01000000
             mov ecx , esi                                                   ;0x008c7539 :        8bce
             call Fun42f404                                                  ;0x008c753b :        e8c47eb6ff
             mov  eax , dword ptr [eax]                                      ;0x008c7540 :        8b00
             test  byte ptr [ eax + 12 ] , 01h                               ;0x008c7542 :        f6400c01
             je Label8c755d                                                  ;0x008c7546 :        7415
             mov edx , 01h                                                   ;0x008c7548 :        ba01000000
             mov ecx , esi                                                   ;0x008c754d :        8bce
             call Fun42f404                                                  ;0x008c754f :        e8b07eb6ff
             xor edx , edx                                                   ;0x008c7554 :        33d2
             mov ecx , eax                                                   ;0x008c7556 :        8bc8
             call Fun416d0b                                                  ;0x008c7558 :        e8aef7b4ff

     Label8c755d ::
             mov esi , edi                                                   ;0x008c755d :        8bf7
             mov ebx , ebp                                                   ;0x008c755f :        8bdd
             call Fun4f2324                                                  ;0x008c7561 :        e8beadc2ff
             and  dword ptr [ ebp + 016Ch ] , 0FFDFFFFFh                     ;0x008c7566 :        81a56c010000ffffdfff


     ;
     ;                 ----------------------------------------------------
     ;                      VFP 9.0 FIX - COMBOBOX CONTROL SELECT ITEM
     ;                                 January 2019
     ;                 ----------------------------------------------------
     ;                                     CCB
     ;
     ; For the ComboBox control, sometimes when we move the mouse to select one item, but we can not select the item.
     ;
     ; 2019/1/30, by ccb
     ;

             jmp Label8c75e4


             mov edx , 01h                                                   ;0x008c7570 :        ba01000000
             mov ecx , edi                                                   ;0x008c7575 :        8bcf
             call Fun42f404                                                  ;0x008c7577 :        e8887eb6ff
             mov esi , eax                                                   ;0x008c757c :        8bf0
             mov ecx , esi                                                   ;0x008c757e :        8bce
             call Fun426ed7                                                  ;0x008c7580 :        e852f9b5ff
             mov al ,  byte ptr [ Data936f50 ]                               ;0x008c7585 :        a0506f9300
             test al , al                                                    ;0x008c758a :        84c0
             je Label8c759a                                                  ;0x008c758c :        740c
             mov ecx , 01h                                                   ;0x008c758e :        b901000000
             call Fun790ffa                                                  ;0x008c7593 :        e8629aecff
             jmp Label8c75a2                                                 ;0x008c7598 :        eb08

     Label8c759a ::
             mov  ecx , dword ptr [esi]                                      ;0x008c759a :        8b0e
             mov  eax , dword ptr [ ecx + 098h ]                             ;0x008c759c :        8b8198000000

     Label8c75a2 ::
             pushd 09h                                                       ;0x008c75a2 :        6a09
             push eax                                                        ;0x008c75a4 :        50
             call Fun43ebb2                                                  ;0x008c75a5 :        e80876b7ff
             mov edx , 01h                                                   ;0x008c75aa :        ba01000000
             mov ecx , edi                                                   ;0x008c75af :        8bcf
             call Fun42f404                                                  ;0x008c75b1 :        e84e7eb6ff
             mov esi , eax                                                   ;0x008c75b6 :        8bf0
             mov ecx , esi                                                   ;0x008c75b8 :        8bce
             call Fun426ed7                                                  ;0x008c75ba :        e818f9b5ff
             mov al ,  byte ptr [ Data936f50 ]                               ;0x008c75bf :        a0506f9300
             test al , al                                                    ;0x008c75c4 :        84c0
             je Label8c75d4                                                  ;0x008c75c6 :        740c
             mov ecx , 01h                                                   ;0x008c75c8 :        b901000000
             call Fun790ffa                                                  ;0x008c75cd :        e8289aecff
             jmp Label8c75dc                                                 ;0x008c75d2 :        eb08

     Label8c75d4 ::
             mov  edx , dword ptr [esi]                                      ;0x008c75d4 :        8b16
             mov  eax , dword ptr [ edx + 098h ]                             ;0x008c75d6 :        8b8298000000

     Label8c75dc ::
             pushd 0Ah                                                       ;0x008c75dc :        6a0a
             push eax                                                        ;0x008c75de :        50
             call Fun43ebb2                                                  ;0x008c75df :        e8ce75b7ff

     Label8c75e4 ::
             test  byte ptr [ ebp + 0170h ] , 01h                            ;0x008c75e4 :        f6857001000001
             je Label8c769b                                                  ;0x008c75eb :        0f84aa000000
             xor edx , edx                                                   ;0x008c75f1 :        33d2
             lea ecx ,  dword ptr [ esp + 20 ]                               ;0x008c75f3 :        8d4c2414
             call Fun54ea34                                                  ;0x008c75f7 :        e83874c8ff
             mov  ebx , dword ptr [ esp + 76 ]                               ;0x008c75fc :        8b5c244c
             lea eax ,  dword ptr [ esp + 28 ]                               ;0x008c7600 :        8d44241c
             push eax                                                        ;0x008c7604 :        50
             mov eax , ebx                                                   ;0x008c7605 :        8bc3
             call Fun507352                                                  ;0x008c7607 :        e846fdc3ff
             mov edi , eax                                                   ;0x008c760c :        8bf8
             lea esi ,  dword ptr [ esp + 20 ]                               ;0x008c760e :        8d742414
             call Fun49fd9c                                                  ;0x008c7612 :        e88587bdff
             mov  ecx , dword ptr [ esp + 24 ]                               ;0x008c7617 :        8b4c2418
             mov  eax , dword ptr [ esp + 20 ]                               ;0x008c761b :        8b442414
             pushd 02h                                                       ;0x008c761f :        6a02
             lea edx ,  dword ptr [ esp + 32 ]                               ;0x008c7621 :        8d542420
             push edx                                                        ;0x008c7625 :        52
             push ecx                                                        ;0x008c7626 :        51
             push eax                                                        ;0x008c7627 :        50
             mov esi , eax                                                   ;0x008c7628 :        8bf0
             lea eax ,  dword ptr [ esp + 96 ]                               ;0x008c762a :        8d442460
             push eax                                                        ;0x008c762e :        50
             mov  eax , dword ptr [ esp + 48 ]                               ;0x008c762f :        8b442430
             mov edi , ecx                                                   ;0x008c7633 :        8bf9
             mov  dword ptr [ esp + 100 ] , 00h                              ;0x008c7635 :        c744246400000000
             call Fun49fc67                                                  ;0x008c763d :        e82586bdff
             test eax , eax                                                  ;0x008c7642 :        85c0
             je Label8c768c                                                  ;0x008c7644 :        7446
             nop                                                             ;0x008c7646 :        90

     Label8c7647 ::
             mov  eax , dword ptr [ esp + 80 ]                               ;0x008c7647 :        8b442450
             test eax , eax                                                  ;0x008c764b :        85c0
             je Label8c7675                                                  ;0x008c764d :        7426
             mov  edx , dword ptr [ Data9388dc ]                             ;0x008c764f :        8b15dc889300
             lea ecx ,  dword ptr [ eax + 4 * eax ]                          ;0x008c7655 :        8d0c80
             shl ecx , 05h                                                   ;0x008c7658 :        c1e105
             mov  cx , word ptr [ ecx + edx + 16 ]                           ;0x008c765b :        668b4c1110
             cmp cx , 033Ah                                                  ;0x008c7660 :        6681f93a03
             je Label8c7690                                                  ;0x008c7665 :        7429
             cmp cx , 033Eh                                                  ;0x008c7667 :        6681f93e03
             je Label8c7690                                                  ;0x008c766c :        7422
             cmp cx , 0336h                                                  ;0x008c766e :        6681f93603
             je Label8c7690                                                  ;0x008c7673 :        741b

     Label8c7675 ::
             pushd 02h                                                       ;0x008c7675 :        6a02
             lea ecx ,  dword ptr [ esp + 32 ]                               ;0x008c7677 :        8d4c2420
             push ecx                                                        ;0x008c767b :        51
             push edi                                                        ;0x008c767c :        57
             push esi                                                        ;0x008c767d :        56
             lea edx ,  dword ptr [ esp + 96 ]                               ;0x008c767e :        8d542460
             push edx                                                        ;0x008c7682 :        52
             call Fun49fc67                                                  ;0x008c7683 :        e8df85bdff
             test eax , eax                                                  ;0x008c7688 :        85c0
             jne Label8c7647                                                 ;0x008c768a :        75bb

     Label8c768c ::
             mov  eax , dword ptr [ esp + 80 ]                               ;0x008c768c :        8b442450

     Label8c7690 ::
             cmp eax , ebx                                                   ;0x008c7690 :        3bc3
             je Label8c769b                                                  ;0x008c7692 :        7407
             mov eax , ebx                                                   ;0x008c7694 :        8bc3
             call Fun8c99cd                                                  ;0x008c7696 :        e832230000

     Label8c769b ::
             cmp  dword ptr [ esp + 84 ] , 02h                               ;0x008c769b :        837c245402
             jne Label8c76ca                                                 ;0x008c76a0 :        7528
             mov  ebx , dword ptr [ ebp + 0140h ]                            ;0x008c76a2 :        8b9d40010000
             lea eax ,  dword ptr [ esp + 84 ]                               ;0x008c76a8 :        8d442454
             lea edi ,  dword ptr [ ebp + 24 ]                               ;0x008c76ac :        8d7d18
             push eax                                                        ;0x008c76af :        50
             call Fun4ebb38                                                  ;0x008c76b0 :        e88344c2ff
             test eax , eax                                                  ;0x008c76b5 :        85c0
             je Label8c76ca                                                  ;0x008c76b7 :        7411
             mov  edx , dword ptr [ esp + 84 ]                               ;0x008c76b9 :        8b542454
             mov  ecx , dword ptr [ ebp + 0140h ]                            ;0x008c76bd :        8b8d40010000
             pushd 00h                                                       ;0x008c76c3 :        6a00
             call Fun4ecea2                                                  ;0x008c76c5 :        e8d857c2ff

     Label8c76ca ::
             cmp  dword ptr [ ebp + 80 ] , 02h                               ;0x008c76ca :        837d5002
             jne Label8c76d7                                                 ;0x008c76ce :        7507
             mov  dword ptr [ ebp + 80 ] , 01h                               ;0x008c76d0 :        c7455001000000

     Label8c76d7 ::
             mov  eax , dword ptr [ ebp + 56 ]                               ;0x008c76d7 :        8b4538
             call Fun4defb8                                                  ;0x008c76da :        e8d978c1ff

     Label8c76df ::
             or  dword ptr [ ebp + 016Ch ] , 018h                            ;0x008c76df :        838d6c01000018

     Label8c76e6 ::
             mov  eax , dword ptr [ esp + 76 ]                               ;0x008c76e6 :        8b44244c
             mov ecx , ebp                                                   ;0x008c76ea :        8bcd
             call Fun48237c                                                  ;0x008c76ec :        e88bacbbff

     Label8c76f1 ::
             mov  eax , dword ptr [ esp + 16 ]                               ;0x008c76f1 :        8b442410
             pop edi                                                         ;0x008c76f5 :        5f
             pop esi                                                         ;0x008c76f6 :        5e
             pop ebp                                                         ;0x008c76f7 :        5d
             pop ebx                                                         ;0x008c76f8 :        5b
             add esp , 038h                                                  ;0x008c76f9 :        83c438
             ret 0Ch                                                         ;0x008c76fc :        c20c00

     For the Drop-down list box (ComboBox.Style=2),
     recommend to add the following code to the ComboBox.InteractiveChange() event to refresh the selected item:
     IF THIS.STYLE=2
        THIS.VALUE=THIS.VALUE
        THIS.REFRESH
     ENDIF


4. APPLIES TO:

     VFP 9.0.0.3504 (SP1)
     VFP 9.0.0.4611 (SP2)
     VFP 9.0.0.5015 (SP2)
     VFP 9.0.0.5411 (SP2)
     VFP 9.0.0.5721 (SP2)
     VFP 9.0.0.5815 (SP2)
     VFP 9.0.0.6303 (SP2)
     VFP 9.0.0.6602 (SP2)
     VFP 9.0.0.7423 (SP2)

     The bug has been fixed in VFP Advanced.


5. REFERENCE WEBSITES:

     1, baiyujia.com:
     http://www.baiyujia.com

     2, foxite.com:
     https://www.foxite.com/archives/vfp90-combobox-not-selecting-items-0000322918.htm

     3, mzvfp.com:
     http://www.mzvfp.com/read.php?tid=102302

     4, microsoft.com:
     https://social.msdn.microsoft.com/Forums/en-US/8702a050-8a09-4eaf-8b58-2e6a572512a8/vfp-90-combo-box-select-list-problem