elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  No puedo utilizar Load Label en PictureBox
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: No puedo utilizar Load Label en PictureBox  (Leído 6,859 veces)
Fran1946

Desconectado Desconectado

Mensajes: 56


Ver Perfil
Re: No puedo utilizar Load Label en PictureBox
« Respuesta #10 en: 9 Julio 2018, 21:03 pm »

Pues de nuevo...
Muchísimas gracias, tu ayuda esta siendo inestimable.

Estoy depurando muchas cosas que tenía mal o que se podían implementar mejor.

Un saludo.


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: No puedo utilizar Load Label en PictureBox
« Respuesta #11 en: 10 Julio 2018, 03:25 am »

Saque un tiempo el fin de semana para hacer un sencillo ejemplo de prueba, pero me faltó tiempo para probarlo y subirlo...

Aunque se puede hablar largo y variado sobre la trnasparencia, vamos a ir al grano...
En los controles d eusuario de VB6, hay dos formas de dibujar:

A - La primera es usar el evento paint del propio usercontrol... cuando una parte dle control queda expuesta y luego liberada, salta un evento paint, que da la ocasión de redibujar el control. Así que en éste caso todo lo que se deba dibujar debe estar dentro de ese evento.
B - Un defecto del método propio, es que en generla se procede a dibujar por completo el control aunque solo hay sido expuesta una pequeña área. VB6, provee un método alternativo.
Cuando se pone la propiedad Autoredraw a TRUE, una vez pintado, VB6, hace una especie de 'capura' del gráfico, luego cuando se tapa y expone, VB6, solo pega parcialmente el área recién descubierta en vez de redibujar todo.
Naturalmente cuando haya que hacer cambios, hay que redibujar el control al completo por lo general...
Es importante saber que si se pone Autoredraw a TRUE, el evento paint, no salta, porque VB6 se encarga de repintar el área que lo precise, sin embargo o mejor dicho queda a cargo del programador actualizar convenientemente el gráfico cuando convenga...

Aclarado el tema, podemos crear una función llamada por ejemplo "Redibujar", si autoredraw está a false, saltará el evento paint, allí simplemente innnvocamos a esta función y listo. Y si Autoredraw está a TRUE, simplemente desde nuestro código debemos invocar dicha función cuando necesitemos actualizar el gráfico...

Vamos a  lo primero, algunas propiedades para controlar y que sirvan de ejemplo...

' OK: Devuelve o establece si el color del fondo del display es transparente y deja ver lo que hay bajo él.

Código
  1. ' En la sección de declaraciones:
  2. Private p_Transparente          As Boolean
  3. Private p_ColorTapiz              As Long
  4. Private p_ColorTinta              As Long
  5.  
  6.  
  7.  
  8. Public Property Get Transparente() As Boolean
  9.    Transparente = p_Transparente
  10. End Property
  11.    Public Property Let Transparente(ByVal X As Boolean)
  12.        If (X <> p_Transparente) Then
  13.            p_Transparente = X
  14.            Call Redibujar
  15.            PropertyChanged "Transparente"
  16.        End If
  17.    End Property
  18.  
  19. ' Devuelve o establece el color del fondo del control.
  20. '   Todo lo que se pinte de este color será transparente.
  21. ' No hay problema en delegar la propiedad en Usercontrol.Backcolor
  22. Public Property Get ColorTapiz() As OLE_COLOR
  23.    ColorTapiz = p_ColorTapiz
  24. End Property
  25.    Public Property Let ColorTapiz(ByVal X As OLE_COLOR)
  26.        If (X <> p_ColorTapiz) Then
  27.            p_ColorTapiz = X
  28.            Call Redibujar
  29.            PropertyChanged "ColorTapiz"
  30.        End If
  31.    End Property
  32.  
  33. ' Devuelve o establece el color de la tinta del control. Por defecto, lo que se dibue se hará con este color.
  34. '  puede delegarle la propiedad en Usercontrol.Forecolor sin problemas...
  35. Public Property Get ColorTinta() As OLE_COLOR
  36.    ColorTinta = p_ColorTinta
  37. End Property
  38.    Public Property Let ColorTinta(ByVal X As OLE_COLOR)
  39.        If (X <> p_ColorTinta) Then
  40.            p_ColorTinta = X             'UserControl.ForeColor = X
  41.            Call Redibujar
  42.            PropertyChanged "ColorTinta"
  43.        End If
  44.    End Property
  45.  

Añade tus funciones gráficas, en general pinta con el 'ColorTinta', digamos que es el color por defecto para pintar...
Es útil disponer también de una propiedad: "ColorPreset". que no es otra cosa que un array de colores...
Si son fijos los estableces en código, si son elegibles por el usuario, que el mismo los pueda remplazar, aunque siempre conviene que existan por defecto... en generla basta con 16 colores, digamos 15 para el array + el 'color Tinta' (el valor por defecto).
La ventaja de un color preset, es que si tiene spongamos 300 líneas que dibujar y 35 de ellas tienen un color morado y decides cambiarlo a amarillo, en vez de recordar que líneas son es preferible asignar un color preset a cada línea, luego cuando se queira cambiar el color, la propiedad detecta que ha cambiado y al dibujar lo hará con el nuevo color... sin tener que recorrer las 300 líneas para asignarle un nuevo color... así pasamos por ejemplo de la estructura:
Código
  1. public type DatosLinea
  2.    X1 as integer
  3.    Y1 as integer
  4.    X2 as integer
  5.    Y2 as integer
  6.    Color as long
  7. end type
  8.  
Es preferible usar una estructura ligeramente diferente...
Código
  1. public type DatosLinea
  2.    X1 as integer
  3.    Y1 as integer
  4.    X2 as integer
  5.    Y2 as integer
  6.    IndexColor as Integer
  7. end type
  8.  

IndexColor apunta a un índice en el array de ColorPreset, así cambiar el color a 52 líneas no exige más que cambiar el color al índice concreto, y no a todas las 52 lineas recorriendo las 300... Una vez hecho el cambio, al dibujar sería algo como:
Código
  1.    For k = 0 to p_NumLineas
  2.        with ColLineas(k)  ' una colección o array de 'DatosLinea'
  3.            UserControl.Line (.x1, .y1)-(.x2, .y2), p_ColorPreset(.IndexColor), BF
  4.        end with
  5.    Next
  6.  

La propiedad ColorPreset, requiere dos parámetros, el índice y el color que se asigna a dicho índice:
Código
  1. ' en las declaraciones:
  2. private p_ColorPreset(-1 to 15)    as long  ' el valor del índice -1, refleja el ColorTinta
  3.  
  4. public property get ColorPreset(byval Indice as byte) as OLE_Color
  5.    ColorPreset = p_ColorPreset(indice)
  6. end property
  7.    ' Como indice está declarado como byte, el índice -1 no puede ser alterado externamente
  8.    Public property let ColorPreset(byval Indice as byte, byval X as OLE_Color)
  9.        if (indice > 15) then err.raise 381  ' indice de array fuera de rango.
  10.        If (p_ColorPreset(Indice) <> X) then
  11.            p_ColorPreset(Indice) = X
  12.            Call Redibujar
  13.            PropertyChanged "ColorPreset"
  14.        end if
  15.    end property
  16.  

Esto sin embargo es mejorable en dos aspectos.
Lo primero es que al poner dos parámetros en una propiedad, ya no puede aparecer en la "ventana de propiedades" durante el diseño y por tanto durante diseño, la aplicación cliente, no podrá poner reasignar colores salvoque se añada una página d epropiedades, que es complicarlo solo para esto.
Hay una técnica muy sencilla, que admeás puede también aplicarse a otros objetos que posena índice  y varia spropiedades... y consiste en desdoblar la propiedad en dos...
por un lado el índice y por otro el color, como se muestra a continuación:
Código
  1. ' en las declaraciones:
  2.    private p_IndexPreset     as byte
  3.    private p_ColorPreset(-1 to 15)    as long  ' el valor del índice -1, refleja el ColorTinta  
  4.  
  5. ' Esta propiedad refleja en diseño el índice al que se aplica el colorPreset...
  6. public property get IndexPreset() as byte
  7.    IndexPreset = p_IndexPreset
  8. end property
  9.    ' Como indice está declarado como byte, el índice -1 no puede ser alterado externamente
  10.    Public property let IndexPreset(byval X as byte)
  11.        if (x > 15) then err.raise 381  ' indice de array fuera de rango.
  12.        If (p_IndexPreset <> X) then
  13.            p_IndexPreset(Indice) = X
  14.            ' no necesita guardarse esta propiedad, puede ser 0 cada vez... que se carguen las propiedades.
  15.        end if
  16.    end property
  17.  
  18. public property get ColorPreset() as OLE_Color
  19.    ColorPreset = p_ColorPreset(p_IndexPreset)
  20. end property
  21.    ' Como indice está declarado como byte, el índice -1 no puede ser alterado externamente
  22.    Public property let ColorPreset(byval X as OLE_Color)
  23.        If (p_ColorPreset(p_IndexPreset) <> X) then
  24.            p_ColorPreset(p_IndexPreset) = X
  25.            Call Redibujar
  26.            PropertyChanged "ColorPreset"
  27.        end if
  28.    end property
  29.  
Ahora ya aparece esa propiedad en la 'ventana de propiedades', para cambiar un color del array, basta cambiar el array y luego asignar un color...

Antes decía que tenía dos carencias, una ya ha quedado subsanada, la otra es que anque tenemos 16 colores, no necesariamente deben estar todos en uso, sin embargo al cambiar un color del preset, forzamos un redibujado... algo caro si resulta que nada está dibujado con ese color.
Algo más optimo es mantener un array paralelo que lleve la cuenta de 'objetos' que usan cada color...
Cuando se añade un nuevo 'objeto gráfico', se añade 1 a la cuenta, si se elimina (o se cambia de índice asignado de color), se resta 1 para ese índice (y se suma uno al otro si cambió de índice).
Entonces ahora la última propiedad puede mejorarse así:
Código
  1. private p_CuentaObjColor(0 to 15)         as integer
  2.  
  3. public property get ColorPreset() as OLE_Color
  4.    ColorPreset = p_ColorPreset(p_IndexPreset)
  5. end property
  6.    ' Como indice está declarado como byte, el índice -1 no puede ser alterado externamente
  7.    Public property let ColorPreset(byval X as OLE_Color)
  8.        If (p_ColorPreset(p_IndexPreset) <> X) then
  9.            p_ColorPreset(p_IndexPreset) = X
  10.            if (p_CuentaObjColor(p_indexPreset)>0) then
  11.                Call Redibujar
  12.            end if
  13.            PropertyChanged "ColorPreset"
  14.        end if
  15.    end property
  16.  
Ahora es más eficiente, al coste de mantener convenientemente actualizado el array con la cuenta de objetos que mantienen tal o cual color...
Claramente si el número de líneas a dibujar son pocas, redibujarlo todo cada vez, no sea pesado y a cambio uno se olvida de la complejidad añadida por la eficiencia, en cambio sin son algunas miles d elínea sa dibujar... redibujarlas todas cuando ningún objeto utiliza dicho color, no es ideal... En fin uno debe decidir que conviene mas dado el caso de que vaya a usarse muchas o pocos objetos gráficos...

Todo lo previo es para optimizar operaciones, ahora veremos unamanera de reutilizar el mismo control para 3 tareas diferentes...
- Polilínea: Son varios puntos conectados entre sí, formando un único objeto gráfico, más o menos complejo...
Se dibuja una línea de un punto a otro, si uno no está activo se pasa al siguiente (es decir el que noes
´te activo se ignora).
- Múltiples líneas inconexas entre sí. Es decir cada línea tiene dos puntos que definen su inicio y su fin.
Cad alínea comienza en un índice par como X1,Y1 y termina en el siguiente punto delarray (punto impar), como X2, Y2.
- Poligonos: Cada polígono se compone de varios vértices. realmente también puede considerarse múltples polilíneas, ya que ser polígono, exige que la última línea del polígono se conecte a la primera.
Un poligono dibuja de un punto a otro, hasta encontrar uno no activo, momento en que se considera que acaba e polígono (o polilínea en múltiples polilineas).
Todo ello soportado con una misma y única colección o array (luego un par de párrafos al respecto).

Aquí, código para dar salida a todas esas ideas...
Código
  1. ' en las declaraciones:
  2. Public Type PuntoPolilinea
  3.    X       As Single
  4.    Y       As Single
  5.    Activo  As Byte         ' Valor 255 = activo, se dibuja, otro valor no se dibuja
  6.    ' (interesa un byte mejor que Boolean, porque incluso puede usarse como cuenta y al alcanzar el valor 255 será 'dibujable', en cualquier caso, un boolean en vb6 ocupa 2 bytes).
  7. End Type
  8.  
  9. ' Comportamiento del control a la hora de dibujar.
  10. Public Enum ModosDeDibujado
  11.    DIBUJA_INCONEXA = 0        ' De un punto par al siguiente impar, del impar salta (sin dibujar) al siguiente par.
  12.    DIBUJA_POLILINEA = 1       ' Se comporta como una línea continua de un punto (activo) a otro.
  13.    DIBUJA_POLIGONOS = 2       ' Se comporta como si fueran polígonos, cada polígono termina cuando un punto está desactivado.
  14. End Enum
  15.  
  16. Private p_Polilinea         As ModosDeDibujado  ' Se comporta de diferentes maneras...
  17.  
  18. Private p_ptActual          As Integer              ' para señalar valores dado su índice.
  19. ' Permite dibujar desde un punto a otro específico...
  20. Private p_ptInicio          As Integer             ' Punto desde el que se empieza a dibujar.
  21. Private p_ptFinal           As Integer             ' Punto donde se termina de dibujar (si circular hasta el sigiente).
  22. Private p_ptEvento          As Integer          ' dispara un evento al dibujar dicho punto, para tener ocasión de asignar color, ancho paqra la siguiente línea (o para el resto), incluso para poder cambiar el índice de otro punto para evento...
  23.  
  24. ' en las propiedades:
  25.  
  26. ' Devuelve o establece un valor que determina si los puntos se comportan como una polílínea, como líneas inconexas o como polígonos (o múltiples polilíneas). Actuando como líneas inconexas cada línea queda definidar por un punto par y el siguiente.
  27. ' OJO: Dado que como múltiples líneas, cada línea(inconexa) requiere dos puntos, queda definida por un punto par y el siguiente impar,
  28. '  luego definir como punto inicial (para empezar a dibujar) uno impar, haría una conexión errónea (conectando el punto final de una línea con el punto inicial de otra), para todas ellas.
  29. Public Property Get ModoDibujo() As ModosDeDibujado
  30.    ModoDibujo = p_Polilinea
  31. End Property
  32.    ' La idea es que el control se utilice para una sola cosa durante su tiempo de ejecución.
  33.    Public Property Let ModoDibujo(ByVal X As ModosDeDibujado)
  34.        If (X <> p_Polilinea) Then
  35.            If (p_Polilinea = DIBUJA_POLIGONOS) Then
  36.                p_Polilinea = X
  37.                Call AjustarArray
  38.  
  39.                If (X = DIBUJA_INCONEXA) Then
  40.                    ' Garantiza la integridad de dibujar líneas como se definieron.
  41.                    If (p_ptInicio And 1) Then          ' si es impar, se resta uno,
  42.                        p_ptInicio = (p_ptInicio - 1)   ' para apuntar al punto inicial de la línea.
  43.                    End If
  44.                End If
  45.  
  46.                If (p_Autodibujar = True) Then
  47.                    Call Redibujar
  48.                End If
  49.            Else
  50.                p_Polilinea = DIBUJA_POLIGONOS
  51.                ' no se debe redibujar, sin cargar primero los puntos.
  52.            End If
  53.            PropertyChanged "ModoDibujo"
  54.        End If
  55.    End Property
  56.  

Los campos para otras propiedades:
- p_ptActual: Sirve para usar la misma técnica anterior y poder asignar línea durante diseño, sobre la ventana d epropiedades... va bien cuando son pocas, si son muchas es preferible usar un fichero externo y proveer una función de carga d elos datos...

- p_ptInicio, p_ptFinal... aunque se comentan brevemente en su declaración, sirven para dibujar en un bucle... por defecto una vale 0 y la otra el último punto del array/colección, pero en la práctica, puede ser usado como separador de objetos, por ejemplo podrías tener olilíneas entre el indice 0 y el 60, línea ssueltas entre el índice 61 y 130 y poligonos (de pocos lados cada uno) entre el punto índice 131 y el 540, y otro objeto más complejo entre el índice 541 y el 650 (por ejemplo)... así si precisas redibujar solo las líneas, estbalece inicio y fin a los valores 61 y 130 respectivamente y luego con polilinea = DIBUJA_INCONEXA, si está establecda una propiedad AutoRedibujar , ya haría el redibujado, y si no puede crearse una función publica que admita dichos parámetros...

Ahora la función de dibujado que aplica las diferentes formas de dibujado:
Código
  1. ' redibuja toda la figura desde el punto inicial hasta el final (perop uede hacerse pública y admitir los parámetros antedichos más arriba, para ser invocada también desde fuera...
  2. Private Sub DibujarMiContenido()
  3.    Dim k As Integer, j As Integer, i As Integer, n As Integer
  4.    Dim X1 As Single, X2 As Single, Y1 As Single, Y2 As Single
  5.    Dim kol As Long, Ancho As Byte
  6.    Dim pts() As PuntoPolilinea
  7.  
  8.    If (p_NumPuntos > 1) Then
  9.        ' para permitir (durante evento de punto), dibujar con coloy ancho distintos sin alterar el valor 'general'.
  10.        kol = p_ColorTinta ' UserControl.ForeColor
  11.        Ancho = UserControl.DrawWidth
  12.  
  13.        If (p_ptInicio < p_ptFinal) Then
  14.            i = p_ptInicio: j = p_ptFinal: n = 1
  15.        Else
  16.            j = p_ptInicio: i = p_ptFinal: n = -1
  17.        End If
  18.  
  19.        ' 2 arrays, uno mantiene los puntos originales para no perse rprecisión por escalados contínuos, el otro
  20.        '    mantiene los valores escalados...
  21.        If (p_AutoEscalado = True) Then
  22.            pts = s_Escala
  23.        Else
  24.            pts = p_Puntos
  25.        End If
  26.  
  27.        If (p_Polilinea = DIBUJA_POLILINEA) Then
  28.            ' Dibuja como una polílinea. Líneas conexas entre puntos activos...
  29.            ' Donde cada línea queda definida entre un par de puntos activos.
  30.            '  Los puntos pueden estar activos individualmente.
  31.            If (p_NumPtActivos = 0) Then Exit Sub
  32.  
  33.            With pts(p_ptInicio)
  34.                X1 = .X: Y1 = .Y
  35.            End With
  36.  
  37.            For k = i + n To j Step n
  38.                With pts(k)
  39.                    If (.Activo = 255) Then
  40.                        X2 = .X: Y2 = .Y
  41.                        If (k = p_ptEvento) Then
  42.                            ' El cliente tiene con éste evento oportunidad de dibujar algo en ese momento, cambiar valor de puntos
  43.                            '   cambiar color para dibujar, el ancho, e incluso definir otro momento de evento como éste para hacer más cambios.
  44.                            RaiseEvent DibujandoPuntoSel(p_ptEvento, kol, Ancho)
  45.                        End If
  46.                        UserControl.Line (X1, Y1)-(X2, Y2), kol
  47.                        X1 = X2: Y1 = Y2
  48.                    End If
  49.                End With
  50.            Next
  51.  
  52.            If (p_Circular = True) Then
  53.                With pts(i)
  54.                    X2 = .X: Y2 = .Y
  55.                    UserControl.Line (X1, Y1)-(X2, Y2), kol
  56.                End With
  57.            End If
  58.  
  59.        ElseIf (p_Polilinea = DIBUJA_INCONEXA) Then
  60.            ' Dibuja como múltiples líneas inconexas entre sí...
  61.            ' Donde cada línea queda definida por un par de puntos par-impar.
  62.            '  La línea está 'activa' si el primero lo está (obviando el estado del 2º).
  63.            If (i And 1) Then i = (i - 1)
  64.            For k = i To j Step (n * 2)
  65.                With pts(k)
  66.                    If (.Activo = 255) Then
  67.                        X1 = .X: Y1 = .Y
  68.                        ' Como múltiples líneas se ignora el estado activo del segundo punto.
  69.                        With pts(k + n)
  70.                            X2 = .X: Y2 = .Y
  71.                        End With
  72.  
  73.                        ' Igualmente: éste punto debiera ser par, o modificarse como  está comentado
  74.                        If (k = p_ptEvento) Then   ' or ((k+n) = p_ptEvento) then
  75.                            ' El cliente tiene con éste evento oportunidad de dibujar algo en ese momento, cambiar valor de puntos
  76.                            '   cambiar color para dibujar, el ancho, e incluso definir otro momento de evento como éste para hacer más cambios.
  77.                            RaiseEvent DibujandoPuntoSel(p_ptEvento, kol, Ancho)
  78.                        End If
  79.  
  80.                        UserControl.Line (X1, Y1)-(X2, Y2), kol
  81.                    End If
  82.                End With
  83.            Next
  84.        Else ' poligonos...
  85.            ' polígonos solo se dibuja en orden hacia arriba...
  86.            Do While (i < j)
  87.                With pts(i)
  88.                    X1 = .X: Y1 = .Y
  89.                End With
  90.  
  91.                ' un polígono acaba cuando encuentra un punto 'no activo'
  92.                Do While pts(i).Activo = True
  93.                    i = (i + 1)
  94.                    With pts(i)
  95.                        X2 = .X: Y2 = .Y
  96.                        ' Igualmente: éste punto debiera ser par, o modificarse como  está comentado
  97.                        If (i = p_ptEvento) Then   ' or ((k+n) = p_ptEvento) then
  98.                            ' El cliente tiene con éste evento oportunidad de dibujar algo en ese momento, cambiar valor de puntos
  99.                            '   cambiar color para dibujar, el ancho, e incluso definir otro momento de evento como éste para hacer más cambios.
  100.                            RaiseEvent DibujandoPuntoSel(p_ptEvento, kol, Ancho)
  101.                        End If
  102.  
  103.                        UserControl.Line (X1, Y1)-(X2, Y2), kol
  104.                    End With
  105.                    X1 = X2: Y1 = Y2
  106.                Loop
  107.                i = (i + 1)
  108.            Loop
  109.        End If
  110.  
  111.        ' restaura el ancho de dibujado...
  112.        UserControl.DrawWidth = Ancho
  113.    End If
  114. End Sub
  115.  

El campo "p_ptEvento" da pie a otra propiedad... por eejmplo dado un indice que se debe dibujar con un color o ancho distintos, alllegar aél se lanza el evento, y se responde cambiando el color y/o el ancho de dibujado de la línea y/o también el próximo punto donde parar...

en este ejemplo de función no he hecho uso del array ColorPreset, ya puse un ejemplo muy simple más arriba de como usarlo, aquí se ha puesto para el caso, p_ColorTinta, ya que la estructura definida algo más arriba, no aloja un color, si no otro campo interesante "Activo", para señalar qué hacer o para que sirve o como funcionar con dicho punto de formas diversas...

Y como ya me he extendido más d elo que pretendía, finalmente podrmeos dibujar con transparencia...
Respeta lo que en esta función aparece y lo que modifiques que sea en una función aparte o bien enciam o debajo de la función usada para todo el dibujado...
Código
  1. ' Con AutoRedraw=True, nunca se invoca este método,
  2. '  se puede solucionar así...
  3. ' Private Sub UserControl_Paint()
  4. '     call Redibujar
  5. ' end sub
  6.  
  7. ' siempre conviene tener una funcion externa que redibuje todo...
  8. public sub Refresh
  9.    call Redibujar  
  10. end sub
  11.  
  12. '  pero si se pone a False, no requiere invocarse otro método.
  13. Private Sub Redibujar()
  14.    With UserControl
  15.        .BackStyle = 1
  16.        .DrawMode = vbCopyPen
  17.        .FillStyle = vbFSTransparent
  18.  
  19.        ' Color del fondo...
  20.        '.Cls ' aplicando el color al usercontrol.backcolor, pero como no delegamos en usercontrol.backcolor...
  21.        ' pintmaos el fondo 'a mano'.
  22.        UserControl.Line (0, 0)-(.Width, .Height), p_ColorTapiz, BF  ' "B"oxed y "F"illed
  23.  
  24.        'Call DibujarFondo ' dibujamos si hay alguna imagen de fondo con algo transparente o no, quizás una cuadrícula
  25.        Call DibujarMiContenido ' dibujamos el valor
  26.        Call DibujarRelieve ' dibujamos el borde. Si el borde va ser sencillo, mejor delegar en el usercontrol.BorderStyle, pero si redondeamos esquinas, o se da un margen mayor, etc... viene bien dibujarlo después del resto.
  27.  
  28.        If (p_Transparente = True) Then
  29.            .MaskColor = p_ColorTapiz
  30.            .BackStyle = 0
  31.            Set .MaskPicture = .Image
  32.        End If
  33.  
  34.        If (p_Activo = False) Then ' usercontrol.Enabled
  35.            Call DibujarEstadoDisabled
  36.        End If
  37.    End With
  38.    'RaiseEvent Pintado
  39. End Sub
  40.  

pongo alguna imagen... y como ya se me hace tarde para más, mañana (o pasado, si no tengo tiempo mañana) comprimo el proyecto de ejemplo y lo subo a alguna página de descarga... comentaré alguna cosa más antes...






En línea

Fran1946

Desconectado Desconectado

Mensajes: 56


Ver Perfil
Re: No puedo utilizar Load Label en PictureBox
« Respuesta #12 en: 10 Julio 2018, 09:52 am »

Perfecto, me espero a que subas todo esto.

Muchas gracias.

Un saludo.
En línea

Fran1946

Desconectado Desconectado

Mensajes: 56


Ver Perfil
Re: No puedo utilizar Load Label en PictureBox
« Respuesta #13 en: 16 Julio 2018, 13:36 pm »

Copiado todo este código

Espero a lo que subas.

Muchas gracias de nuevo.

Un saludo.
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines