Autor Tema: Cargar Imagen a un UC en tiempo de ejecucion  (Leído 5531 veces)

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

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Cargar Imagen a un UC en tiempo de ejecucion
« en: Febrero 10, 2012, 04:02:33 am »
Amigos, toy trancado con esto, estoy empezando a hacer un control de usuario similar al que publico una vez Enter pero sin usar el ucImage.
Lo que necesito es que en tiempo de ejecucion pasarle una imagen jpg al control de usuario. El control de usuario ya tiene un control imagen dentro y le herede la propiedad aunque creo que lo estoy haciendo mal porque me sale cero, no se como hacer para poder pasarle la imagen.

Aqui les paso el código, esta bastante misio aun porque primero quiero resolver esto que me resulta importante.

Descargar

Muchas gracias.
« última modificación: Febrero 12, 2012, 02:19:18 am por YAcosta »
Me encuentras en YAcosta.com

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Cargar Imagen a un UC en tiempo de ejecucion
« Respuesta #1 en: Febrero 10, 2012, 06:45:52 pm »
Hola Yvan pone asi adentro del usercontrol y quita las que tenes


Código: (Vb) [Seleccionar]
Public Property Get Picture() As Picture
   Picture = Image1.Picture
End Property

Public Property Set Picture(ByVal vNewValue As Picture)
    Set Image1.Picture = vNewValue
    PropertyChanged "Picture"
End Property

Public Property Let Picture(ByVal vNewValue As Picture)
    Set Image1.Picture = vNewValue
End Property


Se utiliza el SET pero para no tener que poner desde el formulario Set UserControl11.Picture = LoadPicture(Ruta)  se pone la propiedad Let que se encarga internamente.

Esto mismo se usa para las fuentes.

Saludos

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Cargar Imagen a un UC en tiempo de ejecucion
« Respuesta #2 en: Febrero 11, 2012, 01:30:08 am »
Muchas gracias Leandro, funcionó perfecto, muchas gracias.

Ahora le pondré adornos a ver que tal me va.

Gracias!!!

EDITO:
Se me presento un inconveniente, discúlpame pero le di vueltas y no logro corregirlo. Si ejecuto el ejemplo que publique haciendo el cambio que indicaste y ejecuto y cargo por código una foto esta se pinta correctamente en el uc. Pero si luego selecciono en tiempo de diseño el uc me sale el error:
"Uso no valido de la propiedad"
Esto en esta parte del código del UC:
Código: (VB) [Seleccionar]
Public Property Get Picture() As Picture '<-- En esta parte se cae
   Picture = Image1.Picture
End Property

Me llama la atención que ejecutando (F5) el programa va bien, pero luego que detengo (Stop) o reinicio el VB6 y en tiempo de diseño selecciono el uc ya sea para moverlo o ver sus propiedades me salta ese error.

Ya llevo mas de una hora y no doy con la solución.

Gracias
« última modificación: Febrero 11, 2012, 04:22:10 am por YAcosta »
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Cargar Imagen a un UC en tiempo de ejecucion
« Respuesta #3 en: Febrero 11, 2012, 10:16:33 am »
Public Property Get Picture() As StdPicture

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Cargar Imagen a un UC en tiempo de ejecucion
« Respuesta #4 en: Febrero 11, 2012, 06:23:19 pm »
Gracias Raul, no conocía el objeto StdPicture, ahora si puedo seleccionar el control en tiempo de desarrollo.
Lo puse asi y ya funciono:

Código: (VB) [Seleccionar]
Public Property Get Picture() As StdPicture
   StdPicture = Image1.Picture
End Property

Aunque aun no me queda claro del todo porque esta solución fue la solución para que no me genere ese error, investigare sobre ese objeto.

Gracias.
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Cargar Imagen a un UC en tiempo de ejecucion
« Respuesta #5 en: Febrero 11, 2012, 08:47:39 pm »
Tienes activado option explicit? Eso no deberia funcionar por si solo :P

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Cargar Imagen a un UC en tiempo de ejecucion
« Respuesta #6 en: Febrero 11, 2012, 10:20:44 pm »
No, no tengo activado option explicit, ¿tendre problemas? porque ahora si funciona perfectamente, incluso le agregue mas código para el evento MouseMove y funciona bien.

EDITO:

Tengo otra duda, sorry por ir bastante lento en este tema.
Este control le he puesto el mousemove para que cuando pase el mouse el shape que lo rodea cambie de color y para cuando salga se restaura el color, para esto uso un timer dentro del uc copiandome la forma que uso Enter en su control. Todo bien, funciona. Pero me he dado cuenta que el control esta haciendo el cambio de color del shape en tiempo de desarrollo!!! y en la parte del titulo de la ventana del VisualBasic esta titilando continuamente mientras exista un uc en el formulario.
¿Este es normal?
¿Me traera problemas?

Gracias por sus comentarios.

EDITO 2:
He visto que con el ucImage de Cobein también pasa lo mismo pero solo cuando paso el mouse sobre el control ucImage, en mi caso pasa cuando lo pongo en el Form y sin necesidad de tenerlo seleccionado o pasar el mouse igual "tilila" la barra de titulo del VB6, mi temor es que voy a poner 16 de estos uc que estoy creando ¿No colapsare el VB6 en algún momento?

aqui les dejo el control actualizado, muchas gracias: ucImaText
« última modificación: Febrero 12, 2012, 02:18:44 am por YAcosta »
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Cargar Imagen a un UC en tiempo de ejecucion
« Respuesta #7 en: Febrero 12, 2012, 09:20:43 pm »
Para que deje de pasar esto, en los eventos que veas afectados, ponlo dentro de este if

Código: (vb) [Seleccionar]
Private Sub UserControl_MouseMove()
    If Ambient.UserMode Then
         ' Tu codigo aca
    End If
End Sub

Ambient.UserMode es True cuando esta en tiempo de ejecucion, y falso en tiempo de diseño n.n

En cuanto al option explicit, si, te puede traer problemas. Sobretodo cuando tengas rutinas con muchas variables, quieras cambiar una y no su declaración.

No lo probé, pero así debería funcionar
Código: (vb) [Seleccionar]
Public Property Get Picture() As StdPicture
   Set Picture = Image1.Picture
End Property

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Cargar Imagen a un UC en tiempo de ejecucion
« Respuesta #8 en: Febrero 13, 2012, 01:12:29 am »
Llegando a mi casa pruebo lo del Ambient.

Lo otro lo habia probado asi:
Código: (VB) [Seleccionar]
Public Property Get Picture() As StdPicture
   Set Picture = Image1.Picture  '<-- Aqui se me caia y por eso le puse Set StdPicture
End Property

Supongo que sera por el Option Explicit, voy a probarlo.

Gracias Raul
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Cargar Imagen a un UC en tiempo de ejecucion
« Respuesta #9 en: Febrero 13, 2012, 10:26:46 am »
El option explicit no influye en eso, cuando tengas problemas de porque esta variable no tiene el valor del que deberia tener, ahi te vas a dar cuenta lo valioso que es tener el option explicit activado :P

Así me funciona

Código: (vb) [Seleccionar]
Public Property Get Picture() As StdPicture
   Set Picture = Image1.Picture
End Property
 
Public Property Set Picture(ByVal vNewValue As StdPicture)
    Set Image1.Picture = vNewValue
    PropertyChanged "Picture"
End Property
 
Public Property Let Picture(ByVal vNewValue As StdPicture)
    Set Image1.Picture = vNewValue
End Property

Y no guarda el picture! y tampoco pude hacer que lo guarde jeje.

Sobre el timer que funciona en tiempo de diseño, lo arregle poniendo esto

If Ambient.UserMode Then Timer1.Enabled = True

Como ultima instruccion de UserControl_ReadProperties

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Cargar Imagen a un UC en tiempo de ejecucion
« Respuesta #10 en: Febrero 20, 2012, 02:26:54 am »
Disculpa la demora por responder es que recién pude retomar el tema.

 Puse el Ambient.UserMode y ya funciona perfecto, gracias Raul

Lo anterior no lo toque porque esta funcionando bien... ojala no hallan sorpresas   ;D

Gracias
Me encuentras en YAcosta.com