substraer color

Iniciado por FJDA, 21 Abril 2019, 22:03 PM

0 Miembros y 1 Visitante están viendo este tema.

Serapis

#10
Si necesitas hacerlo desde NET, prueba con las sugerencias de Elektro...

Respecto de vb6 (perdona que no te haya respondido antes, no me he percatado que respondiste hasta ahora).

Citar
Código (vb) [Seleccionar]

   Private Sub Command1_Click()
    Set UserControl_1.Picture = LoadPicture("")
   End Sub
Exacto, en vb6 la asignación de objetos es a través de Set objeto = loquesea
   


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 (vb) [Seleccionar]

   Public Property Let Picture(ByVal New_Picture As Picture)
       Picture1.Picture = New_Picture
       PropertyChanged "Picture"
   End Property
En definitiva, omitir el Set carece de consecuencias prácticas referentes al rendimiento, más bien es al revés, exige comprobaciones de tipo retrasadas a la compilación. Usando el Set, al compilar se verifica la asignación de objetos y por ende, una vez compilado evita hacer comprobaciones innecesarias...

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 (vb) [Seleccionar]

Let b = 5
Let a = b
Let c = (a + 3)

Let picture1.picture = New_Picture

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'...

Así tu código debiera ser:
Código (vb) [Seleccionar]

   '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:
Citarhe 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...



FJDA

#11
ahora estoy con otro programa este tema lo dejé apartado temporalmente cuando pueda me probaré lo que me habéis comentado

En cuanto a lo del ActiveX si le puse APIs.



tened paciencia porque dedico muy poquito tiempo a la programación