Newsgroup: it.comp.appl.access
Titolo: Form bloccata con routine per disabil "scroll" mouse

Ciao a tutti ho riscontrato questa problematica che sicuramente vi e'
nota.Dal nostro NG ho recuperato la routine per disabilitre lo scroll
del mouse.La routine e' di (Giorgio Rancati che personalmente io
ringrazio per i suoi consigli e per i vari esempi).Lui stesso sostirne
che se si apre il Form in modalita' "modal mode" (se nonricordo male)
il form si puo' bloccare.In realta' ho potuto appurare che su 5
accessi al form almeno una volta si blocca.
Volevo chiedere a voi se era possibile evitare questo.Premetto che il
DB e' stato realizzato in Access 2000 e il problema me lo da in Access
2000.
Volevo inoltre sapere se dovessi utilizzare questo DB con Access 10
questa routine(che via riporto di seguito) potrebbe dare problemi???
Grazie in anticipo
Dino
Option Explicit
'Riferimento KB278379 per mousewhell
'con l'aggiunta del blocco sullo spostamento form
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
    (ByVal hwnd As Long, _
    ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias
"CallWindowProcA" _
    (ByVal lpPrevWndFunc As Long, _
     ByVal hwnd As Long, _
     ByVal msg As Long, _
     ByVal wParam As Long, _
     ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = -4
Public Const WM_MouseWheel As Long = &H20A
Public Const WM_SYSCOMMAND As Long = &H112
Public Const SC_MOVE As Long = 65536 + &HF010
Public Const SC_SIZE As Long = 65536 + &HF000
Public Function WindowProc(ByVal hwnd As Long, _
    ByVal uMsg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As Long) As Long
    Dim StopMouse As Boolean
    Dim Frm As Form
    Dim lpPrevWndProc As Long
    Set Frm = AssegnaForm(hwnd)
    lpPrevWndProc = Frm.lpPrevWndProc
      Select Case uMsg
         Case WM_SYSCOMMAND
              'Da Win32 Programmer's Reference
              'In WM_SYSCOMMAND messages,
              'the four low-order bits of the uCmdType parameter
              'are used internally by Windows.
              'To obtain the correct result when testing the value of
uCmdType,
              'an application must combine the value 0xFFF0 with the
              'uCmdType value by using the bitwise AND operator.
              'Quindi controllo Wparam in bitwise AND con &HFFF0
              Select Case (wParam And &HFFF0) '
                 Case SC_MOVE, SC_SIZE 'Spostamento e resize Form
                    If Frm.Spostabile = True Then
                       WindowProc = CallWindowProc(lpPrevWndProc,
hwnd, uMsg, wParam, lParam)
                    End If
                 Case Else
                      WindowProc = CallWindowProc(lpPrevWndProc, hwnd,
uMsg, wParam, lParam)
                End Select
        Case WM_MouseWheel
            If Frm.Rotellina = True Then
               WindowProc = CallWindowProc(lpPrevWndProc, hwnd, uMsg,
wParam, lParam)
            End If
         Case Else
           WindowProc = CallWindowProc(lpPrevWndProc, hwnd, uMsg,
wParam, lParam)
    End Select
End Function
Function AssegnaForm(ByVal hwnd As Long) As Form
    Dim i As Integer
    For i = 0 To Forms.Count - 1
       If hwnd = Forms(i).hwnd Then
          Set AssegnaForm = Forms(i)
          Exit For
       End If
    Next
End Function

 ha scritto nel messaggio 
news:090ee5e8-ef7e-454e...@c21g2000yqk.googlegroups.com...

Sinceramente non ho ancora provato la soluzione di Rancati ma quella di 
lebans funziona molto bene....hai provato anche con quella?
Giorgio sicuramente potrà darti una risposta più specifica.
ciao
-- 
Roberto da Parma