Autor Tema: CAMBIA FOCO Y SE CAMBIA DE COLOR  (Leído 3474 veces)

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

k_arlytos

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +2/-4
    • Ver Perfil
CAMBIA FOCO Y SE CAMBIA DE COLOR
« 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
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"

Albertomi

  • Gigabyte
  • ****
  • Mensajes: 281
  • Reputación: +153/-0
    • Ver Perfil
Re:CAMBIA FOCO Y SE CAMBIA DE COLOR
« Respuesta #1 en: Marzo 01, 2014, 03:54:45 pm »
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
 
 

Saludos, desde algún lugar de Lima – Perú
Saludos, desde algún lugar de Lima-Perú

k_arlytos

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +2/-4
    • Ver Perfil
Re:CAMBIA FOCO Y SE CAMBIA DE COLOR
« Respuesta #2 en: Marzo 01, 2014, 04:30:44 pm »
muchas gracias Albertomi, y cual seria ese otro mecanismo para no usar el timer?
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"

k_arlytos

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +2/-4
    • Ver Perfil
Re:CAMBIA FOCO Y SE CAMBIA DE COLOR
« Respuesta #3 en: Marzo 03, 2014, 11:35:50 pm »
AL USAR UN TIMER PARPADEA LOS TEXTOS EXISTE OTRA FORMA DE HACE ESTO
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"

Albertomi

  • Gigabyte
  • ****
  • Mensajes: 281
  • Reputación: +153/-0
    • Ver Perfil
Re:CAMBIA FOCO Y SE CAMBIA DE COLOR
« Respuesta #4 en: Marzo 06, 2014, 02:32:39 am »
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ú
« última modificación: Marzo 06, 2014, 02:39:59 am por Albertomi »
Saludos, desde algún lugar de Lima-Perú

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Re:CAMBIA FOCO Y SE CAMBIA DE COLOR
« Respuesta #5 en: Marzo 12, 2014, 10:34:20 pm »
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).