------------------------------------------------------------
[BUG/PRB.] VFP 9.0 FIX - FONT PROPERTY PAGE
January 2026
------------------------------------------------------------
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.
|