Not all OCX controls support a .BackColor property to change the background color, although the control itself allows changing it. Here GB32 conforms to VB too much. Rather than adding a property to the implementation – which would require another patch in executable code – we can use a different approach.
All OCX controls share a user-defined structure to store the current settings of the wrapped control. Setting and getting property values is sometimes nothing more than changing and setting a member of the structure. Setting and obtaining the background value is one of them. The BackColor property stores its value in the member at offset $B8 of the start of object’s data block. The following code changes the background of a StatusBar Ocx.
Form frm1
Ocx StatusBar sb1
Trace SetBkColorControl(sb1, RGB(23, 56, 229))
Do
Sleep
Until Me Is Nothing
Function SetBkColorControl(Ctrl As Control, Color As Long) As Long
Const OffBackColor = $B8
Local Long ObjPtr = Long{*Ctrl}
SetBkColorControl = Long{ObjPtr + OffBackColor}
{ObjPtr + OffBackColor} = Color
~InvalidateRect(Ctrl.hwnd, 0, 1)
' Notes
' 1 Using the IDispatch interface does not work
' when the GetTypeInfo doesn't support the
' the .BackColor property.
' BackColor is not a property of StatusBar
If 0 Then Ctrl.BackColor = Color
' 2 When using XP Visual Themes the Visual Style
' theme takes over and gets precedence over
' GB OCX propery settings.
EndFunc
Note – Not all controls let their background set this way. Just experiment.