Imagen de Fondo de un Form por vba

¿Es posible elegir la imagen de fondo de un formulario mediante vba? Es decir, mediante un control buscar la imagen en el HDD y que esta se coloque como fondo de todos los formularios de la DB y que se pueda cambiar a gusto en cuanto uno quiera.
No he encontrado nada al respecto y me extraña que no pueda hacerse.

Y ya puestos,

¿Cómo podría colocar una imagen vinculada a modo de logo, en todos los cabezales de los formularios y informes por vba?

Que una vez cambiada la imagen se cambie en todos los forms y reports.

1 Respuesta

Respuesta
1

Para modificar, añadir o quitar una imagen al fondo de un formulario, tienes que usar la propiedad Picture. Por ejemplo, si quieres que al cargar el formulario se te cargue la imagen "Foto.jpg", que está en la misma carpeta de la bd, en el evento al cargar del formulario pondrías:

Private Sub Form_Load()
On Error GoTo sol_err
Dim miRuta As String
miRuta = Application.CurrentProject.Path
Me.Picture = miRuta & "Foto.jpg"
Salida:
Exit Sub
sol_err:
Me.Picture = ""
Resume Salida
End Sub

Obviamente, si la tienes en otra ruta, sólo tienes que asignarla a la variable miRuta. Al procedimiento le declaro un control de errores para que si la imagen no se encuentra, o hay cualquier problema con ella, no cargue nada y se pueda seguir trabajando con el formulario.

Para el tema del logo, sería algo similar: tendrías que añadir un cuadro de imagen, y usual la propiedad Picture de ese cuadro. Por ejemplo, si tu cuadro se llamara imgLogo, y le quieres poner el archivo "Logo.jpg", sería así:

Private Sub Form_Load()
On Error GoTo sol_err
Dim miRuta As String
miRuta = Application.CurrentProject.Path
Me.imgLogo.Picture = miRuta & "Logo.jpg"
Salida:
Exit Sub
sol_err:
Me.imgLogo.Picture = ""
Resume Salida
End Sub

Sigamos...

Si quieres poder elegir un archivo de imagen y poderlo cambiar las veces que quieras, tendrás que hacer una tabla (la llamaré TImagenes) en la que guardes la ruta completa de tu imagen de fondo y logo, algo sencillito, como por ejemplo un ID autonumérico (ID) y un campo Memo (RutaImagen) para la ruta competa. Supondré que el ID 1 es para la imagen de fondo, y el dos para el logo.

A continuación, y para no tener que repetir los códigos en todos los formularios, puedes crear en un módulo nuevo, dos procedimientos públicos nuevos, con los códigos anteriores, pero un poco modificados:

Public Sub cargaFondo(miForm as String)

On Error GoTo sol_err
Forms(miForm).Picture = Dlookup("RutaImagen","TImagenes","ID=1")
Salida:
Exit Sub
sol_err:
Forms(miForm).Picture = ""
Resume Salida
End Sub

Public Sub cargaLogo(miForm as String)
On Error GoTo sol_err
Forms(miForm).imgLogo.Picture = Dlookup("RutaImagen","TImagenes","ID=2")
Salida:
Exit Sub
sol_err:
Forms(miForm).imgLogo.Picture = ""
Resume Salida
End Sub

Luego, en cada formulario que quieras cargar las imágenes, pondrías, en el evento al cargar, este código:

Private Sub Form_Load()

Call cargaFondo(Me.Name)

Call cargaLogo(Me.Name)

End Sub

Y para acabar, para poder seleccionar los archivos que utilizarías, te remito a este ejemplo del experto neckkito: http://siliconproject.com.ar/neckkito/index.php/ejemplos-explicados/codigo/95-ejemplos-explicados/ejemplos-de-codigo/131-quiero-navegar-y-seleccionar-un-archivo

Lo que tendrías que hacer, es una vez seleccionado el archivo, actualizar la tabla con la nueva ruta.

Saludos

Muchísimas gracias, muy bien explicado y ha salido a la primera, de verdad muchas gracias.

He adaptado el código para que también se carguen unos campos de texto en el form junto a la imagen del logo y el fondo.

Solo una o dos cosas más... no logro adaptar el código para que la imagen salga en un informe ¿ cómo sería en un informe?

Y si no es mucho abusar, como podría cambiar el tipo de fuente y color de los campo de texto.

Me explico, en un formulario introduzco la imagen del fondo , mediante un botón navego por el pc, la busco y las almaceno en su campo ruta ), así como el logo e introduzco datos en dos campos de texto.

Ya he creado los respectivos módulos para cargar las imágenes y los campos de texto. En un form como me decías, llamo a las funciones de carga y todo sale perfecto.

Ahora quisiera que el el form que utilizo para introducir los datos, pudiera cambiar la fuente y color de los campos de texto. Que mediante un botón saliera una paleta de colores para cada campo de texto y la posibilidad de cambiar la fuente y tipo. Supongo que lo más fácil será llamar a algún tipo de control ActiveX, no?

Muchas gracias de nuevo. Un Saludo.

Saludos de nuevo

He conseguido cargar la imagen en el informe, un fallo tonto... peo sigue en pie lo de los campos texto ;)

Un saludo

Pues lo que pides ahora es algo complicado (al menos para mí). Yo de controles ActiveX no controlo, y no se si habrá alguno que te sirve (puedes intentarlo con otro experto, a ver si hay más suerte)

De todos modos, te preparé un "apaño" que igual te sirve: http://www.filebig.net/files/UN8Kb7hjFX

La idea es esta:

1º/ una tabla (Tconfig) en la que guardas los nombres de los campos (opcional, pues valdría sólo con el ID), su fuente y su color de fondo.

2º/ un formulario (formulario2) en el que tienes un cuadro combinado para seleccionar la fuente, y unas etiquetas coloreadas para elegir el color (aquí tendrás que pasar el rato añadiendo tantas como colores quieras permitir...)

3º/ un módulo en el que declaras dos variables públicas para guardar la fuente y el color

Y el funcionamiento es este:

1º/ en tu formulario, añades un botón junto a cada campo que quieras permitir "tunear". Este botón llama al formulario de cambios (formulario2), en modo dialogo, para que se interrumpa la ejecución del código del principal hasta que se cierre.

2º/ Este formulario, tiene una peculiaridad: la forma de rellenar el cuadro combinado (que tiene que tener como tipo de origen de la fila: lista de valores), que lo hace recorriendo los archivos de fuentes de la carpeta Fonts. El valor de la fuente elegida se almacena en la var. Publica miFuente, y al hacer click en una etiqueta de color, en la var. MiColor, se almacena el color de esa etiqueta.

3º/ Al cerrar el formulario de selección, se actualiza la tabla y se cambian los valores del formulario "principal". Además, al cargar este, se ajustan los campos a los valores almacenados en la tabla TConfig, o, en caso de que no haya ninguno, los que definas como valores por defecto por medio de la función Nz.

El código está bastante comentado, por lo que no creo que tengas problema para adaptarlo a tus necesidades, en caso de que te sirva. A mi no se me ocurre nada más para ayudarte.

Saludos

Muchísimas gracias, me han servido de mucho tus explicaciones y sobretodo este último ejemplo me va a venir muy bien.

Gracias de nuevo. Un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas