PDA

Visualizza versione completa : intercettare lo scroll di una listbox tramite rotellina.


mandrak
03-10-2009, 17.27.39
Ciao a tutti. :) :)
Ho nuovo quesito sulle Listbox.
In un Form, ho una listbox che si popola automaticamente e con la
rotellina del mouse posso effettuare lo scroll verticare, su o giù.
Ora, mi servirebbe poter intercettare lo scroll.
c'e' qualche api che mi permette ciò ?
:mm: :mm:

LoryOne
04-10-2009, 12.14.56
Si che esitono, sono dietro le quinte ... Effettuano un raise event ...
L'argomento lo abbiamo già trattato con il primo script VB che sincronizzava lo scroll

mandrak
05-10-2009, 22.05.18
Ciao ;)
Qualche indicazione in più per ritrovare questo l'argomento ?
:mm:
Ho provato a lungo con la ricerca ma non ho trovato quello che cerco.
:wall:

LoryOne
06-10-2009, 16.15.05
Devi cercare l'argomento hooking e subclassing
Spendo due parole di spiegazione ...
Ogni oggetto possiede un handle (maniglia) al quale far riferimento.
Ogni handle è preso in carico dal S.O. che gestisce una coda di eventi ad essi associati.
Ogni handle può essere dato in pasto ad un subprocedura (una API specifica) che prende il controllo sulla coda di eventi ed istruisce il S.O. a prenderla in considerazione.
Il valore di ritorno di questa subprocedura viene passata come parametro ad un'altra subprocedura che cicla fra gli eventi che sono stati intercettati dall'oggetto e restituisce il valore dell'evento che è stato generato.
In ultimo, ogni evento generato viene restituito al S.O. che ricomincia a gestire la coda di eventi per tutti gli oggetti che hanno un handle attivo (processi, thread, finestre, periferiche di input ed output, ecc).
Non so se sono stato chiaro ... Tu guarda cosa riesci a capire sulla base degli esempi che trovi in rete.

LoryOne
06-10-2009, 16.27.25
Si che esitono, sono dietro le quinte ... Effettuano un raise event ...


In particolare, la rotellina del mouse genera un evento a livello globale che viene intercettato dalla listbox che, avendo verificato che l'evento si rifà allo scrolling (cioè possiede un determinato valore numerico), genera a sua volta l'evento scroll (raise event) che è un metodo del controllo listbox al quale passa i parametri che tu poi gestire all'interno dell'evento stesso.

Anche il tuo browser scrolla su o giu, giusto perchè anch'esso riconosce l'evento. Qualunque controllo è soggetto alla verifica dell'evento a livello globale, ma non tutti i controlli lo intercettano o lo gestiscono in maniera differente da quanto ci si aspetterebbe: Ad esempio, all'interno di AutoCAD, allo scorrere della rotellina in su o in giu corrisponde uno zoom+ o uno zoom-. Perchè ?
Si intercetta lo scroll e lo si gestisce come si vuole, con la sola differenza che tale comportamento è relegato all'ambiente AutoCAD.

Complesso ? lo hai voluto tu :D
Scherzi a parte, è un argomento affascinante, non trovi ?

mandrak
08-10-2009, 13.57.44
Ciao
Sono affascinato della Tua preparazione a riguardo.
:act: :act:
Le mie conoscenze sono anni luce indietro.
Devo dire che la cosa è veramente intrigante e conoscerla
bene, come nel tuo caso, premette di fare qualsiasi cosa,
l'unica limitazione è la fantasia.
Cercherò l'argomento "hooking" e "subclassing" su google.
Farò sapere se ho trovato qualcosa che riguarda la rotellina.
Per adesso grazie.

LoryOne
08-10-2009, 14.16.59
Grazie a te.
Quando la programmazione diventa passione, è difficile non essere curiosi ;)

miciomao
09-10-2009, 14.20.54
Non è chiaro con quale linguaggio tu voglia intercettare lo scroll e perchè dato che il titolo del 3d è incompleto, aggiungo quindi un link interessante.

A new method for disabling the Mouse Scroll Wheel (http://www.everythingaccess.com/tutorials.asp?ID=A-new-method-for-disabling-the-Mouse-Scroll-Wheel-in-Access-forms)


Ciao
Alex