Visual Basic - Formularios MIDI

Life is soft - evento anual de software empresarial
 
Vista:

Formularios MIDI

Publicado por Gino (3 intervenciones) el 09/12/2008 15:34:37
Tengo un programa en Visual Basic 6.0 en el cual utilizo formularios MDI, ¿Cómo puedo hacer para que los formularios MDI hijos aparezcan en el centro del formulario MDI Padre?. Ya he probado cambiar la propiedad "StartUpPosition" pero con MDI no funciona, solo deja posicionamiento "Manual" pero cuando lo posiciono "Manual" y ejecuto el programa el formulario no aparece en la posición que le di manualmente.

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Formularios MIDI

Publicado por Alquien (2 intervenciones) el 09/12/2008 16:55:56
al momento de cargar tu formulario (en el evento Load( ) ) dales valor adecuado a las propiedades Left y Top; esto te debe bastar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Formularios MIDI

Publicado por Gino (3 intervenciones) el 09/12/2008 22:35:53
Ya sé que se hace de esa manera, pero la resolución de la pantalla puede variar, el tamaño de la ventana principal, etc, lo que necesito es una función que me muestre en el centro de la ventana principal la ventana hija que se abre en ese momento y también que esa función se pueda utilizar uniformemente para cada ventana hija que se abre, ya que son un montón de ventanas hijas por lo que me resulta un poco engorroso el tener que ir una por una configurando la propiedades de Left y Top, y calculando si esta o no en el centro...

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Formularios MIDI

Publicado por Jimmy Torres (134 intervenciones) el 10/12/2008 18:21:22
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!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Formularios MIDI

Publicado por Jimmy Torres (134 intervenciones) el 10/12/2008 18:36:57
En la función GetLeft en la parte que dice "Dim WTop as Double" la debes sustituir por "Dim HLeft as Double"

Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Formularios MIDI

Publicado por Andres (1 intervención) el 17/05/2009 20:13:10
holas.......parceros lo q pasa es q estoy estudiando desarrollo de software(programacion con visual basic) y lo que sucede es lo siguiente:

resulta q no se como utilizar los formularios MDI entoncs me piden como aplicar un formulario MDI.

quien me puede colaborar con esomuchas gracias.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar