---------------------------------------------------------------
[BUG/PRB.] VFP 9.0 FIX - COMBOBOX CONTROL SELECT ITEM
January 2025
---------------------------------------------------------------
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
|