------------------------------------------------------------ [BUG/PRB.] VFP 9.0 FIX - FONT PROPERTY PAGE January 2024 ------------------------------------------------------------ CCB 1. BUG: If the ActiveX control uses the stock Font property, usually we can open the Font Property Page to set the control's Font property, but sometimes we can not open the Font Property Page. There is the same problem for the Color Property Page and the Picture Property Page. 2. CAUSE: In Visual C++ 6.0 (Visual Studio 98), the MFC ActiveX control uses the class CFontPropPage to set the control's Font property, it needs the MFC library file mfc40.dll to run. In Visual C++ 7.0 (Visual Studio .NET) or later, the MFC ActiveX control uses the class StockFontPage to set the control's Font property, it needs the MFC library file mfc40.dll and the file msstkprp.dll to run. There is no the file msstkprp.dll in Visual C++ 7.0 (Visual Studio .NET) or later, so we need to copy the file msstkprp.dll from Visual C++ 6.0 (Visual Studio 98) to the Windows system folder, and run the command regsvr32 c:\windows\system32\msstkprp.dll to register it, and then we can use the class StockFontPage to set the control's Font property. There is no the file msstkprp.dll 64-bit version too. We can use the class CFontPropPage instead of the class StockFontPage to set the control's Font property, and use the class CColorPropPage instead of the class StockColorPage to set the control's Color property, and use the class CPicturePropPage instead of the class StockPicturePage to set the control's Picture property, so it does not need the file msstkprp.dll, it only needs the MFC library file mfc40.dll to run. 3. RESOLUTION: We can write some code to fix the BUG. vfpa_olecreatepropertyframeindirect :: ; proc near push ebp mov ebp,esp sub esp,04h push ebx push esi push edi mov esi,dword ptr [ebp+08h] test esi,esi je vfpa_olecreatepropertyframeindirect_end mov ecx,dword ptr [esi+1Ch] test ecx,ecx je vfpa_olecreatepropertyframeindirect_end mov eax,dword ptr [esi+20h] test eax,eax je vfpa_olecreatepropertyframeindirect_end vfpa_olecreatepropertyframeindirect_loop: vfpa_olecreatepropertyframeindirect_font_start: ; {7EBDAAE0-8120-11CF-899F-00AA00688B10}, StockFontPage ("MS Stock Font Property Page Object") ; {0BE35200-8F91-11CE-9DE3-00AA004BB851}, CFontPropPage ("Font Property Page") cmp dword ptr [eax],07EBDAAE0h jne vfpa_olecreatepropertyframeindirect_font_end cmp dword ptr [eax+04h],011CF8120h jne vfpa_olecreatepropertyframeindirect_font_end cmp dword ptr [eax+08h],0AA009F89h jne vfpa_olecreatepropertyframeindirect_font_end cmp dword ptr [eax+0Ch],0108B6800h jne vfpa_olecreatepropertyframeindirect_font_end mov dword ptr [eax],00BE35200h mov dword ptr [eax+04h],011CE8F91h mov dword ptr [eax+08h],0AA00E39Dh mov dword ptr [eax+0Ch],051B84B00h jmp vfpa_olecreatepropertyframeindirect_end0 vfpa_olecreatepropertyframeindirect_font_end: vfpa_olecreatepropertyframeindirect_color_start: ; {7EBDAAE1-8120-11CF-899F-00AA00688B10}, StockColorPage ("MS Stock Color Property Page Object") ; {0BE35201-8F91-11CE-9DE3-00AA004BB851}, CColorPropPage ("Color Property Page") cmp dword ptr [eax],07EBDAAE1h jne vfpa_olecreatepropertyframeindirect_color_end cmp dword ptr [eax+04h],011CF8120h jne vfpa_olecreatepropertyframeindirect_color_end cmp dword ptr [eax+08h],0AA009F89h jne vfpa_olecreatepropertyframeindirect_color_end cmp dword ptr [eax+0Ch],0108B6800h jne vfpa_olecreatepropertyframeindirect_color_end mov dword ptr [eax],00BE35201h mov dword ptr [eax+04h],011CE8F91h mov dword ptr [eax+08h],0AA00E39Dh mov dword ptr [eax+0Ch],051B84B00h jmp vfpa_olecreatepropertyframeindirect_end0 vfpa_olecreatepropertyframeindirect_color_end: vfpa_olecreatepropertyframeindirect_picture_start: ; {7EBDAAE2-8120-11CF-899F-00AA00688B10}, StockPicturePage ("MS Stock Picture Property Page Object") ; {0BE35202-8F91-11CE-9DE3-00AA004BB851}, CPicturePropPage ("Picture Property Page") cmp dword ptr [eax],07EBDAAE2h jne vfpa_olecreatepropertyframeindirect_picture_end cmp dword ptr [eax+04h],011CF8120h jne vfpa_olecreatepropertyframeindirect_picture_end cmp dword ptr [eax+08h],0AA009F89h jne vfpa_olecreatepropertyframeindirect_picture_end cmp dword ptr [eax+0Ch],0108B6800h jne vfpa_olecreatepropertyframeindirect_picture_end mov dword ptr [eax],00BE35202h mov dword ptr [eax+04h],011CE8F91h mov dword ptr [eax+08h],0AA00E39Dh mov dword ptr [eax+0Ch],051B84B00h jmp vfpa_olecreatepropertyframeindirect_end0 vfpa_olecreatepropertyframeindirect_picture_end: vfpa_olecreatepropertyframeindirect_end0: add eax,10h dec ecx test ecx,ecx jne vfpa_olecreatepropertyframeindirect_loop vfpa_olecreatepropertyframeindirect_end: push esi call OleCreatePropertyFrameIndirect mov dword ptr [ebp-04h],eax pop edi pop esi pop ebx mov eax,dword ptr [ebp-04h] mov esp,ebp pop ebp ret 04h ; vfpa_olecreatepropertyframeindirect endp We can use the vfpa_olecreatepropertyframeindirect() function instead of the OleCreatePropertyFrameIndirect Windows API, so we can use the class CFontPropPage to set the control's Font property, and use the class CColorPropPage to set the control's Color property, and use the class CPicturePropPage to set the control's Picture property. 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 2, microsoft.com: https://msdn.microsoft.com/en-us/library/w1sc4t4k(v=vs.90).aspx https://social.technet.microsoft.com/Forums/en-US/2c80771b-eb63-4a85-a57c-bffe2d3035cb/class-not-registered?forum=excel https://social.msdn.microsoft.com/Forums/en-US/f7c9d4d2-dbfa-44bd-a804-9f2fa1d27093/vs6-to-vs2010-font?forum=vclanguage 3, stackoverflow.com: http://stackoverflow.com/questions/10524676/is-there-a-x64-version-of-msstkprp-dll 4, codeguru.com: http://www.codeguru.com/cpp/com-tech/activex/controls/article.php/c2647/Undocumented-MS-Stock-Property-Pages-In-VC5.htm 6. OTHER: For reference only, there is no guarantees. Any questions or suggestions, please send me an email at ccb2000@163.com. |