Autor Tema: Llamar a un Evento fuera del área de un UC...  (Leído 3618 veces)

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

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Llamar a un Evento fuera del área de un UC...
« en: Febrero 20, 2012, 03:39:28 pm »
Saludos a todos !!! ;D

No se si estoy planteando bien con el título del post lo siguiente: supongamos que tengo un UserControl (UC) diseñado, todos los eventos dentro de él, perfecto no hay problemas, la propiedades tampoco, pero necesito que se desencadene una acción determinada sobre él apenas salga de su área, algo así:



A esto le he estado dando vueltas, y lo único que he hecho es "marearme" !!! :'(

Agradezco todas la sugerencias, recomendaciones y/o consejos !!!


Saludos !!!

Manuel F. Borrego S. 8)
Barcelona, Venezuela.
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

pedroesca

  • Megabyte
  • ***
  • Mensajes: 206
  • Reputación: +19/-0
  • "El conocimiento es libre"
    • Ver Perfil
Re:Llamar a un Evento fuera del área de un UC...
« Respuesta #1 en: Febrero 20, 2012, 04:28:25 pm »
Hola estimado Manuel, creo y con un poco de temor a equivocarme, que solo debes programar el / los eventos Mouse_Move dentro de tu UC, y que efectúe dicha acción, es decir, programas dicho evento del UserControl, y si tienes un picture (dentro del UC) o algo similar, simplemente en el evento Mouse_Move de picture, debes colocar la línea "RaiseEvent MouseMove", para que llame al evento.
Ah, y creo que también hay que declarar inicialmente dicho evento, es decir: "Public Event MouseMove".
Espero no haberte complicado mas.
"Si yo tengo una idea, tú otra, y la compartimos, ambos tendremos DOS ideas"

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Llamar a un Evento fuera del área de un UC...
« Respuesta #2 en: Febrero 20, 2012, 04:41:42 pm »
es facil, primero debes tener una propiedad en el usercontrol a la cual puedas asignarle un color y asi que cambie su color de fondo(BackColor). y despues simplemente usa algunas apis podes detectar cuando esta arriba y cuando no, le agregas tambien al Usercontrol una propiedad que te devuelva el hwnd del mismo(ya que por defecto no tiene).

por ejemplo yo puse un usercontrol nuevo con este codigo:

Código: (vb) [Seleccionar]
Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Public Property Get hwnd()
    hwnd = UserControl.hwnd
End Property

Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    RaiseEvent MouseMove(Button, Shift, X, Y)
End Sub

y en el formulario este codigo:

Código: (vb) [Seleccionar]
Option Explicit

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINT_API) As Long
Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function PtInRect Lib "user32" (lpRect As RECT, ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long

Private Type POINT_API
    X As Long
    Y As Long
End Type

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Function ComprobarArea(X As Single, Y As Single) As Boolean

    Dim pnt As POINT_API
    Dim rBox As RECT
    GetWindowRect UserControl11.hwnd, rBox
   
    GetCursorPos pnt
   
    If PtInRect(rBox, pnt.X, pnt.Y) Then
        ComprobarArea = True
    Else
        ComprobarArea = False
    End If

End Function

Private Sub Form_Load()
    Me.BackColor = vbRed
End Sub

Private Sub UserControl11_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    SetCapture UserControl11.hwnd
   
    If ComprobarArea(X, Y) Then
        Me.BackColor = vbGreen
    Else
        Me.BackColor = vbRed
    End If
End Sub

ahi te detecta cuando el mouse esta arriba o esta afuera del usercontrol, el color que cambia es el fondo del formulario, ahi vos debes cambiar el fondo del usercontrol.

todo esto lo podes hacer directamente dentro del usercontrol, con enventos que se disparen segun este arriba o fuera el mouse, como dice aca:

How to fire MouseIn and MouseOut events

saludos.

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:Llamar a un Evento fuera del área de un UC...
« Respuesta #3 en: Febrero 20, 2012, 05:07:31 pm »
Saludos a Pedro y a Seba !!! ;D

Como dicen un poco en su bella tierra: Sos fenómeno pibe !!! (esto es para ambos mis estimados !!!)


Muy agradecido [hay que ver, que en menos de un año que llevo en este foro -creo- he aprendido más de VB, que todo el tiempo que llevo programando (y que programando...!!!), esto se los debo a uds 2, a mi hermano Yvan (YAcosta), XKiz, Leandro por supuesto, raul338 y otros -ya, esto se pone muy sentimental ;D y programador que se pone sentimental, se echa a llorar en la primera "kgada" que haga !!! ::)]

Saludos y agradecido con uds !!!

Manuel F. Borrego S.  8)
Barcelona, Edo. Anzoátegui. Venezuela
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Llamar a un Evento fuera del área de un UC...
« Respuesta #4 en: Febrero 20, 2012, 07:43:01 pm »
Cobein había hecho una clase para implementar MouseOver y MouseOut (o algo así se llamaban)

Ejemplo de MouseOver (ejemplo 2)

Ojo que esa clase contiene el cSubClass (el que usa leandro para subclasificar sus controles) incluido dentro de la clase :P
« última modificación: Febrero 20, 2012, 07:44:36 pm por raul338 »