Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: PatriciaBB en Septiembre 24, 2015, 02:32:56 pm
-
Chicos… Please me ayudan… Se me ha presentado el siguiente caso que no sé cómo expresarlo, espero me entiendan
Tengo que implementar unos controles de usuario con unas mínimas diferencia entre uno y otro, como lo pueden ver en las fotos referenciales que pongo.
El primero, tiene un color de fondo, digamos que, "claro" y una barra que es el mismo color de fondo pero en una tonalidad más oscura
(http://fotos.subefotos.com/9eebf1d7dabf67d0ceea22becc1f69a3o.png)
El segundo, tiene un color de fondo, digamos que, "oscuro" y una barra que es el mismo color de fondo pero en una tonalidad más clara
(http://fotos.subefotos.com/5351d47eed3e830e131388a34c164b37o.png)
Como puedo hacer que para ambos controles a partir del color de fondo el mismo control calcule el color que le corresponde al color de la barra, he han dicho que es un cálculo matemático pero he estado buscando por internet pero no encuentro nada
Gracias a todos…
-
el color de fondo lo conoces? está guardado el color en algun lado?
Existe una funcion de VB que es RGB(red, green, blue) donde le pasas justamente los 3 parametros de colores, y te devuelve un "valor de color" para usar directamente como backcolor.
Si conoces el valor original, con la funcion RGB, subiendo, o bajando los valores de los parametros podes llegar a hacerlo
-
Gracia Waldo por responder, te cuento… el color de fondo debe de poder ser cualquier color que el usuario seleccione, y a partir de ese color por algún calculo debe de calcularse el otro color que dependiendo que color se esté usando va ser o más claro o más oscuro. He probado subiendo los valores RGB, como tu indicas, pero no encuentro una forma que siempre me retorne el color base en una tonalidad o más clara o más oscura. Probando en variar los valores del RGB me termino resultando otros colores, no sé en qué rangos es que tendría que variar cada uno de los componentes los valores del RGB.
Esto del RGB ya me tiene loca… :(
-
Hola Patricia, acabo de probar de abrir el vb, ir al backcolor de un form, y probé de difinir un color personalizado, me abrió el tipico cuadrito de colores, que a la derecha tiene una barra de "brillo" moviendo esa barra se consigue el color mas claro, o mas oscuro.
Claro el tema es que abajo muestra los valores de RGB, como van cambiando, y no le encuentro una logica simple.
Lo que si se observa, que ademas de los 3 valores de RGB, hay un valor "luminiscencia", ese justo es el que cambia el mover la barra de "brillo"
Yo creo que tenes que buscar por esa "luminiscencia"
Segun VB:
Lum: Ajusta la luminiscencia entre 0 y 240. El valor 0 representa el color negro y el valor 240, al color blanco.
Bueno, quedé medio intrigado, aparentemente hay otro sistema de colores que lo llaman "HSL"
creo que aca podes ver algo:
http://www.workwithcolor.com/hsl-color-picker-01.htm
-
Hola pato te paso una funcion que suelo usar esta lo que hace combina dos colores con un tercer parametro que es para decir cuanto de uno y cuanto de otro en un rango de 0 a 255 ahora bien suponete que tenes un color rojo y lo combinas con el blanco y le das una pequeño porcentaje logras aclarar el rojo y si lo mesclas con negro se oscurece, asi que te va a servir con tu proposito
Option Explicit
Private Declare Function OleTranslateColor Lib "oleaut32.dll" (ByVal lOleColor As Long, ByVal lHPalette As Long, ByVal lColorRef As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
'Funcion para combinar dos colores
Private Function ShiftColor(ByVal clrFirst As Long, ByVal clrSecond As Long, ByVal lAlpha As Long) As Long
Dim clrFore(3) As Byte
Dim clrBack(3) As Byte
OleTranslateColor clrFirst, 0, VarPtr(clrFore(0))
OleTranslateColor clrSecond, 0, VarPtr(clrBack(0))
clrFore(0) = (clrFore(0) * lAlpha + clrBack(0) * (255 - lAlpha)) / 255
clrFore(1) = (clrFore(1) * lAlpha + clrBack(1) * (255 - lAlpha)) / 255
clrFore(2) = (clrFore(2) * lAlpha + clrBack(2) * (255 - lAlpha)) / 255
CopyMemory ShiftColor, clrFore(0), 4
End Function
Private Sub Form_Load()
Me.BackColor = vbRed
Picture1.BackColor = ShiftColor(Me.BackColor, vbWhite, 200) ' este aclara.
'Picture1.BackColor = ShiftColor(Me.BackColor, vbBlack, 200) ' este oscurece.
End Sub
-
Que bueno esta el code Leandro. Yo creo que es lo que esta buscando PatriciaBB
-
Gracias Waldo, me resulto muy interesante el link que indicaste en tu respuesta. Me sirvió de pista para investigar un poco más y es así como me topé con un código de Leandro “Función que establece el brillo”.
Leandro, gracias por este código que combina 2 colores, definitivamente de los dos códigos tuyos es el segundo el que estoy adecuando a mi necesidad. Esta padre.
Chicos mil gracias por vuestro apoyo… A verdad, Leandro no soy un pato… soy una Gatitaca BB :) jijiji