Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: ADONAIRAFA 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í:
(http://img267.imageshack.us/img267/7821/areadeunuc.png)
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.
-
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.
-
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:
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:
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 (http://www.mcmillan.org.nz/paradoxes2/code/MouseEvents.html)
saludos.
-
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
-
Cobein había hecho una clase para implementar MouseOver y MouseOut (o algo así se llamaban)
Ejemplo de MouseOver (http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/241-mouseover-con-image.htm) (ejemplo 2)
Ojo que esa clase contiene el cSubClass (el que usa leandro para subclasificar sus controles) incluido dentro de la clase :P