Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: pedroesca en Agosto 26, 2011, 11:20:12 am
-
Buenas y Santas: en este caso mi duda/consulta/pedido, es sobre programación gráfica, es decir, quiero dibujar (o pintar) un picturebox pero con el efecto gradiente, creo que no es para nada complicado, pero en la parte gráfica estoy un tanto desorientado.
-
Te puede servir esto:
http://leandroascierto.com/foro/index.php?topic=150.msg656#msg656 (http://leandroascierto.com/foro/index.php?topic=150.msg656#msg656)
Nota: Lea, me percate de un pequeño inconveniente con el cambio de server, cuando googleas aparece la dirección del anterior server, al menos al darle clic te lleva al foro pero ya no te lleva al mismo post como antes pasaba. Supongo que no queda de otra hasta que se rankee el nuevo server.
(https://byfiles.storage.live.com/y1plHeVjxw5qNxou6z0IWY1buRUiu5psrRiXJmN7ZNeGYojb95Ke4qEo9Adh0nUce2V27shni-YVh0/Degradadl.JPG?psid=1)
-
Nota: Lea, me percate de un pequeño inconveniente con el cambio de server, cuando googleas aparece la dirección del anterior server
(http://enterpy.net/upload06/archivossubidos/t2c6p_cache_google.jpg)
Es por que google siempre busca en su cache primero creo...
-
Si lo se, a lo que me refiero es que por ahora los resultados que obtenga un navegante en google y lo direccione al post del foro de Lea pues no lo llevará, lo llevara al "portal" de entrada, esto podría hacer que se pierda la visita de algunos navegantes. En todo caso es un costo temporal que tendrá que asumir, nada grave.
-
Saludos y Buenas tardes a todos !!!
Yvan, ENTER no pude entrar en el enlace, para buscar el código. Así que con el permiso de Lenandro y el de uds, voy contigo Pedro (digo esto, porque no sé si será el código que tiene Leandro o el de él es más eficiente, así que a riesgo coloco este):
Private Sub Form_Resize()
Cls
AutoRedraw = True
DrawStyle = 6
DrawMode = 13
DrawWidth = 2
ScaleMode = 3
ScaleHeight = (256 * 2)
For i = 0 To 255
Line (0, Y)-(Width, Y + 2), RGB(0, 0, i), BF
Y = Y + 2
Next i
End Sub
En este código, se cambia el ScaleMode a 3 (Pixel), lo demás es el estilo de trazado DrawStyle, DrawMode, DrawWidth, ScaleHeight; A continuación se traza una línea con el método Line dentro de un Bucle (For-Next), en el parámetro del método, el color, usamos RGB, donde el correspondiente a "Red" y al "Green" lo dejamos con valor 0, el correspondiente a "Blue" el valor cambiará a medida que avance el bucle (Variable i).
En este ejemplo, te presentará un Form (también aplicable al PICTUREBOX) que irá degradando el color desde el negro hasta el azul. También la línea dibujada, irá ensanchando su grosor a medida que el bucle se vaya incrementando, hasta llenar tada el área cliente del Form (o PICTUREBOX).
Espero que te pueda servir del alguna ayuda.
Saludos a todos !!!
Manuel F. Borrego S. 8)
Barcelona, Venezuela.
-
Hola Manuel. Este código tuyo es el mas sintético que he visto de los que encontré sobre ese tema, muy bueno y muy bien explicado. Felicitaciones.
-
Gracias Hermano !!!
No es más que el producto de varias sesiones de darle y darle, de buscar en la web, de seguir experimentando, embarrandola (perdón, seguir experimentando, Je, Je, Je !!! ;D ;D ;D).
Bueno y resultó ese código, pero creo que se puede mejorar más todavía, así que a quien sepa de este menester, que por favor lo coloque en el post !!!
Saludos !!!
Manuel F. Borrego S. 8)
Venezuela.
-
Aqui encontre una clase
http://www.recursosvisualbasic.com.ar/htm/listado-api/api-57-formulario-degradado.htm (http://www.recursosvisualbasic.com.ar/htm/listado-api/api-57-formulario-degradado.htm)
En mis programas ocupo esto, debo haberlo sacado del apiviewer, ya no recuerdo ;D
'////////////////////////////////////////////////////////////////////////////////////////
Private Type TRIVERTEX
x As Long
y As Long
Red As Integer 'ushort value
Green As Integer 'ushort value
Blue As Integer 'ushort value
Alpha As Integer 'ushort value
End Type
Private Type GRADIENT_RECT
UpperLeft As Long
LowerRight As Long
End Type
Private Declare Function GradientFillRect Lib "msimg32" Alias "GradientFill" (ByVal hdc As Long, pVertex As TRIVERTEX, ByVal dwNumVertex As Long, pMesh As GRADIENT_RECT, ByVal dwNumMesh As Long, ByVal dwMode As Long) As Long
Private Declare Function GradientFill Lib "msimg32" (ByVal hdc As Long, pVertex As Any, ByVal dwNumVertex As Long, pMesh As Any, ByVal dwNumMesh As Long, ByVal dwMode As Long) As Long
Private Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal x1 As Long, ByVal y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Const GRADIENT_FILL_RECT_H As Long = 0
Private Const GRADIENT_FILL_RECT_V As Long = 1
'////////////////////////////////////////////////////////////////////////////////////////
Private Sub DrawGradient( _
ByVal hdc As Long, _
ByVal LeftX As Long, _
ByVal TopY As Long, _
ByVal RightX As Long, _
ByVal BottomY As Long, _
ByVal StartColor As Long, _
ByVal EndColor As Long, _
Optional ByVal bVertical As Boolean)
Dim udtVert(1) As TRIVERTEX
Dim udtGRect As GRADIENT_RECT
With udtVert(0)
.x = LeftX
.y = TopY
.Red = pvLongToSignedShort(CLng((StartColor And &HFF&) * 256))
.Green = pvLongToSignedShort(CLng(((StartColor And &HFF00&) \ &H100&) * 256))
.Blue = pvLongToSignedShort(CLng(((StartColor And &HFF0000) \ &H10000) * 256))
.Alpha = 0&
End With
With udtVert(1)
.x = RightX
.y = BottomY
.Red = pvLongToSignedShort(CLng((EndColor And &HFF&) * 256))
.Green = pvLongToSignedShort(CLng(((EndColor And &HFF00&) \ &H100&) * 256))
.Blue = pvLongToSignedShort(CLng(((EndColor And &HFF0000) \ &H10000) * 256))
.Alpha = 0&
End With
With udtGRect
.UpperLeft = 0
.LowerRight = 1
End With
Call GradientFill(hdc, udtVert(0), 2, udtGRect, 1, _
IIf(Not bVertical, GRADIENT_FILL_RECT_H, GRADIENT_FILL_RECT_V))
End Sub
Private Function pvLongToSignedShort(ByVal Unsigned As Long) As Integer
If (Unsigned < 32768) Then
pvLongToSignedShort = CInt(Unsigned)
Else
pvLongToSignedShort = CInt(Unsigned - &H10000)
End If
End Function
No olvidar antes de usar poner el Scalemode=vbPixels y AutoRedraw=True