Newsgroup: it.comp.lang.visual-basic
Titolo: MOUSE MOVE

Ciao a tutti.
Sto scrivendo un add-in per un programma cad che consente l'uso di VBA per 
le macro, quindi in maniera analoga a quanto si farebbe con excel.
Quando clicco un pulsante la macro si avvia e comincia a rilevare in tempo 
reale la posizione e gli eventi del mouse.
Se il mouse si muove nell'area di lavoro (finestra client dell'applicazione) 
trascina un pezzo ad esso agganciato, se si muove fuori dall'area client, 
non gli permetto di fare nulla, infine se si muove fuori dall'applicazione 
esco dalla macro. Inoltre quando clicco il tasto sinistro nell'area di 
lavoro fisso il pezzo mentre se clicco il destro esco dalla macro.
Funziona tutto bene salvo che per ottenre la posizione in continuo ho messo 
il tutto dentro un loop da cui esco solo quando premo uno dei pulsanti del 
mouse. Ciň fa sě che il programma continui a ciclare e il puntatore del 
mouse lampeggi mostrando la clessidra. ORRIBILE!
Anche con una funzione timer ottengo lo stesso risultato e dare un intevallo 
di rilevazione piů lungo non aiuta e oltre un certo limite vedo il tutto 
muoversi a scatti.
L'unica soluzione credo sia il subclassing della finestra client in modo che 
rilevi l'evento mousemove e i vari click.
Detto questo ho le idee molto confuse.
Devo fare solo il subclassing con SetWindowLong, oppure devo anche usare 
l'istruzione SetCapture per inviare i messaggi all'handler della finestra 
client? Inoltre č necessario utilizzare anche una istruzione SetTimer (e 
ovviamente KillTimer) oppure no? Se sě dove visto che non ci sono form, 
quindi non c'č una funzione Form_Unload in cui inserirlo?
Davvero mi sto perdendo.
Non chiedo ovviamente il codice, ma un consiglio di metodo, cioč il 
programma deve fare questo che chiama quest'altro ecc.
I pezzi di codice che ho trovato su internet utilizzano tutti un form come 
supporto che io non ho.
Grazie per qualunque suggerimento possiate darmi.
Ciao
    Jacopo

supporto che io non ho.
Non è semplice, potresti ad esempio provare a subclassare un timer e a mettere
nella routine del timer un acquisizione dall' API GetCursorPos, che non utilizza
handles e quindi non ha bisogno di forms..
Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As
POINTAPI) As Long
· lpPoint
Points to a POINT structure that receives the screen coordinates of the cursor.
Per usare POINTAPI basta inserire questo:
Type POINTAPI
   X As Long
   Y As Long
End Type
--
ciao
  Stefano

Grazie molte stefano.
In effetti io utilizzo già getcursorpos per trovare la posizione del mouse.
Inoltre ho già una funzione timer.
Il problema della funzione timer è che continua a cliclare creando l'effetto 
di cui parlavo (mouse con clessidra).
Vorrei invece che la funzione timer mi chiamasse una funzione del tipo:
Ci sono eventi nuovi del mouse?
Se sì allora attivo tutto il mio ambaradan
Se no, non faccio niente.
Questo alleggerirebbe molto il carico della routine perchè ad ogni scansione 
del timer fa solo il controllo dei messaggi mouse. Se c'è qualcosa allora 
procede con le operazioni prestabilite.Il problema è che non so come si 
inserisce all'interno della funzione timer il subclassing della window per 
intercettare i messaggi. BOOOOOOOOH?
Grazie dell'idea comunque. Se ti viene in mente qualcos'altro, fammelo 
sapere. Te ne sarei grato.
Ciao


sapere. Te ne sarei grato.
Mah, bisognerebbe sapere come fai il subclassing e a che valore hai impostato il
timer, forse troppo veloce.
Qui c'è un esempio di subclassing del timer (SetTimer ,KillTimer) con
GetCursorPos
http://www.itportal.it/developer/vb/apiwindows_42/pagina4.asp
--
ciao
  Stefano

 ha scritto nel messaggio 
news:7i7tg2hkksl94m05v...@4ax.com...
