Mosaico en MDIs

Sin el P*** API

Fecha: 24-11-2K3 (de publicación: 04/Dic/2003)
Autor: Coded by Jesús Rodríguez, ChuxMan. ChuxMan@terra24.es


Breve Introducción.

Bueno, pues aquí va la siguiente colaboración.

Resulta que me han encargado revisar una aplicación bastante pringosa, escrita en VB6 y cuyos clientes andan un poco mosca por la calidad del mismo.

Además de revisar el código y corregir un millón y medio de bugs, también decidí darle una limpieza visual a la aplicación. Así les entraría más fácilmente la nueva versión, directamente por los ojos.

Como estaba todo metido en un MDI, pensé en ponerle un fondito al MDI, pero claro, ni tiene funciones gráficas ni leches en vinagre, así que ¡hala! ¡a tirar de API!

¡Y madre mía! ¡Vaya una puta mierda de API! Hay programadores en microsoft que son muy buenos, pero hay otros que se deberían dedicar a la cría del cangrejo ermitaño...

El caso es que cuando ya iba a pasar mazo, porque si me tiro media hora investigando el api para algo visual me echan la bronca (son así de hábiles)

y de repente, se me ocurre una idea, y me pareció muy maja, como para contárosla a vosotros...

El tema

Se trata de un truco la mar de chorra, pero que hace exactamente lo que yo quería, y más, ¡¡Y SIN EL API DE LOS COJONEEEEEES!!

Ponemos 3 pictures box, dos de ellos autoajustables. En el primero metemos la imagen que queremos poner en mosaico. En el segundo un logo majo que generaremos después, y en el tercero, el proceso completo.

La idea es agrandar el tercer picture box al tamaño del screen, que será el máximo tamaño que vamos a tener... Para que el MDI lo acepte, meterlo en un cuarto picture que nos servirá de contenedor, con la propiedad visible a FALSE.

Después llamamos a la siguiente funcioncita en el evento LOAD (y no, no tiene nada que ver con Metallica), y a tomar por saco...


Sub Fondo()
   
    'Vale, he tenido una idea para no utilizar la caca esta del API.
    'Coded by ChuxMan. 21-11-2K3.
    Dim X As Long, Y As Long
   
    'Utilizamos un picture que le ajustamos al mismo tamaño que el formulario madre.
    With Me.picTruco
   
        'Redimensionamos el picture.
        .Height = Screen.Height 'Me.Height
        .Width = Screen.Width   'Me.Width
       
        'Vamos a "imprimir" la imagen que tenemos en nuestro picture temporal
        'como si fuera un "tampón".
        For X = 0 To Int(.Width / Me.picFondo.ScaleWidth)
            For Y = 0 To Int(.Height / Me.picFondo.ScaleHeight)
                .PaintPicture Me.picFondo.Picture, X * Me.picFondo.ScaleWidth, Y * Me.picFondo.ScaleHeight
            Next
        Next
   
        'Por último, el logo que te comas.
        .PaintPicture Me.picLogo.Picture, 0, 0
   
    End With
   
    Set Me.Picture = Me.picTruco.Image

    'Temporal para hacer el fondito del Logo... jejeje
    'SavePicture Me.Picture, "c:\TmpFondo.bmp"

End Sub

Esto genera el siguiente efecto:

La última línea se puede descomentar para generar un ficherito en nuestro HDD que podemos utilizar para generar un logo con el fondo en marquesina, algo como esto:

Bueno, pues eso es todo. Lo bonito del asunto es que podemos pasarle dos parámetros más a la función PaintPicture, y hacer que se estire, que se centre...

¡lo que os salga de las narices!, aquí ya es a gusto e imaginación del programador.

Poz ná. Eso es todo. Espero que lo disfrutéis y que se vean las buenas aplicaciones por aquí.... ;-)


ir al índice