Autore Topic: acquisizione tasti  (Letto 7998 volte)

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
acquisizione tasti
« il: 28 Febbraio 2008, 21:03:38 »
ciao a tutti,

chi di voi sa come si fa ad acquisire la pressione di un tasto della tastiera?

per esempio freccia avanti?


grazie in anticipo a tutti!!

Offline Pixel

  • Amministratore
  • Maestro Gambero
  • *****
  • Post: 414
    • Mostra profilo
    • http://www.gambas-it.org
Re: acquisizione tasti
« Risposta #1 il: 28 Febbraio 2008, 23:05:11 »
Codice: [Seleziona]
SELECT CASE key.Code

      CASE key.Right
      Message.Info("Premuto il tasto freccia a destra")

      CASE key.Esc
      Message.Info("Premuto il tasto Esc")

END SELECT


Ecc...ecc..

Ciao
Ubuntu Italian Member Ubuntu User 4683
Il mio Blog

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: acquisizione tasti
« Risposta #2 il: 29 Febbraio 2008, 10:50:12 »
grazie mille !
però ho un dubbio:

questo codice dovrei metterlo dentro un evento keypress di un form ,ad esempio :


Codice: [Seleziona]
PUBLIC SUB area_KeyPress()


  DIM n AS Integer
 
      n=griglia.Find(3)

  SELECT CASE Key.Code
 
          CASE key.Up
                  IF n > 24 THEN
                   griglia.Fill(0, n, 1)
                   griglia.Fill(3, n - 25, 1)
                  ENDIF
  END SELECT
               
               
               
               

END



ma se invece volessi acquisire i tasi durante un evento timer?

 :-)  :-)

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: acquisizione tasti
« Risposta #3 il: 29 Febbraio 2008, 11:41:38 »
Citazione

fsurfing ha scritto:
grazie mille !
però ho un dubbio:

questo codice dovrei metterlo dentro un evento keypress di un form ,ad esempio :


Codice: [Seleziona]
PUBLIC SUB area_KeyPress()


  DIM n AS Integer
 
      n=griglia.Find(3)

  SELECT CASE Key.Code
 
          CASE key.Up
                  IF n > 24 THEN
                   griglia.Fill(0, n, 1)
                   griglia.Fill(3, n - 25, 1)
                  ENDIF
  END SELECT
               
               
               
               

END



ma se invece volessi acquisire i tasi durante un evento timer?

 :-)  :-)


In che senso nell'evento timer? :-)

Esattamente cosa vorresti fare o ottenere?

Offline Pixel

  • Amministratore
  • Maestro Gambero
  • *****
  • Post: 414
    • Mostra profilo
    • http://www.gambas-it.org
Re: acquisizione tasti
« Risposta #4 il: 29 Febbraio 2008, 14:03:10 »
Concordo con la perplessità di giulio.
Siccome l'evento keypress verifica la pressione di un tasto relativa ad un oggetto presente nella form, mi risulta alquanto strano associarlo ad un oggetto timer.

Se vuoi scrivere un unico codice da associare a più oggetti è sufficiente creare una SUB che chiami (per esempio) EventiTastiera in cui inserisci il codice di cui sopra ed all'interno di ogni oggetto che vuoi controllare esegui una "chiamata" alla SUB.

Ciao
Ubuntu Italian Member Ubuntu User 4683
Il mio Blog

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: acquisizione tasti
« Risposta #5 il: 29 Febbraio 2008, 18:17:00 »
grazie mille per l' aiuto :-D


la mia idea era che a tot periodi di tempo venga controllata la pressione di un tasto,

Citazione
Se vuoi scrivere un unico codice da associare a più oggetti è sufficiente creare una SUB che chiami (per esempio) EventiTastiera in cui inserisci il codice di cui sopra ed all'interno di ogni oggetto che vuoi controllare esegui una "chiamata" alla SUB.



ho provato ma gambas mi da errore dicendo che non ci sono keypress event ...



per ora utilizzo i vostri consigli ed utilizzo l' evento keypress del form

ciao ciao e grazie ancora

Offline Pixel

  • Amministratore
  • Maestro Gambero
  • *****
  • Post: 414
    • Mostra profilo
    • http://www.gambas-it.org
Re: acquisizione tasti
« Risposta #6 il: 29 Febbraio 2008, 22:04:28 »
Questo è quello che intendevo io:

Chiamate principali negli oggetti

Codice: [Seleziona]
PUBLIC SUB TreeView1_KeyPress()
MainFrame.keyEvent(key.Code)
END

PUBLIC SUB TextArea1_KeyPress()
  MainFrame.keyEvent(key.Code)
END


Sub principale unica di gestione dell'evento nel modulo principale (MainFrame)

Codice: [Seleziona]
PUBLIC SUB keyEvent(Code AS Variant)
 
  SELECT CASE key.Code
CASE key.Right
Message.Info("Premuto il tasto freccia a destra")

CASE key.Esc
Message.Info("Premuto il tasto Esc")

END SELECT
 
END


Ciao
Ubuntu Italian Member Ubuntu User 4683
Il mio Blog

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: acquisizione tasti
« Risposta #7 il: 29 Febbraio 2008, 22:33:51 »
Citazione

pixel ha scritto:
Questo è quello che intendevo io:

Chiamate principali negli oggetti

Codice: [Seleziona]
PUBLIC SUB TreeView1_KeyPress()
MainFrame.keyEvent(key.Code)
END

PUBLIC SUB TextArea1_KeyPress()
  MainFrame.keyEvent(key.Code)
END


Sub principale unica di gestione dell'evento nel modulo principale (MainFrame)

Codice: [Seleziona]
PUBLIC SUB keyEvent(Code AS Variant)
 
  SELECT CASE key.Code
CASE key.Right
Message.Info("Premuto il tasto freccia a destra")

CASE key.Esc
Message.Info("Premuto il tasto Esc")

END SELECT
 
END


Ciao


pixel, SELECT CASE Code :-)

Offline Pixel

  • Amministratore
  • Maestro Gambero
  • *****
  • Post: 414
    • Mostra profilo
    • http://www.gambas-it.org
Re: acquisizione tasti
« Risposta #8 il: 29 Febbraio 2008, 22:37:28 »
Si.. funziona lo stesso ma è giusta la tua osservazione :oops:

Ciao
Ubuntu Italian Member Ubuntu User 4683
Il mio Blog

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: acquisizione tasti
« Risposta #9 il: 29 Febbraio 2008, 23:03:11 »
grazie mille! proprio quello che cercavo!!!! :good:


ciao ciao

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: acquisizione tasti
« Risposta #10 il: 29 Febbraio 2008, 23:04:47 »
Citazione

pixel ha scritto:
Si.. funziona lo stesso ma è giusta la tua osservazione :oops:

Ciao


Eh sì funziona lo stesso :uhm: Ho fatto un test e funziona pure così:

PUBLIC SUB TextArea1_KeyPress()
  MainFrame.keyEvent()
END

PUBLIC SUB keyEvent()
 
SELECT CASE key.Code
CASE key.Right
Message.Info("Premuto il tasto freccia a destra")

CASE key.Esc
Message.Info("Premuto il tasto Esc")

END SELECT
 
END

Probabilmente la variabile key.code viene memorizzata a livello globale
dall'applicazione. E' come se in cima alla classe fosse
dichiarato un teorico:

PUBLIC key.code AS Variant

che cambia ogni volta che un evento keypress è intercettato. Non so se è
un bene o un male (o un bug?)  :uhm:   

ciao

Offline Pixel

  • Amministratore
  • Maestro Gambero
  • *****
  • Post: 414
    • Mostra profilo
    • http://www.gambas-it.org
Re: acquisizione tasti
« Risposta #11 il: 01 Marzo 2008, 13:20:34 »
Citazione

giulio ha scritto:
Non so se è
un bene o un male (o un bug?)  :uhm:   

Personalmente noto una certa ridondanza nei comandi utilizzabili all'interno di Gambas, potrebbe essere uno di questi casi, comunque un chiarimento da parte di Benoit si potrebbe anche chiedere :-D
Ciao
Ubuntu Italian Member Ubuntu User 4683
Il mio Blog

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: acquisizione tasti
« Risposta #12 il: 02 Marzo 2008, 02:46:33 »
Penso che, dato che il singolo computer viene utilizzato contemporaneamente da un singolo individuo, probabilmente hanno pensato che memorizzare a livello globale l'ultimo tasto premuto era la soluzione più facile.
In effetti in altri linguaggi, nell'evento viene creato anche uno specifico oggetto che contiene tutte le informazioni necessarie all'individuazione di cosa ha generato l'evento e perchè, come ad esempio la gestione degli eventi del mouse, che fà la fotografia dello stato generale del mouse in quel momento, in modo che l'applicazione sà se per caso è stato premuto il tasto destro piuttosto che il sinistro.
Anche il fatto di nominare gli eventi è una scelta di semplificazione, con la prima parte del nome del metodo che rispecchia fedelmente il nome dell'oggetto da cui può scatenarsi l'evento, e nella seconda parte la tipologia dell'evento stesso (es. click, dblclick, ecc.).
La gestione degli eventi è di per sè una cosa molto complicata, e ha a che fare molto son il sistema su cui gira; in gambas hanno semplificato di molto la cosa, e questo gli fà molto onore, perchè poi semplifica molto il lavoro.

Offline koko

  • Gambero
  • **
  • Post: 52
    • Mostra profilo
Re: acquisizione tasti
« Risposta #13 il: 06 Giugno 2008, 15:26:18 »
Mi intrometto nella discussione sperando di non andare troppo OffTopic.

Che voi sappiate, è possibile,tramite gambas, 'intercettare' eventi di keypress che non vengano indirizzati ad alcun controllo del/dei form del progetto gambas in esecuzione?

In pratica mi riferisco alla gestione di hotkey globali;
vorrei, tanto per intenderci,che la mia applicazione eseguisse dei comandi specifici alla pressione di una combinazione dei tasti mentre navigo con firefox.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: acquisizione tasti
« Risposta #14 il: 07 Giugno 2008, 02:24:15 »
Se parli di intercettare comandi all'interno di un'applicazione Gambas, anche se non legati ad un controllo specifico, la cosa si fà attraverso l'oggetto Application, che viene avviato come statico, ed è sempre e comunque l'oggetto che contiene la tua applicazione.

Se vuoi intercettare comandi da altri programmi, esterni a gambas, credo la cosa sia un pò complicata.

Puoi spiegare meglio cosa intendi fare e ottenere ?