-----------------------------------------------------------------------
[BUG/PRB.] VFP 9.0 FIX - FIX THE REPORT OBJECTS ARE TOO LARGE
January 2026
-----------------------------------------------------------------------
CCB
1. BUG:
In vfp9, if we set ReportBehavior 90, the report objects are too large when set scaling to greater than 100% on Windows 10.
The bug occurs on Windows 8.1 and Windows 10, it also occurs when we uncheck the checkbox "Use Windows XP Style DPI Scaling"
on Windows Vista, Windows 7 and Windows 8, it does not occur on early Windows XP.
The bug only occurs when set ReportBehavior 90, it does not occur when set ReportBehavior 80.
The bug was reported by John Ryan.
In vfp9, when we set scaling to 100%, the report objects are normal, please refer to the picture testscaling100-vfp9.jpg:
In vfp9, when we set scaling to 125%, the report objects are too large, please refer to the picture testscaling125-vfp9.jpg:
2. CAUSE:
There are some BUGs in the following code.
3. RESOLUTION:
We can write some code to fix the BUG.
Fun495aaa :: ; proc near
push ebp ;0x00495aaa : 55
mov ebp , esp ;0x00495aab : 8bec
sub esp , 050h ;0x00495aad : 83ec50
push esi ;0x00495ab0 : 56
push edi ;0x00495ab1 : 57
mov esi , eax ;0x00495ab2 : 8bf0
pushd 08h ;0x00495ab4 : 6a08
lea eax , dword ptr [ ebp - 28 ] ;0x00495ab6 : 8d45e4
call Fun4a2b78 ;0x00495ab9 : e8bad00000
lea eax , dword ptr [ ebp - 76 ] ;0x00495abe : 8d45b4
mov dword ptr [ ebp - 32 ] , eax ;0x00495ac1 : 8945e0
mov eax , dword ptr [ ebx + 03BCh ] ;0x00495ac4 : 8b83bc030000
mov dword ptr [ ebp - 4 ] , eax ;0x00495aca : 8945fc
mov eax , dword ptr [ ebx + 03C0h ] ;0x00495acd : 8b83c0030000
mov dword ptr [ ebp - 8 ] , eax ;0x00495ad3 : 8945f8
lea eax , dword ptr [ ebp + 8 ] ;0x00495ad6 : 8d4508
push eax ;0x00495ad9 : 50
lea edx , dword ptr [ ebp - 32 ] ;0x00495ada : 8d55e0
call Fun49e575 ;0x00495add : e8938a0000
xor edi , edi ;0x00495ae2 : 33ff
push edi ;0x00495ae4 : 57
push dword ptr [ ebp - 32 ] ;0x00495ae5 : ff75e0
xor ecx , ecx ;0x00495ae8 : 33c9
lea eax , dword ptr [ ebp - 28 ] ;0x00495aea : 8d45e4
call Fun4a28ba ;0x00495aed : e8c8cd0000
mov eax , dword ptr [esi] ;0x00495af2 : 8b06
add eax , dword ptr [ ebp - 4 ] ;0x00495af4 : 0345fc
;
; ------------------------------------------------------------
; VFP 9.0 FIX - FIX THE REPORT OBJECTS ARE TOO LARGE
; August 2018
; ------------------------------------------------------------
; CCB
;
; In vfp9, if we set ReportBehavior 90, the report objects are too large when set scaling to greater than 100% on Windows 10.
;
; 2018/8/22, by ccb
;
cmp dword ptr vfpa_report_isreportform,00h
je Label495af7
cmp byte ptr [ Data93c280 ] , 05Ah
jb Label495af7
cmp dword ptr vfpa_sys9009_data,00h
je Label495af7
mov ecx,dword ptr vfpa_getdpiforwindow_dpi
cmp ecx,dword ptr vfpa_getdpiforsystem_dpi
jbe Label495af7
push dword ptr vfpa_getdpiforwindow_dpi
push dword ptr vfpa_getdpiforsystem_dpi
push eax
call MulDiv
Label495af7 ::
lea edx , dword ptr [ ebp - 32 ] ;0x00495af7 : 8d55e0
mov dword ptr [ ebp + 8 ] , eax ;0x00495afa : 894508
lea eax , dword ptr [ ebp + 8 ] ;0x00495afd : 8d4508
push eax ;0x00495b00 : 50
call Fun49e575 ;0x00495b01 : e86f8a0000
push edi ;0x00495b06 : 57
push dword ptr [ ebp - 32 ] ;0x00495b07 : ff75e0
xor ecx , ecx ;0x00495b0a : 33c9
inc ecx ;0x00495b0c : 41
lea eax , dword ptr [ ebp - 28 ] ;0x00495b0d : 8d45e4
call Fun4a28ba ;0x00495b10 : e8a5cd0000
mov eax , dword ptr [ esi + 4 ] ;0x00495b15 : 8b4604
add eax , dword ptr [ ebp - 8 ] ;0x00495b18 : 0345f8
;
; ------------------------------------------------------------
; VFP 9.0 FIX - FIX THE REPORT OBJECTS ARE TOO LARGE
; August 2018
; ------------------------------------------------------------
; CCB
;
; In vfp9, if we set ReportBehavior 90, the report objects are too large when set scaling to greater than 100% on Windows 10.
;
; 2018/8/22, by ccb
;
cmp dword ptr vfpa_report_isreportform,00h
je Label495b1b
cmp byte ptr [ Data93c280 ] , 05Ah
jb Label495b1b
cmp dword ptr vfpa_sys9009_data,00h
je Label495b1b
mov ecx,dword ptr vfpa_getdpiforwindow_dpi
cmp ecx,dword ptr vfpa_getdpiforsystem_dpi
jbe Label495b1b
push dword ptr vfpa_getdpiforwindow_dpi
push dword ptr vfpa_getdpiforsystem_dpi
push eax
call MulDiv
Label495b1b ::
lea edx , dword ptr [ ebp - 32 ] ;0x00495b1b : 8d55e0
mov dword ptr [ ebp + 8 ] , eax ;0x00495b1e : 894508
lea eax , dword ptr [ ebp + 8 ] ;0x00495b21 : 8d4508
push eax ;0x00495b24 : 50
call Fun49e575 ;0x00495b25 : e84b8a0000
push edi ;0x00495b2a : 57
push dword ptr [ ebp - 32 ] ;0x00495b2b : ff75e0
lea eax , dword ptr [ ebp - 28 ] ;0x00495b2e : 8d45e4
pushd 02h ;0x00495b31 : 6a02
pop ecx ;0x00495b33 : 59
call Fun4a28ba ;0x00495b34 : e881cd0000
mov eax , dword ptr [ esi + 8 ] ;0x00495b39 : 8b4608
sub eax , dword ptr [esi] ;0x00495b3c : 2b06
;
; ------------------------------------------------------------
; VFP 9.0 FIX - FIX THE REPORT OBJECTS ARE TOO LARGE
; August 2018
; ------------------------------------------------------------
; CCB
;
; In vfp9, if we set ReportBehavior 90, the report objects are too large when set scaling to greater than 100% on Windows 10.
;
; 2018/8/22, by ccb
;
cmp dword ptr vfpa_report_isreportform,00h
je Label495b3e
cmp byte ptr [ Data93c280 ] , 05Ah
jb Label495b3e
cmp dword ptr vfpa_sys9009_data,00h
je Label495b3e
mov ecx,dword ptr vfpa_getdpiforwindow_dpi
cmp ecx,dword ptr vfpa_getdpiforsystem_dpi
jbe Label495b3e
push dword ptr vfpa_getdpiforwindow_dpi
push dword ptr vfpa_getdpiforsystem_dpi
push eax
call MulDiv
Label495b3e ::
lea edx , dword ptr [ ebp - 32 ] ;0x00495b3e : 8d55e0
mov dword ptr [ ebp + 8 ] , eax ;0x00495b41 : 894508
lea eax , dword ptr [ ebp + 8 ] ;0x00495b44 : 8d4508
push eax ;0x00495b47 : 50
call Fun49e575 ;0x00495b48 : e8288a0000
push edi ;0x00495b4d : 57
push dword ptr [ ebp - 32 ] ;0x00495b4e : ff75e0
lea eax , dword ptr [ ebp - 28 ] ;0x00495b51 : 8d45e4
pushd 03h ;0x00495b54 : 6a03
pop ecx ;0x00495b56 : 59
call Fun4a28ba ;0x00495b57 : e85ecd0000
mov eax , dword ptr [ esi + 12 ] ;0x00495b5c : 8b460c
sub eax , dword ptr [ esi + 4 ] ;0x00495b5f : 2b4604
;
; ------------------------------------------------------------
; VFP 9.0 FIX - FIX THE REPORT OBJECTS ARE TOO LARGE
; August 2018
; ------------------------------------------------------------
; CCB
;
; In vfp9, if we set ReportBehavior 90, the report objects are too large when set scaling to greater than 100% on Windows 10.
;
; 2018/8/22, by ccb
;
cmp dword ptr vfpa_report_isreportform,00h
je Label495b62
cmp byte ptr [ Data93c280 ] , 05Ah
jb Label495b62
cmp dword ptr vfpa_sys9009_data,00h
je Label495b62
mov ecx,dword ptr vfpa_getdpiforwindow_dpi
cmp ecx,dword ptr vfpa_getdpiforsystem_dpi
jbe Label495b62
push dword ptr vfpa_getdpiforwindow_dpi
push dword ptr vfpa_getdpiforsystem_dpi
push eax
call MulDiv
Label495b62 ::
lea edx , dword ptr [ ebp - 32 ] ;0x00495b62 : 8d55e0
mov dword ptr [ ebp + 8 ] , eax ;0x00495b65 : 894508
lea eax , dword ptr [ ebp + 8 ] ;0x00495b68 : 8d4508
push eax ;0x00495b6b : 50
call Fun49e575 ;0x00495b6c : e8048a0000
push edi ;0x00495b71 : 57
push dword ptr [ ebp - 32 ] ;0x00495b72 : ff75e0
lea eax , dword ptr [ ebp - 28 ] ;0x00495b75 : 8d45e4
pushd 04h ;0x00495b78 : 6a04
pop ecx ;0x00495b7a : 59
call Fun4a28ba ;0x00495b7b : e83acd0000
mov eax , dword ptr [ ebp + 16 ] ;0x00495b80 : 8b4510
mov dword ptr [ ebp + 8 ] , eax ;0x00495b83 : 894508
lea eax , dword ptr [ ebp + 8 ] ;0x00495b86 : 8d4508
push eax ;0x00495b89 : 50
lea edx , dword ptr [ ebp - 32 ] ;0x00495b8a : 8d55e0
call Fun49e575 ;0x00495b8d : e8e3890000
push edi ;0x00495b92 : 57
push dword ptr [ ebp - 32 ] ;0x00495b93 : ff75e0
lea eax , dword ptr [ ebp - 28 ] ;0x00495b96 : 8d45e4
pushd 05h ;0x00495b99 : 6a05
pop ecx ;0x00495b9b : 59
call Fun4a28ba ;0x00495b9c : e819cd0000
push edi ;0x00495ba1 : 57
push dword ptr [ ebp + 12 ] ;0x00495ba2 : ff750c
lea eax , dword ptr [ ebp - 28 ] ;0x00495ba5 : 8d45e4
pushd 06h ;0x00495ba8 : 6a06
pop ecx ;0x00495baa : 59
call Fun4a28ba ;0x00495bab : e80acd0000
lea eax , dword ptr [ ebp + 20 ] ;0x00495bb0 : 8d4514
push eax ;0x00495bb3 : 50
lea edx , dword ptr [ ebp - 32 ] ;0x00495bb4 : 8d55e0
call Fun49e575 ;0x00495bb7 : e8b9890000
push edi ;0x00495bbc : 57
push dword ptr [ ebp - 32 ] ;0x00495bbd : ff75e0
lea eax , dword ptr [ ebp - 28 ] ;0x00495bc0 : 8d45e4
pushd 07h ;0x00495bc3 : 6a07
pop ecx ;0x00495bc5 : 59
call Fun4a28ba ;0x00495bc6 : e8efcc0000
push ecx ;0x00495bcb : 51
mov eax , esp ;0x00495bcc : 8bc4
mov dword ptr [eax] , edi ;0x00495bce : 8938
lea eax , dword ptr [ ebp - 28 ] ;0x00495bd0 : 8d45e4
push eax ;0x00495bd3 : 50
pushd 0242h ;0x00495bd4 : 6842020000
push ebx ;0x00495bd9 : 53
call Fun495a89 ;0x00495bda : e8aafeffff
lea esi , dword ptr [ ebp - 28 ] ;0x00495bdf : 8d75e4
call Fun4a29bc ;0x00495be2 : e8d5cd0000
pop edi ;0x00495be7 : 5f
pop esi ;0x00495be8 : 5e
leave ;0x00495be9 : c9
ret 010h ;0x00495bea : c21000
Now in VFP Advanced, when we set scaling to 125%, the report objects are normal, please refer to the picture testscaling125-vfpa.jpg:
4. APPLIES TO:
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.
IMPORTANT NOTE FOR WINDOWS 10:
The GetDpiForSystem and GetDpiForWindow Windows APIs are only on Windows 10 version 1607 (August 2, 2016) or later,
the bug has been fixed on Windows 10 version 1607 (August 2, 2016) or later,
so recommend to upgrade to Windows 10 version 1607 (August 2, 2016) or later.
If there is no the registry key "HKEY_CURRENT_USER\Control Panel\Desktop\Win8DpiScaling" in the Windows registry,
the GetDpiForWindow Windows API always returns 96,
so we MUST create the following registry key:
[HKEY_CURRENT_USER\Control Panel\Desktop]
"Win8DpiScaling"=dword:00000000
and then the GetDpiForWindow Windows API can return correct value.
5. REFERENCE WEBSITES:
1, baiyujia.com:
http://www.baiyujia.com
http://www.baiyujia.com/vfpdocuments/f_vfp9fix56.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix57.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix58.asp
2, foxite.com:
https://www.foxite.com/archives/vfp-9-behaves-badly-under-windows-81-0000401619.htm
https://www.foxite.com/archives/foxypreviewer-problem-on-150-display-0000450022.htm
https://www.foxite.com/archives/reportlistener-outputpage-crop-0000427655.htm
3, microsoft.com:
https://social.msdn.microsoft.com/Forums/en-US/b6b91adb-9720-4e75-82a7-d5ba3ad40c43/vfp9-reports-on-windows-8-with-large-screen-text-issue
6. OTHER:
For reference only, there is no guarantees.
Any questions or suggestions, please send me an email at ccb2000@163.com.
|