Messaggio CAPS LOCK attivo

di il
8 risposte

Messaggio CAPS LOCK attivo

Una buona giornata a tutti e un saluto particolare a @Alex che ultimamente mi ha supportato e sopportato.
Volevo chiederti se qualcuno sa come codificare una form che dopo l'evento aggiornamento di una casalla combinata appare una textbox "ATTENZIONE!! CAPS LOCK ATTIVO", chiaramente se il tasto blocco maiuscolo è attivo.
Mentre alla disattivazione del tasto CAPS LOCK, la textbox sompare.
Diciamo che sarebbe lo stesso avviso che esce su alcuni siti quando si effettua un login.

Grazie

8 Risposte

  • Re: Messaggio CAPS LOCK attivo

    Ora non ho modo di provare. .. ma penso a 2 modi....
    1° Attiva l'anteprima tasti nella maschera (keypreview) poi attiva la macro autokeys e vedi se riconosce il tasto caps... se è così basta richiamare una function public ed in quella si scrive il codice per dare una segnalazione....
    Il problema potrebbe essere discriminare se il caps è On oppure Off.... ma per questo la soluzione esiste.... e serve anche in caso dell'opzione 2

    2° Attivi l'evento Timer con TimerInterval =1000 quindi verifichi lo stato del Caps... e segnali di conseguenza...

    Per determinare lo stato del Caps serve una chiamata API... che trovi qui:
  • Re: Messaggio CAPS LOCK attivo

    Ciao grazie per l'interessamento...purtroppo non ho capito nulla. Io sono poco più che un principiante. Puoi gentilmente spiegarmi posso passo e con termini elementari come fare?
  • Re: Messaggio CAPS LOCK attivo

    Quale difficoltà incontri...?

    Se inserisci il TimerInterval=1000, significa che ogni secondo si verifica l'evento Timer...!
    DI fatto nell'evento Timer vai a controllare lo stato del CAPS... con la Function [IsCapsLockOn] che trovi nel Link che ti ho indicato.

    Quindi
    
    Private Sub Form_Timer()
        If IsCapsLockOn() Then
            ' Quì il CAPS è ON
        Else
           ' Quì il CAPS è OFF
        End If
    End If
    Il codice del Link lo incolli in un Modulo...
  • Re: Messaggio CAPS LOCK attivo

    Quindi se ho capito bene:

    In un modulo inserisco la function IsCapsKockOn
    Poi nell'evento timer metto la sub che mi hai postato e dopo THEN potrei inserire "text.visible = true" mentre dopo ELSE "text.visible = false"
    Chiaramente realizzo una text con il messaggio che fa riferimento al Caps Lock attivo.
    Giusto?
  • Re: Messaggio CAPS LOCK attivo

    Ulteriore soluzione è determinare lo status del tasto Caps-Lock all'interno della chiamata alle API:
    
    Option Compare Database
    Option Explicit
    
    ' Tratto da:
    ' http://www.tek-tips.com/viewthread.cfm?qid=1299579
    ' http://blogs.msdn.com/b/developingfordynamicsgp/archive/2009/07/22/determine-if-the-caps-lock-button-is-enabled-on-password-entry.aspx
    
    Private Declare Sub GetKeyboardState Lib "user32" (lpKeyState As Any)
    Const VK_CAPITAL = &H14
    
    Function Caps()
    ReDim KeyboardBuffer(256) As Byte
    'Array to check capslock
    GetKeyboardState KeyboardBuffer(0)
    If KeyboardBuffer(VK_CAPITAL) And 1 Then
    'CapsLock on ...
        Caps = True
        Debug.Print "Caps is On"
    Else
        Caps = False
        Debug.Print "Caps is Off"
    End If
    End Function
    
  • Re: Messaggio CAPS LOCK attivo

    Willy, la funzione del Link che ho indicato è la medesima del tuo... si appoggia sempre a GetKeyboardState...
  • Re: Messaggio CAPS LOCK attivo

    Ciao Alex
    si confermo,le funzioni sono entrambe basate su GetKeyboardState ma IsCapsLockOn mi pare che abbia un problema, come puoi notare da questo esempio (che segue il tuo primo caso con intercettazione dei tasti):
    
    Option Compare Database
    Option Explicit
    
    
    Private Sub Form_Load()
        Me.KeyPreview = True
    End Sub
    
    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
        Dim strMsg As String
        If KeyCode = vbKeyCapital Then
            strMsg = "in base a IsCapsLockOn - Il tasto Caps Lock è stato premuto su: "
            If IsCapsLockOn() Then
                strMsg = strMsg & "ON"
            Else
                strMsg = strMsg & "OFF"
            End If
            MsgBox strMsg
    
            strMsg = "in base a Caps - Il tasto Caps Lock è stato premuto su: "
            If Caps() Then
                 strMsg = strMsg & "ON"
             Else
                 strMsg = strMsg & "OFF"
            End If
            MsgBox strMsg
        End If
    
    End Sub
    
    in quanto restituisce sempre vero, ogni volta che è premuto il tasto Caps-Lock, per questo ho postato una soluzione similare (Caps) ma che analizza la situazione del Blocco delle Maiuscole.

    Il problema veniva sollevato in alcuni forum internazionali ma non trovo più quelle specifiche discussioni, se non in termini più generici:
    https://bytes.com/topic/access/answers/845955-caps-lock-num-lock-scroll-lock-status
    http://www.excelbanter.com/showthread.php?t=30943
  • Re: Messaggio CAPS LOCK attivo

    Molto bene, non lo avevo provato quindi non conoscevo il BUG, anzi mi sarebbe scappato sicuramente...!
    Grazie ottimo.
Devi accedere o registrarti per scrivere nel forum
8 risposte