------------------------------------------------------------ [BUG/PRB.] VFP 9.0 FIX - PAGE SETUP DIALOG BOX January 2024 ------------------------------------------------------------ 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. |