Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: YAcosta 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 (http://leandroascierto.com/foro/index.php?topic=793.msg4016#msg4016) 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 (http://www.belzusarri.com/ucImaText.rar)
Muchas gracias.
-
Hola Yvan pone asi adentro del usercontrol y quita las que tenes
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
-
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:
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
-
Public Property Get Picture() As StdPicture
-
Gracias Raul, no conocía el objeto StdPicture, ahora si puedo seleccionar el control en tiempo de desarrollo.
Lo puse asi y ya funciono:
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.
-
Tienes activado option explicit? Eso no deberia funcionar por si solo :P
-
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 (http://www.belzusarri.com/ucImaText.ctl)
-
Para que deje de pasar esto, en los eventos que veas afectados, ponlo dentro de este if
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
Public Property Get Picture() As StdPicture
Set Picture = Image1.Picture
End Property
-
Llegando a mi casa pruebo lo del Ambient.
Lo otro lo habia probado asi:
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
-
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
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
-
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