Bueno lo único que veo tomando en cuenta Top, Left, Height y Width es lo siguiente:
Primero que nada debes tomar en cuenta que si el formulario hijo debe estar en el centro del formulario padre, se cumple lo siguiente:
Siempre que el formulario hijo tenga medidas menores a las del formulario padre:
1) Al estar el hijo al centro del formulario padre, habrá un área del formulario padre que el formulario hijo no abarcará, por tanto el espacio sobre el formulario hijo será igual al espacio debajo de este y el espacio de un lado igual al espacio del otro lado.
2) El Top se toma de arriba hacia abajo por tanto el punto más arriba cero el punto cero.
3) El Left se toma de izquierda a derecha por tanto el punto de más a la izquierda será el punto cero.
Entonces hacemos en una función lo siguiente:
'***************************************************************
'***Para averiguar el Top que debe tener el formulario hijo, tomando el Height del padre y del hijo
Public Function GetTop(ByVal HPadre as Double, ByVal HHijo as Double) as Double
Dim HTop as Double
'***Le restamos al Height del padre el Height del hijo asi que tenemos el espacio en cuanto a altura que no abarca el hijo en el padre, ahora para que sea equitativo osea el mismo espacio arriba del hijo sea igual al espacio abajo de este, pues lo dividimos en dos.
HTop = (HPadre - HHijo) / 2
GetTop = HTop
End Function
'***************************************************************
'***Para averiguar el Left que debe tener el formulario hijo, tomando el Width del padre y del hijo
Public Function GetLeft(ByVal WPadre as Double, ByVal WHijo as Double) as Double
Dim WTop as Double
'***Le restamos al Width del padre el Width del hijo asi que tenemos el espacio en cuanto a ancho que no abarca el hijo en el padre, ahora para que sea equitativo osea el mismo espacio de un lado del hijo sea igual al espacio al otro lado de este, pues lo dividimos en dos.
HLeft = (WPadre - WHijo) / 2
GetLeft = HLeft
End Function
'***************************************************************
'***Y después asignamos por medio de estas funciones las propiedades de Top y Left del Hijo en el evento Load de este:
Private Sub Form_Load()
frmHijo.Top = GetTop(frmPadre.Height, frmHijo.Height)
frmHijo.Left = GetLeft(frmPadre.Width, frmHijo.Width)
End Sub
Esto tiene un limitante que es la siguiente:
El área del formulario hijo es todo si el espacio que este abarca, pero el área del padre es solo su área interna sin contar menus la barra del formulario, barras de estado, de desplazamiento, etc osea debemos tomar en cuenta solo el área interna donde se encuentran los formularios, para esto debemos ir calculando por medio de ir restando en la funciones a las propiedades Height y Width del padre por ejemplo:
Digamos que solo tenemos una barra de menu y la barra del formulario en el padre y esas dos cosas juntas abarcan 1000 Twips de altura (este valor lo obtienes probando y probando hasta que llegues a una medida donde veas que queda bien centrado el formulario hijo) como las barras se ubican arriba entonces solo debemos calcular el Height del padre, por tanto la formula de la función para averiguar el top sería la siguiente:
HTop = ((HPadre-1000) - HHijo) / 2
Bueno espero haberte ayudado...
Saludos!!