Aumentar el tamaño de una imagen al pasarle el mouse

Espero te encuentres bien.

Por otro lado, me asalta la siguiente duda, ¿cómo le puedo hacer para que al posicionar el puntero del mouse sobre una imagen, su tamaño aumente, y además, si ya no me posiciono sobre ella, regrese a su tamaño original? ¿Se podrá? O además, si no se puede posicionando el puntero del mouse, ¿se podrá por selección de la misma con el mouse?

2 Respuestas

Respuesta
2

Bueno aquí tienes una forma de hacerlo:

Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Application.EnableEvents = False
With Me.Image1
 .Height = 150 * 1.1
 .Width = 200 * 1.1
End With
Application.EnableEvents = True
End Sub
Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Application.EnableEvents = False
With Me.Image1
 .Height = 150
 .Width = 200
End With
Application.EnableEvents = True
End Sub

Este código lo debes situar en la hoja donde tienes la imagen, no en un módulo.

Para el ejemplo he creado una imagen (imagen1) que tiene un tamaño de 150 x 200 situada en la hoja. Lo he hecho vía ActiveX control (Developer/Insert/ActiveX/Image). En este control he incluido a mano en la propiedad Picture la imagen que quiero que se vea. Se puede hacer por código desde un módulo u otro control.

Sobre esta imagen he creado una etiqueta Label 1, que rodea totalmente la imagen incluso cuando esté aumentada. En mi caso he puesto 200 x 270 como dimensiones. Además he borrado el caption y he puesto BackStyle a 0, para que sea transparente. Esto lo he hecho a mano pero también se puede hacer por código desde otro módulo o control. Además la selecciono con el botón derecho y la pongo detrás de la imagen.

Lo que hace el código es simplemente cambiar el tamaño de la imagen dependiendo de si estoy sobre la imagen o sobre la etiqueta que hay detrás. Se puede hacer por código que por ejemplo al entrar en Excel o al hacer algo concreto (incluso pulsar un botón) se guarde el tamaño original de la imagen en algún sitio y así no tener que indicar a mano los datos. Eso lo dejo para tí si estás interesado.

En mi caso la etiqueta está descentrada respecto a la imagen porque solo cambio ancho y alto pero no el punto de anclaje (la esquina superior izquierda). Podría cambiarse también y que el efecto sea más estético visualmente.

Otra posibilidad, que dejo a tus ganas de probar, es usar dos imágenes, la aumentada y la de tamaño normal y jugar con la propiedad Visible de ambas. Esto posiblemente dará mayor sensación de rapidez al movimiento de la imagen.

¡Gracias Prozac!

Buena propuesta, es una interesante posibilidad.

Por otro lado, aún me queda la duda de si se podrá sin usar Controles ActiveX, y es que en un principio mandaba llamar las imágenes a través de un "Image" pero la velocidad y fidelidad de las imágenes no me agradaba, no se veían claritas. Entonces, opté por no usar controles, y como te he dicho, ahora me asalta la duda de saber si se pueda.

Y es que descubrí, que una imagen en cualquier formato sea "JPEG" , "PNG", etc. VBA las llama "Shapes" y entonces pensé en si existiría alguna posibilidad en hacer una macro que ejecutara los "Shapes" cambiándoles el tamaño al posicionar el mouse o al seleccionar la imagen con el mouse.

Quiero decirte que en internet, encontré éste código que ejecuta los "Shapes" directamente sin usar controles:

Sub TamañoImagen()
Dim Imagen As Shape
For Each Imagen In ActiveSheet.Shapes
    If Imagen.Name = "Casa" Then
        Imagen.Height = 250
        Imagen.Width = 400
        Imagen.OnAction = "TamañoImagen"
    End If
Next Imagen
End Sub

Dicha página decía que la propiedad "OnAction", devuelve el nombre de una macro que se ejecuta al hacer clic en el objeto especificado. Y sí, el resultado es que funciona.

Sin embargo, ahora el problema que tengo es que como yo borro la imagen, se pierde por así decirlo la referencia de la macro, y entonces si inserto nuevamente la misma imagen (con el mismo nombre "Casa") la macro no se auto ejecuta, sino que, para que la macro se vuelva a ejecutar, me tengo que ir a la ficha "Programador", al grupo "Código", dar click en el icono "Macros" y entonces ejecutar nuevamente la macro. Se que todas la macros se pueden ejecutar con un método abreviado, pero es algo que no quiero, me gustaría que la macro se auto ejecutara en cuanto seleccione la imagen. Ésto es lo que no he podido y me trae con un gran dolor de cabeza.

Entonces Prozac, ¿creés que se pueda?

Bueno, espero no exasperarte y que me halla dado a entender.

Gracias y saludos.

P. D. Te adjunto un link de descarga por si deseas echarle un vistazo al archivó que encontré. http://www.mediafire.com/view/?x9ddewqf4xite9h

Vamos por partes. Primero, cierra y valora la respuesta a tu pregunta, por favor. Tu cuestión trata sobre lo que comúnmente se conoce como "mouse over", que nada tiene que ver con lo que parece que quieres ahora.

El "mouse over" (posicionar el puntero sobre algo, sin hacer click, doble click, click izquierdo...) no funciona sobre imágenes, solamente sobre controles y formularios. De ahí que haya que insertar el control para producirlo.

Si lo deseas, abre una nueva pregunta indicado tu problema o necesidad y trataré de entenderlo y ayudarte.

Respuesta

prozac  veras he probado parte de tu codigo pero cuando paso el mouse por la img1 me tira el error de que me falta   Application.EnableEvents = False  nom se si es una variable que me falta o hay q poner o que es parte del codigo de abajo ,, un saludo ,estare agradecido si me ayudas

Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Application.EnableEvents = False
With Me.Image1
 .Height = 150 * 1.1
 .Width = 200 * 1.1
End With
Application.EnableEvents = True
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas