Hi Andy, this is what I'm currently using (but getting the inaccurate line aim), is this what you meant ?? :
Private Function m_CreateFrame() As Shape
'
' Create a shape top left in order to keep the other
' elements in the correct offset positions
'
Dim lngColor As Long
On Error GoTo ErrCreateFrame
If m_blnUseUF Then
If m_frmUFCanvas.BackColor >= 0 Then
lngColor = m_frmUFCanvas.BackColor
Else
lngColor = m_frmUFCanvas.BackColor And &HFF
lngColor = GetSysColor(lngColor)
End If
Set m_CreateFrame = m_shtHolder.Shapes.AddShape(msoShapeRectangle, 0, 0, m_frmUFCanvas.InsideWidth - 1, m_frmUFCanvas.InsideHeight - 1)
Else
If m_objCanvas.BackColor >= 0 Then
lngColor = m_objCanvas.BackColor
Else
lngColor = m_objCanvas.BackColor And &HFF
lngColor = GetSysColor(lngColor)
End If
Set m_CreateFrame = m_shtHolder.Shapes.AddShape(msoShapeRectangle, 0, 0, m_objCanvas.Width - 1, m_objCanvas.Height - 1)
End If
With m_CreateFrame
With .Fill
.ForeColor.RGB = lngColor
.BackColor.RGB = lngColor
End With
.Line.BackColor.RGB = lngColor
.Line.ForeColor.RGB = lngColor
.ZOrder msoSendToBack
End With
Exit Function
ErrCreateFrame:
Set m_CreateFrame = Nothing
Exit Function
End Function