Newsgroup: it.comp.lang.visual-basic
Titolo: Mouse Move...

Ho costruito dei pulsanti che al passaggio del mouse si attivano (si nota
che il loro stato diventa attivo) tutto questo su una toolbar.Il problema č
questo...
Se passo velocemente il mouse sopra alla barra blu del form mdi,o anche
sopra l'editor di menů il pulsante non si scarica ma rimane attivo...c'č
qualche comando particolare scaricare il pulsante quando la freccia del
mouse viene posizionata sull'editor di menů o sopra il caption del form mdi?
Grazie per i consigli.
--
Posted from 
arcanet.it
 [151.99.191.3]
via Mailgate.ORG Server - 
http://www.mailgate.org

Grazie per i consigli.
intravedo due soluzioni:
1) Quella semplice:
    nell'evento MouseMove di tutti i componenti esterni ai tuoi pulsanti
dovresti ripristinare
lo stato del pulsante non selezionato.
Comunque se ti sposti velocemente ed esci dalla tua applicazione (quindi
porti il mouse sul desktop per es)
ti accade la stessa cosa.
2) Quella un po' piu' complicata.
    Ti costruisci uno UserControl che contiene il pulsante ed un timer.
    Usando un po' di Api puoi fare in modo di sapere se il mouse e'
all'interno del tuo pulsante.
    a questo punto, nell'evento MouseMove del pulsante Abiliti il timer
(impostato per es. a 10 ms)
    Nell'evento OnTimer del timer controlli che le coordinate del mouse
attuali siano all'interno del tuo pulsante.
    Se si non fai nulla (quindi il timer ciclera' ancora per 10 ms),
altrimenti ripristini il pulsante a Non selezionato.
    Le API che ti servono sono le seguenti:
    '--------------------------------
    'Nella sezione dichiarazioni
    '--------------------------------
    Option Explicit
    Private Type POINTAPI
            X As Long
            Y As Long
    End Type
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI)
As Long
    Private Declare Function ClientToScreen Lib "user32" (ByVal hWnd As
Long, lpPoint As POINTAPI) As Long
    '--------------------------------
    'Nell'evento OnTimer
    '--------------------------------
Private Sub Timer1_Timer()
    Dim posizione As POINTAPI
    Dim puntomedio As POINTAPI
    Dim distanzax As Long
    Dim distanzay As Long
    Dim mediox As Long
    Dim medioy As Long
'Calcolo il punto medio dell'oggetto
    mediox = (Width / 2) / Screen.TwipsPerPixelX
    medioy = (Height / 2) / Screen.TwipsPerPixelY
    puntomedio.X = mediox
    puntomedio.Y = medioy
'Calcolo la posizione del Mouse
    Call GetCursorPos(posizione)
'Calcolo la posizione del punto medio
    Call ClientToScreen(hWnd, puntomedio)
'Calcolo la distanza dal punto medio dell'oggetto alla posizione del mouse
nelle due direzioni
    distanzax = Abs(posizione.X - puntomedio.X)
    distanzay = Abs(posizione.Y - puntomedio.Y)
'Se la distanza sulle Ascisse o sulle Ordinate e' superiore a meta' della
lunghezza o altezza del controllo,
'allora ne sono fuori altrimenti sono dentro il controllo
'Ho utilizzato mediox-1 per evitare problemi al contorno
    If distanzax > mediox - 1 Or distanzay > medioy - 1 Then
            'FAI LE TUE COSE QUI
            'io mi sono creato anche un evento LOSTMOUSE che si basa sulla
mia proprieta' GotMouse
            'Puo' essere utile se devi fare qualcosa quando il mouse lascia
il controllo
            m_Evidenziato = False
            PropertyChanged "Evidenziato"
            Timer1.Enabled = False
            GotMouse = False
    Else
        Timer1.Enabled = True
    End If
End Sub
    Questa e' la soluzione che io adotto generalmente. Se qualcuno ne ha di
migliori me le mandi pure
Ciao
Marco |iLbOiA|