Autore Topic: intercettare combinazione di tasti  (Letto 1780 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
intercettare combinazione di tasti
« il: 02 Maggio 2009, 21:38:54 »
Purtroppo quando non si sa come impostare la frase magica che permette di centrare la ricerca fra i post della comunità, bisogna lanciare un SoS come quello che sto lanciando io in questo momento. :aiuto:

Ho imparato ad intercettare nell'evento KeyPress la pressione dei tasti: Invio, Freccia giù Freccia su e così via , ma supponiamo che devo intercettare la selezione di una parte o di tutto il testo di un oggetto "textbox". Considerando che la selezione può avvenire trascinando il cursore sopra il testo attraverso il click tenuto del mouse, oppure attraverso la pressione combinata dei tasti "Shift + Tab avanti" o "Shift + Tab indietro o ,ancora, "Shift + Freccia avanti" o "Shift + Freccia indietro", ho cercato fra i post e fra la documentazione ufficiale la risposta al mio quesito, ma invano.
Citazione
Domanda: esiste una proprietà   "Key.qualcosa"   che mi permetta di capire se sta arrivando, per esempio, dalla tasiera un comando di selezione? E poi, come faccio a capire quanti crt verranno o sono stati selezionati?
Mi serve saperlo perché nel mio Textbox, dopo avere inserito un importo comprensivo dei due crt decimali, se seleziono tutto il testo digitato e tento di sostiuirlo con una nuova digitazione, i controlli che ho inserito per impedire di aggiungere altri decimali dopo i primi due, mi inibiscono la reimpostazione del testo selezionato, se prima non premo "Canc".  :-(
Ciao a tutti.
:ciao:

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: intercettare combinazione di tasti
« Risposta #1 il: 02 Maggio 2009, 22:56:40 »
Qui hai guardato?
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: intercettare combinazione di tasti
« Risposta #2 il: 03 Maggio 2009, 10:59:11 »
Citazione

leo72 ha scritto:
Qui hai guardato?


Grazie Leo.
Per la verità no, ma sono riuscito a leggere, purtroppo dopo avere scritto la richiesta di aiuto, l'argomento "TextBox.Selected (gb.qt)" del sito ufficiale ed ho modificato di conseguenza il codice impiegando il test della condizione "Testo selezionato" dentro l'evento "KeyRelease". Però vorrei capire se é possibile interrogare con unica istruzione la pressione combinata dei tasti (tanto per fare un esempio):
Citazione
"Shift" & "Home", oppure "Shift" & "Freccia a sinistra"

Sono inoltre riuscito a scoprire dell'esistenza di proprietà di ulteriore supporto: "NomeTextBox.Selection.Start" e "NomeTextBox.Selection.Length". Dalla loro interrogozaione posso infatti conoscere la posizione del 1° crt selezionato e della lunghezza del testo selezionato.
Però se mi puoi dare un'ulteriore informazione sull'intercettazione della pressione combinata dei tasti, ti sarò veramente assai grato. :-)
 :ciao:  :ciao:
:ciao:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: intercettare combinazione di tasti
« Risposta #3 il: 03 Maggio 2009, 20:05:00 »
L'oggetto static "Key", quando interrogato all'interno di uno dei metodi evento associati, contiene anche lo stato dei tasti di controllo (shift, ctrl, ecc.).
Per quando riguarda il mouse, diventa un pò più compliato, se devi analizzare lo stato dei pulsanti in contemporanea allo stato della tastiera; purtroppo in ogni si può analizzare solo l'oggetto che lo ha scatenato (quindiKey=tastiera, Mouse=mouse). Però, con qualche accorgimento, puoi riuscire a risolvere il problema, come ad esempio salvarti in apposite variabili lo stato del mouse tramite i propri eventi, ed interrogandole quando analizzi i tasti premuti.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: intercettare combinazione di tasti
« Risposta #4 il: 04 Maggio 2009, 07:39:54 »
Citazione

md9327 ha scritto:
L'oggetto static "Key", quando interrogato all'interno di uno dei metodi evento associati, contiene anche lo stato dei tasti di controllo (shift, ctrl, ecc.).
Per quando riguarda il mouse, diventa un pò più compliato, se devi analizzare lo stato dei pulsanti in contemporanea allo stato della tastiera; purtroppo in ogni si può analizzare solo l'oggetto che lo ha scatenato (quindiKey=tastiera, Mouse=mouse). Però, con qualche accorgimento, puoi riuscire a risolvere il problema, come ad esempio salvarti in apposite variabili lo stato del mouse tramite i propri eventi, ed interrogandole quando analizzi i tasti premuti.


Non ho capito bene quello che vuoi dire; forse é meglio focalizzare i momenti uno alla volta: Se l'oggetto che ha scatenato l'evento é la tastiera é chiaro che bisogna analizzare quell'oggetto, perciò se sono stati premuti sia il tasto "Shift" che il tasto "Home" , é stato selezionato tutto il testo a partire da una certa posizione e fino al primo crt del testo stesso. Vorrei capire se sono stati premuti tutti e due i tasti; ho trovato si la possibilità di interrogare separatamente "Key.Shift" e "Key.Home", ma non ho capito come fare per ricinoscere la presenza contemporanea dei due oggetti. Comunque, ho trovato un'altra soluzione con la quale sono riuscito a superare l'ostacolo:
Citazione
Nell'evento KeyRelease, ho scritto:
Codice: [Seleziona]
Dim b_Sw AS Boolean
b_Sw = ImpMovDig.Selected   'pone TRUE se c'é testo selezionato e FALSE se non esiste selezione

Poi, con la pressione del crt successivo, nellì'evento KeyPress, interrogo lo stato di b_Sw e,nel mio caso,:
Codice: [Seleziona]
IF b_Sw = FALSE
    STOP EVENT

 Inoltre per intercettare l'eventuale selezione tramite mouse ho scritto:
Codice: [Seleziona]
PUBLIC SUB ImpMovDig_MouseUp()
   b_Sw = ImpMovDig.Selected    'prepara il test sull'esistenza di crt selezionati

END

Così facendo, sia che venga selezionato del testo con l'utilizzo della tastiera, sia che venga selezionato con l'utilizzo del mouse l'identificatore booleano "b_Sw" mi fornisce lo stato della selezione e riesco a riconoscerlo al momento della digitazione del successivo crt. :-)
Ciò non significa che ho abbandonato la mia curiosità di partenza. :ciao:  :ciao:
:ciao:

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: intercettare combinazione di tasti
« Risposta #5 il: 04 Maggio 2009, 10:53:12 »
Per intercettare mouse-click + tastio speciale puoi usare l'evento MouseDown
dentro la TextBox.

Codice: [Seleziona]

PUBLIC SUB TextBox1_MouseDown()

  IF Mouse.Shift THEN
    PRINT "Hai cliccato tenendo premuto Shift"
  ENDIF  
   
END


Per i dettagli guarda la documentazione sotto gb.qt/Mouse. Ciao.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: intercettare combinazione di tasti
« Risposta #6 il: 04 Maggio 2009, 23:27:56 »
Se non ricordo male, le proprietà dell'oggetto Key, come ad esempio quelli da te indicati (home e shift), sono dei normali booleani, per cui basta che li testi nello stesso metodo chiamato dalla tastiera:

Codice: [Seleziona]

...
IF (Key.Home AND Key.Shift AND Key.Text = "A") THEN
 
END IF
...


Nell'esempio, il controllo viene fatto sulla pressione contemporanea dei tasti Home+Shift+A; anche se un pò anomala, penso renda l'idea...

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: intercettare combinazione di tasti
« Risposta #7 il: 05 Maggio 2009, 22:43:44 »
Citazione

md9327 ha scritto:
Codice: [Seleziona]

IF (Key.Home AND Key.Shift AND Key.Text = "A") THEN
 
END IF

Nell'esempio, il controllo viene fatto sulla pressione contemporanea dei tasti Home+Shift+A; anche se un pò anomala, penso renda l'idea...


Grazie per il tuo cordialissimo interessamento. proverò. Ciao
:ciao: