Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Gorky en 27 Noviembre 2006, 13:21 pm



Título: MDI con imagen
Publicado por: Gorky en 27 Noviembre 2006, 13:21 pm
Buenas foreros. Creo que lo que vengo a preguntar no tiene posible solucion.

Quisiera poner una imagen de fondo en un formulario MDI. Se que esto es posible. Lo que ocurre es que te la pone en la esquina superior izquierda y yo lo que quiero es que me la coloque ocupando todo el fondo y que cuando se redimensione el formulario que tambien lo haga la imagen.
Por lo tanto lo que a mi se me ha ocurrido es crear un formulario flotante sin bordes y colocarle ahi la imagen con la propiedad stretch = true. Despues me he ido al evento Resize el formulario MDI y he igualado las propiedades Height y Width tanto de la imagen como del formulario flotante con las del formulario MDI de esta forma:
Código:
Private Sub MDIForm_Resize()
frmImagen.Height = Me.Height
frmImagen.ScaleHeight = Me.ScaleHeight
frmImagen.ScaleWidth = Me.ScaleWidth
frmImagen.Width = Me.Width
frmImagen.imgLogo.Width = frmImagen.Width
frmImagen.imgLogo.Height = frmImagen.Height
End Sub
Esta idea seria correcta si no fuese por un pequeño fallo: el evento Resize no se activa cuando maximizamos el formulario. Sin embargo si que funciona bien cuando tiramos de los bordes para cambiar el tamaño del formulario.

Conoceis algun modo de conseguir mi proposito?


Título: Re: MDI con imagen
Publicado por: jrhomer en 27 Noviembre 2006, 17:22 pm
Cuando se maximiza conoces el tamaño.... aunque no se active el evento resize... puedes ponerlo en el evento "activate".


Título: Re: MDI con imagen
Publicado por: Gorky en 27 Noviembre 2006, 17:43 pm
Cuando a las 20:30 llegue a mi casa lo probare.Gracias.


Título: Re: MDI con imagen
Publicado por: Ironhorse en 27 Noviembre 2006, 19:55 pm
El evento Resize se dispara siempre, incluso al maximizar, minimizar o restaurar.


Título: Re: MDI con imagen
Publicado por: Gorky en 27 Noviembre 2006, 20:41 pm
Cuando se maximiza conoces el tamaño.... aunque no se active el evento resize... puedes ponerlo en el evento "activate".

Eso me funciona a medias. Como se inicia en maximizado y es en ese momento cuando se activa pues funciona. Sin embargo si restauro la ventana no se activa. Alguna otra solucion?

Citar
El evento Resize se dispara siempre, incluso al maximizar, minimizar o restaurar.

Eso pensaba yo pero me he dado cuenta de que es un error.


Título: Re: MDI con imagen
Publicado por: CeLaYa en 27 Noviembre 2006, 21:11 pm
y porque no pones un picture box, dentro del PictureBox un ImageBox con la propiedad Stretch = true y usas los eventos Resize del form y del picture para poner el tamaño de la imagen

en las propiedades de los controles pones
Picture1:
Aling = 3

Image1:
Stretch = true

Private MDIForm_Resize()
   picture1.width = me.scalewidth
end sub

Private sub Picture1_Resize()
   Image1.with = picture1.ScaleWidth
   Image1.Height = picture1.ScaleHeight
end sub


Título: Re: MDI con imagen
Publicado por: Gorky en 27 Noviembre 2006, 22:06 pm
y porque no pones un picture box, dentro del PictureBox un ImageBox con la propiedad Stretch = true y usas los eventos Resize del form y del picture para poner el tamaño de la imagen

en las propiedades de los controles pones
Picture1:
Aling = 3

Image1:
Stretch = true

Private MDIForm_Resize()
   picture1.width = me.scalewidth
end sub

Private sub Picture1_Resize()
   Image1.with = picture1.ScaleWidth
   Image1.Height = picture1.ScaleHeight
end sub

Creo que es eso lo que he hecho. No estoy seguro porque no tengo el proyecto delante. Lo de la propiedad Strech si que lo he hecho. Sin embargo algunas cosas no son exactamente iguales. Cuando llegue a mi casa lo compruebo. Gracias.


Título: Re: MDI con imagen
Publicado por: Gorky en 28 Noviembre 2006, 12:21 pm
Ya esta solucionado. Tampoco era como Celaya decia. Sin embargo me ha servido de ayuda. Posteo el codigo para que quien quiera lo pueda hacer.
Código:
Private Sub MDIForm_Resize()
Picture1.Width = Me.Width
Image1.Height = Picture1.Height
Image1.Width = Picture1.Width
End Sub


Título: Re: MDI con imagen
Publicado por: Gorky en 29 Noviembre 2006, 20:38 pm
Ahora tengo un nuevo problema. Lo anterior ya esta solucionado. Sin embargo cuando hago:
Código:
Form1.show
no se muestra.
Supongo que el problema es que se muestra por detras del PictureBox. Para todo esto tengo que dar como dato que el resto de los formularios estan puestos como MDIChild. Sin embargo si los pongo como formularios normales no se me produce este problema pero pierdo las caracteristicas de un Child. Se os ocurre alguna solucion para poder seguir siendo MDIChild y que aparezca por encima del PictureBox (supongo que es que aparece por detras pero es que yo ni lo veo)? Gracias.


Título: Re: MDI con imagen
Publicado por: CeLaYa en 29 Noviembre 2006, 21:24 pm
a ver ya no entendi bien lo que estas haciendo. Quieres tener una imagen de fondo en el MDIForm?, con el código que pusiste deberia estar bien,  a menos que el control Image no este dentro del Picture   :huh:

imagino que lo que quieres es hacer más o menos esto

(http://www.geocities.com/cero780814/P.JPG)
este es un MDIForm y la imagen la tengo en un picturebox y la redimensiono con el código que te pase, que si lo analizas es lo mismo que tu tienes


Título: Re: MDI con imagen
Publicado por: Gorky en 30 Noviembre 2006, 00:10 am
Si lo que es la imagen funciona de maravilla. Y se redimensiona perfectamente. Pero cuando le digo que me muestre algun formulario hijo no me lo muestra. No me da error pero no me lo muestra. Sin embargo si eso lo hago con alguno que no sea hijo si que lo muestra. Y eso es lo que quiero solucionar. Que se muestre sin que deje de ser hijo. Espero haberme explicado ahora. Gracias CeLaYa.


Título: Re: MDI con imagen
Publicado por: jrhomer en 30 Noviembre 2006, 13:17 pm
Si que lo muestra, pero no lo ves, creo que puede ser ese caso.

Si se ejecuta la línea de FORMULARIO.Show el formulario tiene que aparecer. comprueba que esa línea se ejecuta correctamente, es posible que al ahcer el .Show de ese formulaio tengas alguna incoherencia en el evento Load... algunas veces pasa.

Pero si el .Show se ejecuta con normalidad prueba  con "control+tab" dentro de la ejecución de tu aplicación para ver si se va de un formulario a otro, si se va... pues lógicamente si te lo ha cargado, pero no se veia porque queda solapado con algún otro.
Si es este el caso usa FORMULARIO.ZOrder(0) para que lo pase al primer plano.

Alguna vez me ha pasado algo así y siempre ha sido porque se me quedaba el formulario tapado por algo :P


Título: Re: MDI con imagen
Publicado por: Gorky en 30 Noviembre 2006, 13:28 pm
Si el tema es ese. Se muestra pero no se ve. Y yo creo que es que se queda por detras del ImageBox.
Si se ejecuta la línea de FORMULARIO.Show el formulario tiene que aparecer. comprueba que esa línea se ejecuta correctamente, es posible que al ahcer el .Show de ese formulaio tengas alguna incoherencia en el evento Load... algunas veces pasa.
Se que se ejecuta porque lo he ido pasando con F8.

Pero si el .Show se ejecuta con normalidad prueba con "control+tab" dentro de la ejecución de tu aplicación para ver si se va de un formulario a otro, si se va... pues lógicamente si te lo ha cargado, pero no se veia porque queda solapado con algún otro.
Si es este el caso usa FORMULARIO.ZOrder(0) para que lo pase al primer plano.
En Ctrl + Tab no puede aparecer el formulario ya que es un formulario hijo. Eso solo seria en el caso de que fuese un formulario normal. Con Form1.ZOrder(0) sigue sin aparecer. Se te ocurre alguna otra cosa?


Título: Re: MDI con imagen
Publicado por: jrhomer en 30 Noviembre 2006, 16:31 pm
con el "control+tab" se va pasando el control sobre cada formulario HIJO que esté abierto (estoy seguro de eso porque yo lo he sufrido :P) entonces si al hacer el "contrl+tab" se va de uno a otro formulario hijo.

también es posible que tengas algún error con los bordes del formulario... prueba cambiando hasta conseguirlo, algunas de las opciones de los bordes no son compatibles con según que movimientos en un MDI. Prueba a ponerlos sin Borde (0) o Sizeable (2).


Título: Re: MDI con imagen
Publicado por: Ironhorse en 30 Noviembre 2006, 19:45 pm
cuando colocas un picture en un mdi padre, el espacio que ocupa el picture deja de estar disponible para los formularios mdi hijos, por lo tanto si el picture es del tamaño de todo el mdi, no hay nada de lugar para el hijo.



Título: Re: MDI con imagen
Publicado por: Gorky en 30 Noviembre 2006, 20:34 pm
cuando colocas un picture en un mdi padre, el espacio que ocupa el picture deja de estar disponible para los formularios mdi hijos, por lo tanto si el picture es del tamaño de todo el mdi, no hay nada de lugar para el hijo.
Basicamente eso era lo que yo pensaba. Ahora solo me falta encontrar una solucion para mi proposito. Ya se ve que con un PictureBox no puedo hacerlo. Podria hacerlo de algun otro modo?


Título: Re: MDI con imagen
Publicado por: SOLOANDRAGORA en 16 Diciembre 2006, 07:51 am
a veces las cosas mas sencillas son las menos complicadas ::)
talvez si cargar el formulario primero en la memoria y luego lo visualizas  ;D

Private Sub conectar_Click()
    ' empieza el formulario form1
    Load Form1
    'deja ver el formulario
        Form1.Show
End Sub

bueno es una sugerencia  :rolleyes:


un saludo


Título: Re: MDI con imagen
Publicado por: Gorky en 16 Diciembre 2006, 10:13 am
a veces las cosas mas sencillas son las menos complicadas ::)
talvez si cargar el formulario primero en la memoria y luego lo visualizas  ;D

Private Sub conectar_Click()
    ' empieza el formulario form1
    Load Form1
    'deja ver el formulario
        Form1.Show
End Sub

bueno es una sugerencia  :rolleyes:


un saludo

Eso ya lo he probado y el motivo de que no funcione es por lo que dice Ironhorse. Gracias de todos modos.


Título: Re: MDI con imagen
Publicado por: SOLOANDRAGORA en 16 Diciembre 2006, 21:50 pm
 :D por aqui localice un pequeño codigo que te puede servir para centrar la imagen en el MDI pruebalo y despues intenta visualizar cualquier formulario haber si te sirve ;D

un saludo

liga  http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/231-background-en-mdi.htm (http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/231-background-en-mdi.htm)