--------------------------------------------------------------------------------
[ENHANCED] VFP 9.0 FIX - THE CLOSE BUTTON IN THE PRINT PREVIEW TOOLBAR
January 2025
--------------------------------------------------------------------------------
CCB
1. BUG:
In vfp9 (and vfp6, vfp7, vfp8), it will ALWAYS enable the Close button in the Print Preview toolbar.
2. CAUSE:
There are some BUGs in the following code.
3. RESOLUTION:
We can write some code to fix the BUG.
Fun40fc71 :: ; proc near
push ebp ;0x0040fc71 : 55
lea ebp , dword ptr [ esp - 120 ] ;0x0040fc72 : 8d6c2488
sub esp , 0D8h ;0x0040fc76 : 81ecd8000000
push esi ;0x0040fc7c : 56
push edi ;0x0040fc7d : 57
mov edi , ecx ;0x0040fc7e : 8bf9
mov esi , edx ;0x0040fc80 : 8bf2
mov dword ptr [ ebp + 116 ] , edi ;0x0040fc82 : 897d74
call Fun4367eb ;0x0040fc85 : e8616b0200
cmp eax , 0FFFFFFFFh ;0x0040fc8a : 83f8ff
jne Label40fdf9 ;0x0040fc8d : 0f8566010000
push ebx ;0x0040fc93 : 53
pushd 032h ;0x0040fc94 : 6a32
pop edi ;0x0040fc96 : 5f
push esi ;0x0040fc97 : 56
pushd 00h ;0x0040fc98 : 6a00
pushd 0600000h ;0x0040fc9a : 6800006000
pushd 02Ah ;0x0040fc9f : 6a2a
lea edx , dword ptr [ ebp + 100 ] ;0x0040fca1 : 8d5564
lea esi , dword ptr [ ebp - 96 ] ;0x0040fca4 : 8d75a0
mov dword ptr [ ebp + 100 ] , edi ;0x0040fca7 : 897d64
mov dword ptr [ ebp + 108 ] , 041h ;0x0040fcaa : c7456c41000000
mov dword ptr [ ebp + 104 ] , 064h ;0x0040fcb1 : c7456864000000
mov dword ptr [ ebp + 112 ] , 078h ;0x0040fcb8 : c7457078000000
call Fun4353bc ;0x0040fcbf : e8f8560200
push dword ptr [ ebp + 116 ] ;0x0040fcc4 : ff7574
mov dword ptr [ ebp - 8 ] , 0Eh ;0x0040fcc7 : c745f80e000000
mov dword ptr [ ebp - 48 ] , offset Label4377f7 ;0x0040fcce : c745d0f7774300
call Fun40fe0a ;0x0040fcd5 : e830010000
and byte ptr [ ebp - 19 ] , 0FBh ;0x0040fcda : 8065edfb
xor edx , edx ;0x0040fcde : 33d2
mov ecx , esi ;0x0040fce0 : 8bce
mov dword ptr [ ebp - 40 ] , eax ;0x0040fce2 : 8945d8
call Fun42ef1e ;0x0040fce5 : e834f20100
mov ebx , eax ;0x0040fcea : 8bd8
test ebx , ebx ;0x0040fcec : 85db
je Label615e3a ;0x0040fcee : 0f8446612000
;
; ---------------------------------------------------------------------
; VFP 9.0 FIX - THE CLOSE BUTTON IN THE PRINT PREVIEW TOOLBAR
; August 2021
; ---------------------------------------------------------------------
; CCB
;
; In vfp9, it will ALWAYS enable the Close button in the Print Preview toolbar.
; In VFP Advanced, it can enable or disable the Close button in the Print Preview toolbar.
;
; 2021/8/8, by ccb
;
Label40fcf4_closebutton_start ::
cmp dword ptr vfpa_closebutton_iscreatewindow,01h
jne Label40fcf4_closebutton_end
; mov ecx , dword ptr [eax]
; mov ecx , dword ptr [ecx]
; mov dword ptr vfpa_closebutton_hwnd,ecx
cmp dword ptr vfpa_report_isreportform,00h
je Label40fcf4_closebutton_end
cmp byte ptr [ Data93c280 ] , 05Ah
jae Label40fcf4_closebutton_end
; cmp dword ptr vfpa_closebutton_isshowwindow,01h
; jne Label40fcf4_closebutton_end
cmp dword ptr vfpa_sys9065_data,00h
jne Label40fcf4_closebutton_end
mov ecx , dword ptr [eax]
and dword ptr [ecx+50h] , 0FFFFBFFFh
; mov dword ptr vfpa_closebutton_hwnd,00h
Label40fcf4_closebutton_end ::
Label40fcf4 ::
mov edx , dword ptr [ Data9393b4 ] ;0x0040fcf4 : 8b15b4939300
test edx , edx ;0x0040fcfa : 85d2
jne Label615e44 ;0x0040fcfc : 0f8542612000
pushd 0832h ;0x0040fd02 : 6832080000
pushd 048h ;0x0040fd07 : 6a48
pop eax ;0x0040fd09 : 58
call Fun42bf2a ;0x0040fd0a : e81bc20100
test eax , eax ;0x0040fd0f : 85c0
mov dword ptr [ Data9393b4 ] , eax ;0x0040fd11 : a3b4939300
je Label40fdee ;0x0040fd16 : 0f84d2000000
xor edx , edx ;0x0040fd1c : 33d2
inc edx ;0x0040fd1e : 42
mov dword ptr [ Data939270 ] , edx ;0x0040fd1f : 891570929300
Label40fd25 ::
test ebx , ebx ;0x0040fd25 : 85db
je Label40fdd7 ;0x0040fd27 : 0f84aa000000
test eax , eax ;0x0040fd2d : 85c0
je Label40fdd7 ;0x0040fd2f : 0f84a2000000
mov eax , dword ptr [eax] ;0x0040fd35 : 8b00
mov ecx , dword ptr [ ebp + 116 ] ;0x0040fd37 : 8b4d74
lea esi , dword ptr [ edx + 8 * edx - 9 ] ;0x0040fd3a : 8d74d2f7
shl esi , 03h ;0x0040fd3e : c1e603
add eax , esi ;0x0040fd41 : 03c6
mov dword ptr [eax] , ecx ;0x0040fd43 : 8908
mov ecx , ebx ;0x0040fd45 : 8bcb
mov dword ptr [ eax + 4 ] , ebx ;0x0040fd47 : 895804
call Fun40fe25 ;0x0040fd4a : e8d6000000
mov ecx , ebx ;0x0040fd4f : 8bcb
mov dword ptr [ ebp + 108 ] , eax ;0x0040fd51 : 89456c
call Fun40fe96 ;0x0040fd54 : e83d010000
mov dword ptr [ ebp + 112 ] , eax ;0x0040fd59 : 894570
xor edx , edx ;0x0040fd5c : 33d2
lea ecx , dword ptr [ ebp + 108 ] ;0x0040fd5e : 8d4d6c
mov eax , ebx ;0x0040fd61 : 8bc3
call Fun427baa ;0x0040fd63 : e8427e0100
mov eax , dword ptr [ ebp + 108 ] ;0x0040fd68 : 8b456c
mov edx , dword ptr [ ebp + 112 ] ;0x0040fd6b : 8b5570
mov ecx , ebx ;0x0040fd6e : 8bcb
call Fun43799f ;0x0040fd70 : e82a7c0200
mov eax , dword ptr [ Data9393b4 ] ;0x0040fd75 : a1b4939300
mov eax , dword ptr [eax] ;0x0040fd7a : 8b00
add eax , esi ;0x0040fd7c : 03c6
mov dword ptr [ eax + 32 ] , 064h ;0x0040fd7e : c7402064000000
mov dword ptr [ eax + 28 ] , edi ;0x0040fd85 : 89781c
mov ecx , dword ptr [ebx] ;0x0040fd88 : 8b0b
mov ecx , dword ptr [ ecx + 0A0h ] ;0x0040fd8a : 8b89a0000000
mov dword ptr [ eax + 36 ] , ecx ;0x0040fd90 : 894824
mov ecx , dword ptr [ebx] ;0x0040fd93 : 8b0b
mov ecx , dword ptr [ ecx + 0A4h ] ;0x0040fd95 : 8b89a4000000
or dword ptr [ eax + 60 ] , 0FFFFFFFFh ;0x0040fd9b : 83483cff
or byte ptr [ eax + 45 ] , 02h ;0x0040fd9f : 80482d02
or dword ptr [ eax + 20 ] , 0FFFFFFFFh ;0x0040fda3 : 834814ff
or dword ptr [ eax + 24 ] , 0FFFFFFFFh ;0x0040fda7 : 834818ff
mov dword ptr [ eax + 40 ] , ecx ;0x0040fdab : 894828
xor ecx , ecx ;0x0040fdae : 33c9
push edi ;0x0040fdb0 : 57
mov dword ptr [ eax + 56 ] , ecx ;0x0040fdb1 : 894838
mov dword ptr [ eax + 64 ] , ecx ;0x0040fdb4 : 894840
mov dword ptr [ eax + 68 ] , ecx ;0x0040fdb7 : 894844
call Fun430c00 ;0x0040fdba : e8410e0200
mov ecx , dword ptr [ Data9393b4 ] ;0x0040fdbf : 8b0db4939300
mov ecx , dword ptr [ecx] ;0x0040fdc5 : 8b09
mov dword ptr [ esi + ecx + 16 ] , eax ;0x0040fdc7 : 89440e10
mov edx , 080000000h ;0x0040fdcb : ba00000080
mov ecx , ebx ;0x0040fdd0 : 8bcb
call Fun430b14 ;0x0040fdd2 : e83d0d0200
Label40fdd7 ::
mov ecx , dword ptr [ ebp + 116 ] ;0x0040fdd7 : 8b4d74
pushd 00h ;0x0040fdda : 6a00
pushd 00h ;0x0040fddc : 6a00
call Fun40ff00 ;0x0040fdde : e81d010000
xor eax , eax ;0x0040fde3 : 33c0
inc eax ;0x0040fde5 : 40
pop ebx ;0x0040fde6 : 5b
Label40fde7 ::
pop edi ;0x0040fde7 : 5f
pop esi ;0x0040fde8 : 5e
add ebp , 078h ;0x0040fde9 : 83c578
leave ;0x0040fdec : c9
ret ;0x0040fded : c3
Now In VFP Advanced, it can enable or disable the Close button in the Print Preview toolbar.
4. APPLIES TO:
VFP 6.0.8167.0
VFP 6.0.8961.0 (SP5)
VFP 7.0.0.9262
VFP 7.0.0.9465 (SP1)
VFP 8.0.0.2521
VFP 8.0.0.3117 (SP1)
VFP 9.0.0.2412
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
http://www.baiyujia.com/vfpdocuments/f_vfp9fix186.asp
6. OTHER:
For reference only, there is no guarantees.
Any questions or suggestions, please send me an email at ccb2000@163.com.
|