Resumen Gradiente de fondo en Forms   (3 mensajes )

Yo lo hago de la siguiente manera. De vez en cuanto me da un error de overflow, que no se porque sale, pero generalmente funciona.

DefInt A-Z
Public Ymaxclb%, Xmaxclb%
Public LetXw%, LetYw%, NLines%, NColumns%

Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Private Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal Brocha As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Sub DegradarForm(Formulario As Form)
    Dim Ancho As Integer
    Dim ColorAzul As Integer
    Dim Intervalo As Integer
    Dim X As Integer, i As Integer
    Dim Relleno As RECT, Brocha As Integer
    Formulario.Cls
    Ancho = Formulario.ScaleHeight
    Intervalo = Ancho \ 64
    ColorAzul = 255
    Relleno.Left = 0
    Relleno.Right = Formulario.ScaleWidth
    Relleno.Top = 0
    Relleno.Bottom = Intervalo
    For X = 1 To 64
        Brocha = CreateSolidBrush(RGB(0, 0, ColorAzul))
        i = FillRect(Formulario.hdc, Relleno, Brocha)
        i = DeleteObject(Brocha)
        ColorAzul = ColorAzul - 4
        Relleno.Top = Relleno.Bottom
        Relleno.Bottom = Relleno.Bottom + Intervalo
    Next
    Relleno.Bottom = Relleno.Bottom + 64
    Brocha = CreateSolidBrush(RGB(0, 0, 0))
    i = FillRect(Formulario.hdc, Relleno, Brocha)
    i = DeleteObject(Brocha)
End Sub

Private Sub Form_Load()

With Me
        .AutoRedraw = True
        .ScaleMode = 3

DegradarForm Me
    End With
end sub

ademas tambien podrias poner el codigo del form_load en resize y cosas asi.

Si consigues algo mejor me lo cuentas


>Necesito saber como puedo hacer un degradado de color en un formulario,
>ósea poner color background al formulario.
>

>>Necesita saber como puedo hacer un degradado de color en un formulario,
>>ósea poner color background al formulario.


Mi solución es muy sencilla, pero eficiente:

****************************************************************************
Private Sub Form_Paint()
  ' Var
  Dim l As Long
  Dim d As Integer

  ' Divida la altura del formulario entre 256
  d = Me.ScaleHeight \ 256
  if d = 0 then d = 1

  ' Ahora genere el degradado (en color azul)
  For l = 0 To Me.ScaleHeight - d Step d
    Me.Line (0, l)-(Me.ScaleWidth, l + d), RGB(0, 0, l \ d), BF
  Next l
End Sub

Private Sub Form_Resize()
  ' Var
  Static lngTwipsAnterior As Long

  ' Si se reduce el formulario, ejecute
  ' el evento Form_Paint.
  If Me.Height < lngTwipsAnterior Then
    Form_Paint
  End If
  lngTwipsAnterior = Me.Height
End Sub
****************************************************************************

El código, como ves, es muy sencillo. No usa API y es rápido cuando se
genera el ejecutable. La base es la creación de rectángulos en el formulario
cuyo color va del negro al azul intenso. Si deseas generar un degradado en
rojo o en verde, (o de grises o la combinación que desees), puedes agregar
los parámetros necesarios a la función RGB (que no es más que colocar,
también, la división entera l \ d en donde desees) para obtener el color que
desees.

Esto se ejecutará cada que haya necesidad de repintar al formulario. Si
aumentas su tamaño, se disparará el evento Paint, pero si lo reduces no se
disparará. Por ello en el evento Resize verificamos si el tamaño del
formulario es menor al que se había registrado por última vez. Si es así,
ejecutará el código del evento Form_Paint y asunto solucionado.

En código de Form_Paint es, en relidad, muy sencillo: Dividimos entre 256 la
altura total del área de trabajo del formulario. Si d resulta en 0, entonces
asignamos a d el valor de 1. Esto nos evitará un desaguisado si el usuario
reduce demasiado la altura del formulario. Luego ejecutamos un bucle
For que irá desde el 0 (el primer twip de la altura del área de trabajo del
formulario) hasta la altura total del área de trabajo del formulario menos
lo que haya en la variable d. Este bucle incrementará la variable l en pasos
determinados por la variable d.

La única línea que ejecuta el bucle, es un método Line que genera un
rectángulo relleno (¿notas el parámetro BF del final de la instrucción?) con
el color establecido por la función RGB, y que irá desde el extremo
izquierdo del formulario en la línea correspondiente al valor de la variable
l en ese momento, hasta el extremo derecho del formulario en la línea
correspondiente al valor de la variable l más el valor de la variable d.
Esto nos genera una diagonal, pero por el parámetro B, se genera un
rectángulo que, además, y debido al parámetro F, se rellena.

Así, se generarán rectángulos rellenos de color negro y pasa por diferentes
saturaciones de azul, hasta que llega a la saturación completa de azul. Esto
se logra al dividir l \ d. Si l vale cero y d vale 12 (por decir), la
primera saturación de azul será 0. En la siguiente pasada, si l vale 12 y d
también, la saturación de azul será 1. Este ciclo se repetirá hasta llegar a
un valor de 255, que es la saturación máxima que soporta el azul. Con esto,
se generará el efecto de degradado y ¡listo! el problema ha sido
solucionado.

Espero que te sea de utilidad.

+---¡Saludos desde México!--+
| .+'~~'+. |
| * Tron * David.BAS |
| `+,__,+' |
+---------------------------+
http://spin.com.mx/~adgarza
     adgarza@spin.com.mx



Jose Luis Escribio:
>Un saludo a todos.
>
>No se si lo que voy a preguntaros ya se ha solucionado en este foro,
>pero necesito saber como hacerlo, así que por favor perdonadme.
>
>Necesita saber como puedo hacer un degradado de color en un formulario,
>ósea poner color background al formulario.

Hola Jose Luis aqui te envio un ejemplo de como hacer el degradada lo baje
de VBNet esta en Ingles pero si funca

Saludos JANO


luis ramos guisa
lcio prado snta rosa de lima #950
telf. 713657

Download gradform.zip  



Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com