Oppure

Loading
11/09/08 17:52
antometal
Postato originariamente da super rambo:

salve, ho una listbox e mi servirebbe che quando il mouse è al di fuori della list la proprietà visible della list va a false. so che devo usare l sub mouse_move ma non so come.. come posso fare?? grazie


segui il consiglio di ruggy94, anche perchè non puoi usare l' evento mousemove della listbox per farla riapparire

trovate le coordinate del mouse, ti assicuri che siano comprese nelle dimensioni della listbox

è sufficiente una if else endif con 4 condizioni
aaa
11/09/08 17:57
ruggy94
Ti faccio un esempio pratico: ho ricostruito il form che dovresti avere tu con il webbrowser per tutto il form e la listbox di sopra.
Le dichiarazioni sono quelle che ti ho postato prima, mentre nel timer ho messo:
Private Sub Timer1_Timer()
Dim pt As POINTAPI
    Call GetCursorPos(pt)
    Call ScreenToClient(Me.hwnd, pt)
    Debug.Print "Screen Coords: ", pt.x, pt.y
    If pt.x < 57 Or pt.x > 224 Or pt.y > 98 Or pt.y < 57 Then
    List1.Visible = False
    Else
    List1.Visible = True
    End If
End Sub

Ti resta solo da modificare le coordinate (57, 224, 98, 57) a seconda di quelle della tua listbox.
Fammi sapere :k:
aaa
12/09/08 13:19
super rambo
Grazie dell'aiuto ma per vedere le cordinate della list come faccio??
aaa
12/09/08 13:41
ruggy94
Eh, per questo ho fatto ricorso ad una prova pratica: avvia il programma in modo che sul debug appaiano le coordinate (usando debug.print) e vai posizionando il cursore sui 4 angoli della listbox :D cosi' le coordinate degli angoli appariranno sul debug.print :k:
Spero di essere stato chiaro
Ultima modifica effettuata da ruggy94 12/09/08 13:42
aaa
12/09/08 13:52
super rambo
si, però per ogni angolo nel debug.print ci sono 2 numeri e nel timer in totale 4.. devo copiare il primo o il secondo. poi per gli angoli devo seguire un ordine preciso o no?? Grazie!!
aaa
12/09/08 14:11
ruggy94
nel debug.print appaiono due numeri per ciascun angolo perche' il primo rappresenta la coordinata x e il secondo la coordinata y.

Private Sub Timer1_Timer()
Dim pt As POINTAPI
    Call GetCursorPos(pt)
    Call ScreenToClient(Me.hwnd, pt)
    Debug.Print "Screen Coords: ", pt.x, pt.y
    If pt.x < 57 Or pt.x > 224 Or pt.y > 98 Or pt.y < 57 Then
    List1.Visible = False
    Else
    List1.Visible = True
    End If
End Sub

Da questo codice puoi capire che le coordinate della mia listbox sono:
angolo in alto a sx = (57;57)
angolo in alto a dx = (224;57)
angolo in basso a sx = (57;98)
angolo in basso a dx = (224;98)

chiaramente ho indicato le coordinate in questo modo (coordinatax;coordinatay)
----------------------------------
La coordinata x di un punto varia se questo punto si muove lungo una linea orizzontale, piu' precisamente diminuisce se il punto si sposta a sinistra, mentre aumenta se il punto si sposta a destra;

La coordinata y di un punto varia se questo punto si muove lungo una linea verticale, piu' precisamente diminuisce se il punto si sposta verso l'alto, mentre aumenta se il punto si sposta verso il basso;

Detto questo, nel codice il timer controlla se la coordinata x del cursore (mouse) si sposta piu' a sinistra della coordinata x del punto piu' a sinistra della listbox. :D Sembra un gioco di parole ma detto terra-terra e' proprio cosi'.
Questa operazione viene ripetuta per i 4 lati della listbox, quindi il timer controlla se il cursore si trova piu' in alto, piu' in basso, piu' a sinistra o piu' a destra della listbox, se e' così la listbox viene nascosta, altrimententi viene visualizzata.
Fammi sapere :k:
aaa