Newsgroup: it.comp.lang.visual-basic
Titolo: Attivita' su una form

Ciao a tutti,
vi espongo il problema: ho la necessità, in un piccolo applicativo, di
porre in "blocco" il tutto se non c'è stata attività per tot periodo di
tempo.
Il sistema ldel blocco è già stato configurato, il problema è l'attività:
per me attività significa anche: digitazione nelle textbox, semplice
scroll di una textbox multiline, mouse move su form.
Il problema è che non posso andare in TUTTI gli eventi di ogni songolo
controllo.. speravo che la mousemove sulla form ad es. fosse "globale",
invece quando il puntatore ha sotto un altro oggetto della form questa non
viene più recepita.
Prima quindi di riempire tutte le textbox in "onkeypress" e tutti gli
oggetti su "mousemove" oltre su eventuali OnScroll ecc.. esiste qualcosa
che mi dica se su quell'applicativo sto facendo qualcosa?
Se ci fosse un "onmousemove" diciamo generale già mi risparmierei l'80&
del lavoro... 
ciao e grazie
Andrea
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 del lavoro... 
...
Accodo una domanda...
E' possibile, da codice, spostare il mouse su un punto prestabilito sul
form?
Se cosi' fosse, lo si potrebbe spostare dove non ci sono controlli, e
basterebbe quindi intercettare il movimento del mouse sul form.
La butto li :-)
Ciao...  Maurizio


 Andrea
C'è una tecnica... si basa sull'API MsgWaitForMultipleObjects... se vuoi ti
posto un esempio (VB6).
Bye
Raf
-----------------------------------------------------
Funk: cooler than the other side of the pillow.

 basterebbe quindi intercettare il movimento del mouse sul form.
E' possibile, ma rendere l'applicativo inutilizzabile dall'utente che
sarebbe preso da una crisi di nervi perchè il mouse gli si sposta da solo
:-)


 posto un esempio (VB6).
Volentieri, grazie.. è proprio su VB6 il problema, su .net non credo si
porrebbe


 si porrebbe
In questo esempio frmMain è il nome del form principale.
Devi cambiare lo Startup Object nelle proprietà del progetto, impostandolo su
"Sub Main".
In un modulo .BAS incolla questo codice:
Private Const QS_KEY = &H1
Private Const QS_MOUSEBUTTON = &H4
Private Const QS_MOUSEMOVE = &H2
Private Const QS_MOUSE = (QS_MOUSEMOVE Or QS_MOUSEBUTTON)
Private Const QS_HOTKEY = &H80
Private Const QS_INPUT = (QS_MOUSE Or QS_KEY)
Private Const QS_PAINT = &H20
Private Const QS_SENDMESSAGE = &H40
Private Const QS_POSTMESSAGE = &H8
Private Const QS_TIMER = &H10
Private Const QS_ALLINPUTBUTTIMER = (QS_SENDMESSAGE _
                            Or QS_PAINT _
                            Or QS_POSTMESSAGE _
                            Or QS_MOUSEBUTTON _
                            Or QS_MOUSEMOVE _
                            Or QS_HOTKEY _
                            Or QS_KEY)
Private Const INFINITE = &HFFFFFFFF
Private Const WAIT_TIMEOUT = 258&
Private Declare Function MsgWaitForMultipleObjects Lib "user32" ( _
    ByVal nCount As Long, _
    ByRef pHandles As Long, _
    ByVal fWaitAll As Long, _
    ByVal dwMilliseconds As Long, _
    ByVal dwWakeMask As Long) As Long
Public Function WaitEvents(Optional ByVal TimeoutMs As Long = INFINITE) As
Boolean
' Restituisce False se nessun evento si è verificato ed è quindi uscita per
timeout
Dim retval As Long
    retval = MsgWaitForMultipleObjects(0, ByVal 0&, False, TimeoutMs,
QS_ALLINPUTBUTTIMER)
    If retval <> WAIT_TIMEOUT Then
        WaitEvents = True
    End If
End Function
Public Sub Main()
    frmMain.Show
    Do While DoEvents
        ' Timeout di 10 secondi di inattività
        If Not WaitEvents(10000) Then
            BloccaForm
        End If
    Loop
End Sub
Se hai dei dubbi, chiedi pure.
