March 3, 2021
Hot Topics:

ActiveX Controls: The Definitive Guide

  • By Sam Huggill
  • Send Email »
  • More Articles »

For this example, rename the control ctlCaption. Draw a label on to the usercontrol and rename it lblCaption. Set its AutoSize property to True. Now add this code into the Usercontrol's Resize method:

Private Sub UserControl_Resize()
'Resize the control based on the caption
lblCaption.Move ScaleLeft, _
                ScaleTop, _
                lblCaption.Width, _

If lblCaption.Width > 0 Then
  UserControl.Width = lblCaption.Width
  UserControl.Height = lblCaption.Height
End If
End Sub

The basis of this control is to act as a caption. At the moment you can't apply any of the Font, ForeColor or BackColor properties. We will now add code to the Let procedures to make them change the label. Here are the new property procedures:

Public Property Set Font( _ 
        ByVal New_Font As Font)
  Set lblCaption.Font = New_Font
  PropertyChanged "Font"
End Property

Public Property Let ForeColor( _
         ByVal New_ForeColor As OLE_COLOR)
  lblCaption.ForeColor = New_ForeColor
  PropertyChanged "ForeColor"
End Property

Public Property Let BackColor( _
         ByVal New_BackColor As OLE_COLOR)
  lblCaption.BackColor = New_BackColor
  PropertyChanged "BackColor"
End Property

The property Get procedures also need to be ammended:

Public Property Get Font() As Font
  Set Font = lblCaption.Font
End Property

Public Property Get ForeColor() As OLE_COLOR
  ForeColor = lblCaption.BackColor
End Property

Public Property Get BackColor() As OLE_COLOR
  BackColor = lblCaption.BackColor
End Property

Add a Standard EXE project and draw our control onto the form. Change the properties and watch the label change at the same time. But we are missing one thing. The ability to change the caption. Paste these two procedures in:

Property Get Caption() As String
  Caption = lblCaption.Caption
End Property

Property Let Caption(ByVal New_Caption As String)
  lblCaption.Caption = New_Caption
  PropertyChanged "Caption"
End Property

We also need to change the WriteProperties and ReadProperties procedures:

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
   lblCaption.BackColor = PropBag.ReadProperty("BackColor",&H8000000F)
   lblCaption.ForeColor = PropBag.ReadProperty("ForeColor",&H80000012)
   UserControl.Enabled = PropBag.ReadProperty("Enabled", True)
   Set lblCaption = PropBag.ReadProperty("Font", Ambient.Font)
   lblCaption.Caption = PropBag.ReadProperty("Caption","Caption Control")
End Sub

Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
    Call PropBag.WriteProperty("BackColor", lblCaption.BackColor,&H8000000F)
    Call PropBag.WriteProperty("ForeColor", lblCaption.ForeColor,&H80000012)
    Call PropBag.WriteProperty("Enabled", UserControl.Enabled,True)
    Call PropBag.WriteProperty("Font", lblCaption.Font,Ambient.Font)
    Call PropBag.WriteProperty("Caption", lblCaption.Caption,"Caption Control")
End Sub

There you have your first activex control.

In the next part we will discuss events and how you can make a better control.

Page 3 of 3

This article was originally published on November 20, 2002

Enterprise Development Update

Don't miss an article. Subscribe to our newsletter below.

Thanks for your registration, follow us on our social networks to keep up-to-date