Limitazione scrittura textbox tag nfc

di il
39 risposte

39 Risposte - Pagina 2

  • Re: Limitazione scrittura textbox tag nfc

    Mmmm fai un ragionamento...
    La tastiera inserisce un carattere per volta... mentre il lettore tutti insieme.... e l'evento dovrebbe rilevare l'ultimo... significa che, ti basterebbe leggere il numero dei chars presenti... e lo si fa leggendo la proprietà Text...
    Purtroppo devi fare qualche prova...
  • Re: Limitazione scrittura textbox tag nfc

    Purtroppo neanche questo è vero perché anche il lettore scrive una lettera per volta ovviamente ad una velocità molto elevata, comincio a pensare che non è possibile rendere automatica l'operazione di gestione di quella textbox...
  • Re: Limitazione scrittura textbox tag nfc

    Non ho più altre opzioni... senza poter fare test... non saprei proprio...
  • Re: Limitazione scrittura textbox tag nfc

    Potrei dire una cosa sbagliata ma pensavo ad una soluzione poco convenzionale...

    Se ci fisse il modo, tramite evento timer, di intercettare il tempo che intercorre tra una lettera e l'altra che il lettore trasmette.. ( immagino sia di millesimi) si potrebbe decidere di cancellare il contenuto del textbox solo quando il tempo é maggiore del tempo che il lettore impiega a scrivere le lettere e, come seconda condizione, anche nel caso in cui la lunghezza del testo passi da 0 a maggiore di 1 in una sola volta... Cosi da evitare anche il copia e incolla...

    Si potrebbe forse agire anche in uno degli eventi cui avete cennato e mediante DoEvents in un ciclo Do Loop fare una specie di contatore che sei attiva alla pressione di una lettera e, alla pressione della lettera successiva, si stoppa il contatore... Si Vede se il numero ottenuto é abbastanza piccolo (ad indicare che è trascorso un tempo piccolo tra una lettera e l'altra) e si agisce di conseguenza: Cancello il contenuto textbox se il contatore supera un certo limite oppure ricimincia da 0 e attende pressione lettera successiva... L'unico problema é che il DoEvents é abbastanza pericoloso e va gestito bene x evitare loop infiniti... Forse serviranno addirittura due cicli che funzionano alternativamente per scongiurare sovrapposizioni tra il ciclo attivato alla pressione della prima lettera e quello attivato alla pressione della seconda lettera.

    Volano gli insulti o potrebbe funzionare?
  • Re: Limitazione scrittura textbox tag nfc

    Angelo_Tbp ha scritto:


    ...
    Si potrebbe forse agire anche in uno degli eventi cui avete cennato e mediante DoEvents in un ciclo Do Loop fare una specie di contatore che sei attiva alla pressione di una lettera e, alla pressione della lettera successiva, si stoppa il contatore... Si Vede se il numero ottenuto é abbastanza piccolo (ad indicare che è trascorso un tempo piccolo tra una lettera e l'altra) e si agisce di conseguenza: Cancello il contenuto textbox se il contatore supera un certo limite oppure ricimincia da 0 e attende pressione lettera successiva... L'unico problema é che il DoEvents é abbastanza pericoloso e va gestito bene x evitare loop infiniti... Forse serviranno addirittura due cicli che funzionano alternativamente per scongiurare sovrapposizioni tra il ciclo attivato alla pressione della prima lettera e quello attivato alla pressione della seconda lettera.

    Volano gli insulti o potrebbe funzionare?
    Puoi spiegare meglio la questione della pericolosità del DoEvents...? E' pericoloso per che motivo...?
    Io sapevo del CONTRARIO..., ovvero che SE NON LO SI METTE, il rischio è di Impallare la macchina in caso di Loop lunghi..., cosa che usandolo SEMPRE si lascia invece il tempo all'interrupt del S.O. di eseguire i fondamentali.

    Forse fraintendo il tuo cenno..?

    Per il resto non mi esprimo non avendo elementi tecnici supportabili.
  • Re: Limitazione scrittura textbox tag nfc

    @Alex ha scritto:


    Puoi spiegare meglio la questione della pericolosità del DoEvents...? E' pericoloso per che motivo...?
    Io sapevo del CONTRARIO..., ovvero che SE NON LO SI METTE, il rischio è di Impallare la macchina in caso di Loop lunghi..., cosa che usandolo SEMPRE si lascia invece il tempo all'interrupt del S.O. di eseguire i fondamentali.

    Forse fraintendo il tuo cenno..?
    No, non hai frainteso... avevo scritto male.
    Il pericolo c'è se non metti il DoEvents... tuttavia anche mettendolo è necessario impostare dei criteri logici che fanno uscire dal loop altrimenti.. si impalla lo stesso la macchina.

    @Alex ha scritto:


    Per il resto non mi esprimo non avendo elementi tecnici supportabili.
    Basandomi sul fatto di seguito quotato

    Kariokas ha scritto:


    Purtroppo neanche questo è vero perché anche il lettore scrive una lettera per volta ovviamente ad una velocità molto elevata, comincio a pensare che non è possibile rendere automatica l'operazione di gestione di quella textbox...
    Viene da pensare che forse è applicabile il suggerimento... e per curiosità ho provato a cimentarmi... mi interessava e quindi posto il codice da mettere in una maschera con 2 textbox chiamati txt_Test e txt_Focus

    Tempo del Timer maschera:1
    Eventi usati: Quelli descritti nel codice...

    manca il controllo relativo alla lunghezza della scritta nel textbox txt_Test (per scongiurare il copia e incolla)... chiedo a Kariokas di postarmi il debug della finestra immediata così per vedere come lavora...

    ah.. ho impostato l'uscita forzata dai loop quando i contatori arrivano a 5000 quindi per eventuali prove manuali è necessario che tra una lettera e l'altra passino pochi secondi altrimenti esce dal loop...
    
    Option Compare Database
    
    Dim TermineAssoluto As Boolean
    Dim Pressione1 As Boolean
    Dim Pressione2 As Boolean
    Dim Contatore1 As Long
    Dim Contatore2 As Long
    
    Private Sub Form_Load()
        TermineAssoluto = False
        Pressione1 = False
        Pressione2 = False
        Contatore1 = 0
        Contatore2 = 0
    End Sub
    
    Private Sub Form_Timer()
        
        If TermineAssoluto = True Then Exit Sub
        
        If Pressione1 = True Then
            Debug.Print "1_Inizio"
            Do Until Pressione1 = False
                Contatore1 = Contatore1 + 1
                If Contatore1 = 5000 Then
                    Me.txt_Focus.SetFocus
                    Debug.Print "Contatore1 Escape_ nel textbox hai scritto: " & Me.txt_Test.Value
                    TermineAssoluto = True
                    Exit Do
                End If
                DoEvents
            Loop
            If TermineAssoluto = False Then Debug.Print "1_Tempo " & Contatore1
            Pressione2 = True
            Pressione1 = False
            Contatore2 = 0
        End If
        
        If Pressione2 = True Then
            Debug.Print "2_Inizio"
            Do Until Pressione2 = False
                Contatore2 = Contatore2 + 1
                If Contatore2 = 5000 Then
                    Me.txt_Focus.SetFocus
                    Debug.Print "Contatore2 Escape_ nel textbox hai scritto: " & Me.txt_Test.Value
                    TermineAssoluto = True
                    Exit Do
                End If
                DoEvents
            Loop
            If TermineAssoluto = False Then Debug.Print "2_Tempo " & Contatore2
            Pressione1 = True
            Pressione2 = False
            Contatore1 = 0
        End If
        
    End Sub
    
    Private Sub txt_Test_KeyDown(KeyCode As Integer, Shift As Integer)
        If TermineAssoluto = True Then Exit Sub
        
        If Pressione1 = False Then
            Pressione1 = True
            Pressione2 = False
        Else
            Pressione1 = False
            Pressione2 = True
        End If
    End Sub
    
    
  • Re: Limitazione scrittura textbox tag nfc

    chiedo a Kariokas di postarmi il debug della finestra immediata così per vedere come lavora...
    Nel ringraziarvi per l'aiuto che mi state dando vorrei avvisarvi che da questo momento in poi non penso di essere più in grado di comprendere pienamente il codice che mi hai postato!

    Per quanto riguarda il codice e il debug, ho fatto le seguenti prove:
    - Ho avviato la maschera e ho fatto scrivere il codice di una carta al lettore nel controllo txt_Test e ho ottenuto questo:
    
    1_Inizio
    1_Tempo 1
    2_Inizio
    2_Tempo 3
    1_Inizio
    1_Tempo 8
    2_Inizio
    2_Tempo 55
    1_Inizio
    1_Tempo 22
    2_Inizio
    2_Tempo 72
    1_Inizio
    1_Tempo 26
    2_Inizio
    2_Tempo 56
    1_Inizio
    Contatore1 Escape_ nel textbox hai scritto: 3285037691
    2_Inizio
    Contatore2 Escape_ nel textbox hai scritto: 3285037691
    - Ho scritto a mano dei numeri sempre in txt_Test:
    
    1_Inizio
    1_Tempo 3070
    2_Inizio
    2_Tempo 3271
    1_Inizio
    1_Tempo 3747
    2_Inizio
    2_Tempo 3594
    1_Inizio
    1_Tempo 3534
    2_Inizio
    Contatore2 Escape_ nel textbox hai scritto: 123456
    
    in entrambi i casi dopo aver consolidato il valore inserito nella txt_Test il focus si sposta nella txt_Focus.
  • Re: Limitazione scrittura textbox tag nfc

    Perfetto. Lascia ben sperare.. Almeno come output... É quello che mi aspettavo in effetti... Appena possibile provo a spiegarti cosa ho fatto e cosa si può fare... La prima lista codice é relativa ad un singolo inserimento di carta lettore vero?
  • Re: Limitazione scrittura textbox tag nfc

    Il risultato più o meno l'ho capito, in sostanza se scrivo tutte e 10 le cifre in un certo range di tempo bene, altrimenti faccio svuotare la Textbox (nel tuo esempio spostavo il focus).
    Per quanto riguarda il lettore, sì, è riferito ad un singolo inserimento, oltretutto mi sono messo a smanettare anche con il programma di configurazione del lettore e ho visto che si può abilitare la pressione di "enter" automatica alla fine della scrittura del codice della carta.
  • Re: Limitazione scrittura textbox tag nfc

    Kariokas ha scritto:


    Il risultato più o meno l'ho capito, in sostanza se scrivo tutte e 10 le cifre in un certo range di tempo bene, altrimenti faccio svuotare la Textbox (nel tuo esempio spostavo il focus).
    Per quanto riguarda il lettore, sì, è riferito ad un singolo inserimento, oltretutto mi sono messo a smanettare anche con il programma di configurazione del lettore e ho visto che si può abilitare la pressione di "enter" automatica alla fine della scrittura del codice della carta.
    Hai notato la differenza di valori mostrati nella prima prova e quelli nella seconda? É su quei tempi che potremmo agire... Il lettore si attesta sempre sotto i 100 mi pare.. É una macchina e le macchine sono veloci!!! Un essere umano difficilmente può riuscire a inserire 10 caratteri rispettando la velocita del lettore... Anche se si mettesse a picchiare i tasti non credo riesca a inserire esattamente 10 caratteri.. Quindi sono tutti criteri utili a limitare inserimenti non provenienti dal lettore.

    Inoltre si potrebbe anche sfruttare la possibilità di premere enter...

    Continuo... Sono sulla buona strada secondo te?
  • Re: Limitazione scrittura textbox tag nfc

    Secondo me questa potrebbe essere un'ottima strada, già contando i 10 caratteri saremmo a posto a livello di controlli, dovrei modificare un po' tutto il layout del programma ma pazienza.
    L'unica cosa che ho notato è che il codice funziona solo la prima volta cioè quando apro la maschera, per farlo funzionare sempre andrebbe bene se metto tutto il codice in una funzione in modo che posso richiamarla anche all'evento click della txt_Test?
    Sono riuscito anche a fare in modo che il lettore scriva il codice sempre nella Textbox dedicata!
    Ho notato che potevo impostare un carattere speciale anche prima del codice della carta, visto che mi mandava il carattere ascii=242 tramite l'evento KeyPress e impostando il KeyPreview sulla form imposto il focus sulla Textbox che voglio solo quando ricevo il suddetto carattere. Adesso la domanda che mi sorge spontanea è: qual è il problema legato all'utilizzo della funzione KeyPreview?
    Mi è stato sconsigliato da @Alex e visto che non mi sembra l'ultimo arrivato avrà avuto degli ottimi motivi che evidentemente ignoro...
  • Re: Limitazione scrittura textbox tag nfc

    Kariokas,
    non dici nulla sulle caratteristiche del tuo lettore NFC (Near Field Communication) e sulle modalità con cui acquisisci il dato.
    In generale i dispositivi, più comuni, operano attraverso la USB, in emulazione i tastiera, e offrono, normalmente, una serie di utility (sia per le impostazioni di lettura che per la fase di acquisizione).
    Ad esempio si possono inserire dei caratteri in coda (come TAB o CR/LF in modo da avanzare al prossimo campo) oppure in testa per identificare il dispositivo.
    Considera che i Tag NFC sono detti "passivi", perché vengono azionati dai dispositivi "attivatori", (come smartphone, tablet, lettori NFC per computer) e possono essere programmati per far compiere diversi tipi di azioni al dispositivo che li legge (aprire un link, avviare una applicazione, mostrare un testo, ecc.).
    Sarebbe, quindi, da conoscere le utility e features che il device rende disponibili.
  • Re: Limitazione scrittura textbox tag nfc

    Il cardreader (come un lettore di codice a barre) è un dispositivo HID (Human Interface Devices), assimilabile ad una tastiera.
    Quindi questa è la sequenza di eventi : https://support.office.com/en-us/article/Order-of-events-for-database-objects-E76FBBFE-6180-4A52-8787-CE86553682F9#bm4

    Ho fatto alcune prove con un lettore di codici a barre e confermo che l' utilizzo di qualsiasi evento di tastiera NON porta ad alcun utilizzo pratico (gli eventi si scatenano per OGNI carattere ricevuto) .....

    Un possibile approccio :
    - abilitare l' enter automatico (funzione prevista dal tuo cardreader e funzione spesso già abilitata nei barcode reader);
    - utilizzare l' evento exit (del textbox) che avviene SOLO 1 volta prima di passare al controllo successivo. Nell' evento effettuare la validazione dei dati ed eventualmente annullare l' evento (cancel = true) in caso di dati NON validi. Per sfruttare l' evento exit è necessario che il controllo textbox NON sia l' unico controllo presente nel form (i.e. - basta aggiungere un pulsante);

    Ovviamente si può anche seguire quanto suggerito da Angelo e misurare la velocità di immissione dei caratteri ....
  • Re: Limitazione scrittura textbox tag nfc

    willy55 ha scritto:


    Kariokas,
    non dici nulla sulle caratteristiche del tuo lettore NFC (Near Field Communication) e sulle modalità con cui acquisisci il dato.
    Sarebbe, quindi, da conoscere le utility e features che il device rende disponibili.
    Non ho scritto nulla sul lettore perché veramente c'è poco da scrivere, è semplicemente un emulatore di una tastiera USB che scrive il codice della carta nel formato "0123456789". Ho la possibiltà di anteporre e posporre un carattere speciale oltre alla possibilità di dare il comando di "enter" alla fine della scrittura del codice.

    Per quanto riguarda il post di max.riservo e nello specifico:
    Un possibile approccio :
    - abilitare l' enter automatico (funzione prevista dal tuo cardreader e funzione spesso già abilitata nei barcode reader);
    - utilizzare l' evento exit (del textbox) che avviene SOLO 1 volta prima di passare al controllo successivo. Nell' evento effettuare la validazione dei dati ed eventualmente annullare l' evento (cancel = true) in caso di dati NON validi. Per sfruttare l' evento exit è necessario che il controllo textbox NON sia l' unico controllo presente nel form (i.e. - basta aggiungere un pulsante);
    Con questo tipo di approccio che avevo già scartato non riesco ad essere sicuro che il codice inserito sia effettivamente di una carta perché:

    - se scrivo a mano un codice tipo "45826454739" supererà tutti i possibili controlli e nella migliore delle ipotesi si ferma quando la query non lo trova nella tabella, (nella peggiore delle ipotesi ho incrociato i dati delle carte);

    - se scrivo 3 numeri a mano e poi avvicino una carta al lettore ho due strade, se ho impostato il limite a 10 caratteri ho che mi accoderà solo i primi 7 numeri e quindi il codice sarà falsato; se non controllo la lunghezza il codice finale sarà la somma dei caratteri digitati a mano + i 10 rilevati dal lettore;

    Allo stato attuale penso che l'unico modo per discriminare i due metodi di inserimento sia quello suggeritomi da Angelo_Tbp ovvero quello di monitorare i tempi tra una pressione e l'altra.
  • Re: Limitazione scrittura textbox tag nfc

    - se scrivo 3 numeri a mano e poi avvicino una carta al lettore ho due strade, se ho impostato il limite a 10 caratteri ho che mi accoderà solo i primi 7 numeri e quindi il codice sarà falsato; se non controllo la lunghezza il codice finale sarà la somma dei caratteri digitati a mano + i 10 rilevati dal lettore;
    Se il tuo TAG ti restituisce sempre (e solo) 10 caratteri, tu considera SOLO gli ultimi 10 caratteri della textbox in abbinamento all' enter automatico ....

    Aggiungo : fagli inserire anche i caratteri di inizio/fine TAG così di fatto i caratteri validi DEVONO essere 10 all' interno dei caratteri delimitatori !
Devi accedere o registrarti per scrivere nel forum
39 risposte