Ciao a tutti,
siete in sciopero ; ) ?
Spero di no perché ho un problema abbastanza strano che vorrei sottoporre alla vostra attenzione.
Nel software gestionale che produco utilizzo molto la classe tcbrowse (standard di fivewin) per mostrare il contenuto di array multidimensionali.
Facendo poi doppio click sul record fornisco all'utente la possibilità di modificare i dati contenuti nel record aprendo una dialog.
Fin qui niente di strano.
Il fatto è che trattandosi di un software di contabilità che richiede molto inserimento dati ho previsto praticamente ovunque la possibilità di operare anche solo con la tastiera.
Nel caso di un browse aggiungo quindi un codeblock che mi rilevi la pressione del tasto invio mentre il browse ha il focus:
oBrw:bKeyChar={|nKey|if(nKey=13(<entro nella fase di inserimento dati>,))}
la fase di inserimento dati consiste nell'aprire una dialog e richiedere un paio di informazioni in una get
Il problema è che se tengo premuto all'infinito il tasto invio alla fine il programma mi va in errore. Dal tipo di errore credo il problema sia dovuto al fatto che il codeblock mi rileva un secondo invio prima di terminare l'esecuzione del codice contenuto nel codeblock accavallando così le operazioni (e rilasciando in modo incorretto la dialog di inserimento dati).
Qui la domanda:
esiste un sistema per bloccare la rilevazione dei tasti premuti finché il codice contenuto nel codeblock richiamato dal tasto "invio" precedente non è completamente eseguito ?
Spero di essere stato chiaro.
Grazie in anticipo.
Marco Turco
Problemi con il metodo oBrw:bKeychar
Moderator: Enrico Maria Giordano
- Marco Turco
- Posts: 858
- Joined: Fri Oct 07, 2005 12:00 pm
- Location: London
- Contact:
Marco, io lo faccio cosi:
....
oWinArt:bKeyDown := { | nKey, nFlags | Tasti( nKey, !(oLbxArt:nLen == 0) ) }
....
***************
STATIC FUNCTION Tasti(nKey, lAtti )
***************
oWinArt:bKeyDown := { | nKey, nFlags | NIL }
IF nKey == VK_INSERT .AND. lAnd( 4, oV:aDirittiUtente[2] ) // Tasto Insert: Aggiunge
AnagraArt(.T., nil )
ENDIF
IF( nKey == VK_F12, oWinArt:End(),) // F12: chiude
IF lAtti
IF nKey == VK_RETURN .AND. lAnd( 8, oV:aDirittiUtente[2] )
AnagraArt(.F., nil)
ENDIF
...
...
...
oWinArt:bKeyDown := { | nKey, nFlags | Tasti(nKey, IF(oLbxArt:nLen == 0, .F., .T.) ) }
RETURN NIL
....
oWinArt:bKeyDown := { | nKey, nFlags | Tasti( nKey, !(oLbxArt:nLen == 0) ) }
....
***************
STATIC FUNCTION Tasti(nKey, lAtti )
***************
oWinArt:bKeyDown := { | nKey, nFlags | NIL }
IF nKey == VK_INSERT .AND. lAnd( 4, oV:aDirittiUtente[2] ) // Tasto Insert: Aggiunge
AnagraArt(.T., nil )
ENDIF
IF( nKey == VK_F12, oWinArt:End(),) // F12: chiude
IF lAtti
IF nKey == VK_RETURN .AND. lAnd( 8, oV:aDirittiUtente[2] )
AnagraArt(.F., nil)
ENDIF
...
...
...
oWinArt:bKeyDown := { | nKey, nFlags | Tasti(nKey, IF(oLbxArt:nLen == 0, .F., .T.) ) }
RETURN NIL
- Marco Turco
- Posts: 858
- Joined: Fri Oct 07, 2005 12:00 pm
- Location: London
- Contact: