Problemi con il metodo oBrw:bKeychar

Moderator: Enrico Maria Giordano

Post Reply
User avatar
Marco Turco
Posts: 858
Joined: Fri Oct 07, 2005 12:00 pm
Location: London
Contact:

Problemi con il metodo oBrw:bKeychar

Post by Marco Turco »

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
User avatar
pymsoft
Posts: 383
Joined: Tue Oct 11, 2005 1:01 pm
Location: Savona - Italia
Contact:

Post by pymsoft »

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
User avatar
Marco Turco
Posts: 858
Joined: Fri Oct 07, 2005 12:00 pm
Location: London
Contact:

Post by Marco Turco »

In effetti non sempre bisogna cercare soluzioni complicate.

Grazie 1000.

Marco
Post Reply