@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