Newsgroup: it.comp.lang.visual-basic
Titolo: [?]Evento MouseMove

In Javascript esiste un evento onMouseOver e uno onMouseOut.
In VB invece c'e' solo l'evento MouseMove (che ha la funzione del
onMouseOver), ma non c'e' il corrispondente del onMouseOut.
Allora... , supponete che (in VB) voglia (come accade in molti siti web)
visualizzare un'immagine quando vado sopra ad un oggetto, e rimettere
l'originale quando "esco" .
L'unico metodo che ho trovato per ripristinare l'immagine quando "esco"
dall'oggetto e' impostare l'evento MouseMove su tutto cio' che circonda il
mio oggetto, in modo che quando sposto il mouse, indipententemente da dove
va' a finire il cursore, si scatena un evento che ripristina l'immagine.
Pero' se sposto il mouse molto (ma molto molto!!!!) velocemente e finisco
fuori dal form, l'evento non viene scatenato e l'immagine non cambia.
Solo quando torno sopra al form (o a qualsiasi oggetto con l'evento
MouseMove impostato) l'immagine torna a posto.
Ho provato anche ad attivare un timer che dopo un po' ripristina l'immagine,
ma cmq fa schifo.
Possibile che quella volta non hanno pensato bene di gestire una sorta di
onMouseOut ???? :(((
E soprattutto, e' possibile utilizzando qualche accrocchio (leggasi API, OCX
o qualcos'altro) risolvere il problema?
Grazie a tutti,
Ciao.
Giorgio.

 l'originale quando "esco" .
[SNIP]
Dalla penna "digitale" di Zanna:
Option Explicit
'-----------------------------------------------------------
'
' Esempio di come gestire gli eventi MouseEnter/MouseExit
'
' [FAQ] it.comp.lang.visual-basic
'
'-----------------------------------------------------------
' Autore: Fabio Zanetta (Zanna)
'-----------------------------------------------------------
Private Declare Function GetCapture Lib "user32" () As Long
Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As
Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Function MouseOver(Ctrl As Control, ByVal X As Single, ByVal Y As Single) As
Long
' Restituisce
' -1 : esce
'  0 : dentro
'  1 : entra
If (GetCapture <> Ctrl.hwnd) Then
    Call SetCapture(Ctrl.hwnd)
    MouseOver = 1
Else
    If ((X < 0 Or X > Ctrl.Width) Or (Y < 0 Or Y > Ctrl.Height)) Then
        Call ReleaseCapture
        MouseOver = -1
    Else
        MouseOver = 0
    End If
End If
End Function
Private Sub Command1_MouseMove(Button As Integer, Shift As Integer _
 , X As Single, Y As Single)
Select Case MouseOver(Command1, X, Y)
Case -1
    List1.AddItem "Uscito da Command1", 0
Case 1
    List1.AddItem "Entrato in Command1", 0
Case Else
    List1.AddItem "Dentro Command1", 0
End Select
End Sub
Ciao
--
Luca Dormio
luca....@tin.it

 Option Explicit
[snip]
Grazie, grazie.
Grazie anche a Moreno che mi aveva illuminato la via.
Però dilla tutta sennò tra un'ora ci sarà ancora qualcuno che chiede perchè
facendo F5 va in errore...
Ecco il codice di un form di esempio, fai un bel copia-incolla su un form
nuovo.
'-----------------------------------------------------------
'
' Esempio di come gestire gli eventi MouseEnter/MouseExit
'
' [FAQ] it.comp.lang.visual-basic
'
'-----------------------------------------------------------
' Autore: Fabio Zanetta (Zanna)
'-----------------------------------------------------------
'
' (1) Copiare il seguente codice in un form vuoto.
' (2) Aggiungere uno o più controlli Command1 (un array)
' (3) Aggiungere un controllo Picture1
' (4) Aggiungere una ListBox List1
'
'-----------------------------------------------------------
Option Explicit
Private Declare Function GetCapture Lib "user32" () As Long
Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As
Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Function MouseOver(Ctrl As Control, ByVal X As Single, ByVal Y As Single) As
Long
    ' Restituisce
    ' -1 : esce
    '  0 : dentro
    '  1 : entra
    If (GetCapture <> Ctrl.hwnd) Then
        Call SetCapture(Ctrl.hwnd)
        MouseOver = 1
    Else
        If ((X < 0 Or X > Ctrl.Width) Or (Y < 0 Or Y > Ctrl.Height)) Then
            Call ReleaseCapture
            MouseOver = -1
        Else
            MouseOver = 0
        End If
    End If
End Function
Private Sub Command1_MouseMove(Index As Integer, Button As Integer, Shift As
Integer, X As Single, Y As Single)
    Select Case (MouseOver(Command1(Index), X, Y))
    Case -1
        List1.AddItem "Uscito da Command1(" & Index & ")", 0
    Case 1
        List1.AddItem "Entrato in Command1(" & Index & ")", 0
    Case Else
        List1.AddItem "Dentro Command1(" & Index & ")", 0
    End Select
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
    Select Case (MouseOver(Picture1, X, Y))
    Case -1
        List1.AddItem "Uscito da Picture1", 0
    Case 1
        List1.AddItem "Entrato in Picture1", 0
    Case Else
        List1.AddItem "Dentro Picture1", 0
    End Select
End Sub


Dai ..... che dovevo metterci un Command1 e un List1 ci arrivavo anche da
solo ;-P
Cmq grazie 1000.
E' proprio quello che mi serviva !!!!!
Ciao Ciao.
Giorgio.
P.S: Ma era un post vecchio o e' nel SC? Non l'ho trovato ne' nel SC ne' nel
NG.

 NG.
Non credo sia giù tra le faq, ma ormai viene postato piuttosto
regolarmente...
Ciao