hola de nuevo,
acabo de eliminar un mensje practicamente igual a este, por que habia
demasiados 'trunques' en el foro (al menos via web) y para quitar un
par de reiteraciones innecesarias.
aparte en las pruebas creo que ahora queda 'mas guapo', que se dice
por ahi. Aunque los codigos so n algo largos lpara la prueba basta
copiar y pegar, y modificar unicamente las dos constantes de inicio.
OJO tal y como esta ahora no se deben de poner mas de 10 iconos en la
constante Iconos. Y tampoco recomiendo que menos, pues con diez se ve
muy bien.
bueno, este es integranmente el mensaje eliminado, excepto en las
modificaciones del codigo (espero que ahora no se trunque
'''''''''''''''mensaje eliminado para arreglar un poco
''''''''''''''''''
hola a todos de nuevo,
bueno, ante la no respuesta de Miguel, y para no dejar el hilo
'cojo',
me respondo yo solo (..puro vicio ;-))
efectivamente, para la consulta hecho por OP, parece que simplemente
basta con poner el backcolor en transparente
tal y como se plante la consulta se da por hecho que las imagenes /
iconos cargados ya estan tratados para tener el adecuado grado de
transparencia que permita ver lo que 'haya' detras (dificilmente se
podra ver nada a traves de algo opaco)
siendo asi, lo unico que entorpece la visibilidad del panel es el
backcolor del picturebox, cambiar el cual realmente es sumamente
secillo.
otra cosa es cargar las imagenes adecuadamente
no estoy muy seguro si este ej. que voy a poner es demasiado
'adecuado', pero funciona bastante bien.
a) la funcion " PictBoxTransparentoso" es la que hace realmente lo
que
buscamos, cargar en un picturebox un icono (o imagen) con un grado de
transparencia que permita ver lo que haya detras, y por supuesto
ponemos el backcolor del pb en transparente
a) por otro lado, la funcion "panelGraficado" solo es para crear un
panel graficado en el que hacer las pruebas con los picturebox (ha
sido casi de chiripa, pero la verdad es que queda hasta bonito,
je,je, ...)
c) un ej. de uso en el load de un formulario
Nota: una recomendacion si alguien quiere probarlo es que agrande un
poco el form original/habitual del ide de VB, para no correr el
riesgo
de quedarnos cortos
posiblemente tambien convendria controlar varios factores de riesgo
de
error (pej, que no exista o sea incorrecta la ruta de las imagenes)
bueno, estas son las funciones OJO a los posibles trunque del codigo
en el editor del foro)=>
' crear un form vacio, agrandarlo un poco y poner este codigo en su
modulo
'-----------------------------------------------------------
Public Class Form1
'
' constantes para las imagenes/iconos
'
Private Const CarpetaIconos As String = _
"C:\Documents and Settings\Ivan\Mis documentos\Mis Iconos
\Iconos_RV_Net\"
Private Const Iconos As String = _
"Ajuste_Color.ico,Contraste.ico,Cuentagotas.ico," & _
"delete.ico,Recortar.ico,Cortar.ico,Abrir.ico,Rellenar.ico," &
_
"Imagenes.ico,Iluminacion.ico"
'
' carga una imagen en un picturebox creado al efecto y con
' el grado de transparencia indicado
' parametros:
' pNombre => nombre que se va a poner al picture
' pRect => rectangle con ubicacion y medidas del pb.
' archivoImg => ruta y nombre de la imagen
' pAlpha => un valorentre 0 y 255 que indicara el
' grado de trasparencia (0 = transparente, 255 = opaco)
'
Private Function PictBoxTransparentoso( _
ByVal pNombre As String, _
ByVal pRect As Rectangle, _
ByVal archivoImg As String, _
ByVal pAlpha As Integer) As PictureBox
Dim pPb As New PictureBox
With pPb
.Name = pNombre
.SizeMode = PictureBoxSizeMode.Zoom
.SetBounds(pRect.X, pRect.Y, _
pRect.Width, pRect.Height)
Dim bm As New Bitmap( _
.ClientSize.Width, .ClientSize.Height)
bm = Image.FromFile(archivoImg)
Dim x, y As Integer
Dim bm2 As New Bitmap(bm.Width, bm.Height)
If pAlpha < 0 OrElse pAlpha > 255 Then _
pAlpha = 127
For x = 0 To bm.Width - 1
For y = 0 To bm.Height - 1
Dim pixCl As Color = bm.GetPixel(x, y)
Dim newColor As Color = _
Color.FromArgb(pAlpha, pixCl.R, _
pixCl.G, pixCl.B)
bm2.SetPixel(x, y, newColor)
Next
Next
.Image = bm2
.BackColor = Color.Transparent
End With
Return pPb
End Function
'
' crea un panel con una serie de graficos 'dibujados' para
' hacer las pruebas de los picturebox
' Parametros:
' pNombre => nombre para el panel
' pRect => rectangle con ubicacion y medidas del panel
'
Private Function Panelgraficado( _
ByVal pNombre As String, _
ByVal pRect As Rectangle) As Panel
Dim vP As New Panel
With vP
.Name = pNombre
.SetBounds(pRect.X, pRect.Y, _
pRect.Width, pRect.Height)
Dim bm As New Bitmap( _
.ClientSize.Width, .ClientSize.Height)
.BackgroundImage = bm
Dim gh As Graphics = _
Graphics.FromImage(.BackgroundImage)
Dim vCentro As New Point( _
CInt(bm.Width / 2), CInt(bm.Height / 2))
Dim vL As Integer = vCentro.X - 20
Dim vT As Integer = vCentro.Y - 20
Dim stp As Integer = 20
If CInt(vT / stp) > 0 Then
Dim x, y As Integer
For x = 10 To vL Step stp
For y = 10 To vT Step stp
Dim rect As New Rectangle( _
x, y, (vCentro.X * 2) - (x * 2), _
(vCentro.Y * 2) - (y * 2))
gh.DrawEllipse(Pens.Red, rect)
gh.DrawRectangle(Pens.Violet, rect)
Dim p() As Point = { _
New Point(x, vCentro.Y), _
New Point(vCentro.X, y), _
New Point(vCentro.X + x, vCentro.Y), _
New Point(vCentro.X, vCentro.Y + y)}
gh.DrawPolygon(Pens.Yellow, p)
Next
Next
End If
gh.Dispose() : gh = Nothing
End With
Return vP
End Function
'
' en el load del form desarrollamos el proceso
'
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
'
Me.WindowState = FormWindowState.Maximized
' creamos y 'graficamos' el panel
Dim panelFondo As Panel = _
Panelgraficado("PanelF", Me.ClientRectangle)
'
Dim n As Integer
Dim carpeta As String = ""
'
' recorremos los iconos de la constante idem
For n = 0 To Iconos.Split(",").Length - 1
carpeta = CarpetaIconos & Iconos.Split(",")(n)
'
' rect ubicacion y medidas para iconos y pictb.
Dim rect As New Rectangle( _
30 + (30 * n), 20 + (20 * n), _
22 + (22 * n), 22 + (22 * n))
'
' creamos los picturebox cargando los iconos con
' el grado de trasparencia segun el ultimo parametro
Dim PictureB As PictureBox = _
PictBoxTransparentoso("PictTrans" & n, _
rect, carpeta, 255 - (25 * n))
'
' cargamos los picturbox en el panel
panelFondo.Controls.Add(PictureB)
Next
'
' cargamos el panel en el form
Me.Controls.Add(panelFondo)
End Sub
End Class
bueno, ya que esta, por si a alguien le sirve (y si alguien ve alguna
burrada o lo que sea, se agradecen los comentarios)
un saludo
Ivan