Respecto de vb6 (perdona que no te haya respondido antes, no me he percatado que respondiste hasta ahora).
Citar
Código
Private Sub Command1_Click() Set UserControl_1.Picture = LoadPicture("") End Sub
Citar
Para evitar usar el procedimiento set añadí esto al código del activex y ya funcionó bien
Set no es ningún procedimiento, es una instrucción propia de la sintaxis del lenguaje.Un procedimiento implica código asociado que se ejecuta por debajo.
Una instrucción (como su nombre indica), simplemente instruye/advierte/notifica al compilador... (en este caso concreto) que se trata de un objeto, para que tenga en consideración el puntero de memoria, las referencias, y lo valide todo, etc... y de cara al programador para indicarle con claridad una diferencia tangible entre variables 'nativas' y las 'extendidas'...
Citar
Código
Public Property Let Picture(ByVal New_Picture As Picture) Picture1.Picture = New_Picture PropertyChanged "Picture" End Property
Esto no es deseable, por que lo pasas por valor, que si tiene una pérdida de eficiencia. Fuerza a realizar más comprobaciones "Late In Time", de las necesarias...
Ten en cuenta que desde que la programación existe, la instrucción de asignar un valor a una variable es LET. La mayoría de los lenguajes la usaban en su tiempo y poco a poco fueron de sapareciendo de la mayoría (aún queda alguno que la utiliza).
Antes se usaban estas instrucciones de asignación, que hacen exactamente lo mismo que eliminando el Let.
Código
Pero al final el 'let' dejó de ser obligatorio... es opcional. Para aquellos que proceden del C, y se lían por el uso de los símbolos '=' en referencia a la distinción entre asignación y comparación, la conveniente aparición y uso del 'let' les resolvería muchas dudas... pero se perdió en BASIC a finales de los 80, por obviedad... igual que el 'Set' en NET, por la misma razón (solo que en NET 'Set' ni siquiera es opcional en tanto que el 'Let' si lo sigue siendo... si lo pones, NET no canta error, simplemente lo borra inmediatamente, para indicarte que 'no es necesario'...
Let b = 5 Let a = b Let c = (a + 3) Let picture1.picture = New_Picture
Así tu código debiera ser:
Código
'Public Property Let Picture(ByVal New_Picture As Picture) Public Property Set Picture(ByRef New_Picture As Picture) ' ó mejor as IPictureDisp Set Picture1.Picture = New_Picture PropertyChanged "Picture" End Property
p.d.: Olvidaba responderte a esto:
Citar
he creado ya el ActiveX pero SetLayeredWindowAttributes no aplica cambios en el ActiveX, no elimina la parte coloreada. paso a la siguiente opción
La idea de crear el ActiveX, es que ya por sí solo y sin mediación de nada más (cero APIs) tenga intrínsecamente la transparencia, tu solo te preocupará de cambiar alguna propiedad, como la propiedad 'Picture' y la propiedad 'MaskColor' y punto (y eventualmente alguna propiedad más, relacionada, por ejemplo para que deje de actuar transparente y en un momento dado sea opaco, o vuelta a transparente... vamos según en algún momento interese que sea así o asá...).P.d2: Te dije que si me señalabas que necesitas exactamente o qué propiedades precisas tener, podría modificarte un control para que se adapte a lo que necesitas...
Te pongo alguna captura de ejemplo:
En el primero se ven varias intancias de un control DisplayLCD, que permite tener una serie de dígitos, y señalar en otro color los decimales, elegir la base numérica (octal, decimal y hexadecimal, hacerlo transparente o no, el relieve del borde admite hundido, elevado, plano (de un color específico) o sin borde, así mismo se puede sincronizar con un timer para reflejar la hora (el timer se pone a 1000 ms. y cuando vence el tiempo, actualiza el contenido con el valor de la hora, luego cambia cada segundo), etc...
En este otro se ven dos controles uno es un array de vértices 3d, que conecta a otros vértices, también transparente, que admite el giro en las 3 dimensiones... al caso muestra una figura dle ajedrez.
El otro es de texto... en la siguiente imagen se hace uso de desactivar/activar la transparencia cuando se pulsa/suelta el botón sobre las partes visibles de dicho control...