------------------------------------------------------------
[BUG/PRB.] VFP 9.0 FIX - PAGE SETUP DIALOG BOX
January 2025
------------------------------------------------------------
CCB
1. BUG:
In vfp9, the Page Setup Dialog Box has no the Printer button on Windows Vista or later.
There is no the bug in vfp6, vfp7 and vfp8.
Please refer to the picture pagesetup9.jpg:
2. CAUSE:
In vfp6, vfp7 and vfp8, it calls the PrintDlgA Windows API to show the Page Setup Dialog Box.
In vfp9, it calls the PageSetupDlgA Windows API to show the Page Setup Dialog Box.
But for some security reasons, the Printer button has been removed on Windows Vista or later.
3. RESOLUTION:
We can write some code to fix the BUG.
vfpa_pagesetupdlga :: ; proc near
push ebp
mov ebp,esp
sub esp,48h
; push ebx
push esi
push edi
cmp dword ptr vfpa_sys9075_data,00h
jne vfpa_pagesetupdlga_start
push dword ptr [ebp+08h]
call PageSetupDlgA
mov dword ptr [ebp-04h],eax
jmp vfpa_pagesetupdlga_end
vfpa_pagesetupdlga_start:
mov esi,dword ptr [ebp+08h]
lea edi,dword ptr [ebp-48h]
xor eax,eax
cld
movsd
sub dword ptr [edi-4],(54h-42h)
movsd
movsd
movsd
stosd
movsd
; PD_PRINTSETUP (0x00000040) + PD_ENABLESETUPTEMPLATE (0x00008000)
mov dword ptr [edi-4],00000040h+00008000h
stosw
stosw
stosw
stosw
stosw
add esi,4*2+4*4+4*4
movsd
mov dword ptr [edi-4],00400000h
movsd
stosd
movsd
add esi,4
stosd
movsd
mov dword ptr [edi-4],0616h
stosd
movsd
lea eax,dword ptr [ebp-48h]
push eax
call PrintDlgA
mov dword ptr [ebp-04h],eax
lea esi,dword ptr [ebp-48h]
mov edi,dword ptr [ebp+08h]
xor eax,eax
cld
movsd
add dword ptr [edi-4],(54h-42h)
movsd
movsd
movsd
add esi,4
movsd
; PSD_DISABLEMARGINS (0x00000010)
mov dword ptr [edi-4],00000010h
add esi,2*5
add edi,4*2+4*4+4*4
movsd
movsd
add esi,4
movsd
add edi,4
add esi,4
movsd
add esi,4
movsd
vfpa_pagesetupdlga_end:
pop edi
pop esi
; pop ebx
mov eax,dword ptr [ebp-04h]
mov esp,ebp
pop ebp
ret 04h
; vfpa_pagesetupdlga endp
We can use the vfpa_pagesetupdlga() function instead of the PageSetupDlgA Windows API,
then the Page Setup Dialog Box will show the Printer and Properties buttons.
Please refer to the picture pagesetup.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.
5. REFERENCE WEBSITES:
1, baiyujia.com:
http://www.baiyujia.com
http://www.baiyujia.com/vfpdocuments/f_vfp9fix205.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix335.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix336.asp
2, foxite.com:
http://www.foxite.com/archives/sys1037-not-having-printers-button-0000158140.htm
http://www.foxite.com/archives/printer-button-on-page-set-up-sys1037-0000318953.htm
3, microsoft.com:
http://connect.microsoft.com/VisualStudio/feedback/details/286313/vfp-sys-1037-no-longer-has-a-printer-button-in-vista
http://social.msdn.microsoft.com/Forums/en-US/adcf515c-a1f3-4dce-a2b6-b0ad8286fb42/cant-switch-printers-from-vfp
6. OTHER:
For reference only, there is no guarantees.
Any questions or suggestions, please send me an email at ccb2000@163.com.
|