Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: k_arlytos en Febrero 28, 2014, 10:45:29 pm
-
cuando paso el mouse por encima del control se cambia de color o cuando esta enfocado ahi todo esta normal.
el problema esta cuando le pongo otros controles encima y cuando recibe el foco ese control que esta encima se pierde el foco y se cambia de color MI CONTROL
se podra hacer algo para que no cambie el foco o color de mi control asi tuviese otros controles encima?
http://www.mediafire.com/download/20yvjn46ttb44vn/Nueva_carpeta_(2).rar
-
Estimado k_arlytos
En primer lugar, mi recomendación es que no uses el control Timer dentro de tus controles, existen otros mecanismos mediante los cuales puedes determinar si el mouse está sobre tú control.
Para no complicar tú control estoy manteniendo control Timer, en resumen esto es lo que he realizado:
1.- Elimine el uso de la API WindowFromPoint, porque la usabas para evaluar el hwnd de tú control el de los controles contenidos en tú control, lo cual, no es necesario.
2.- He adicionado el método DrawControl, el cual se encarga de pintar el control de la forma que necesitas.
3.- He eliminado los métodos UserControl_ExitFocus y UserControl_GotFocus y en su lugar he agregado la función SetConteinerFocus la cual se encarga de hacer saber a tú control tiene el foco. Esto es así, ya que tú control es un contenedor de controles. Entonces en el formulario harías lo siguiente:
Private Sub txtProveedor_GotFocus()
ucContenedor.SetConteinerFocus True
End Sub
Private Sub txtProveedor_LostFocus()
ucContenedor.SetConteinerFocus False
End Sub
4.- En el evento Resize de tú control estoy invocando al método DrawControl, con ello vas a poder ver en tiempo de diseño como queda el control.
5.- En el evento Timer del control Timer estoy invocando al método DrawControl, este es el mecanismo que estas usando para determinar si estas sobre el control.
El código fuente lo puedes bajar desde aquí: http://1drv.ms/1dMWIEI (http://1drv.ms/1dMWIEI)
Saludos, desde algún lugar de Lima – Perú
-
muchas gracias Albertomi, y cual seria ese otro mecanismo para no usar el timer?
-
AL USAR UN TIMER PARPADEA LOS TEXTOS EXISTE OTRA FORMA DE HACE ESTO
-
Estimado k_arlytos
1. Una forma rápida y simple es que reemplaces el control Timer por un timer por código (clase, modulo o combinación de ambos).
2. Al menos a mí me funciona, una forma rápida para que quites el parpadeo es cambiando el valor de la propiedad AutoRedraw de tú control a True y comenta o elimina en el código en aquellas líneas en donde cambias el valor de la propiedad AutoRedraw
Private Sub Normal()
'AutoRedraw = True
Cls
DrawRibbonSelection UserControl.hDC, 0, 0, UserControl.ScaleWidth - 1, UserControl.ScaleHeight - 1, vbWhite, pvAlphaBlend(RibbonDefaultColor, vbWhite, 180)
'AutoRedraw = False
End Sub
Private Sub Encima()
'AutoRedraw = True
Cls
DrawRibbonSelection UserControl.hDC, 0, 0, UserControl.ScaleWidth - 1, UserControl.ScaleHeight - 1, vbWhite, pvAlphaBlend(RibbonOverColor, vbWhite, 180)
'AutoRedraw = False
End Sub
Saludos desde algún lugar de Lima-Perú
-
Esta chevere el usercontrol pero podrian explicar como colocarle otras conbinaciones de colores al control, seria mejor si suben el codigo final(sin el control timer).