Discussione:
Equiparare pressione tasti a click pulsante
(troppo vecchio per rispondere)
Silvio Pianesani
2005-06-28 20:18:59 UTC
Permalink
Ciao ragazzi, sapete dirmi come fare in una form ad equiparare la
pressione di un tasto nella tastiera ad un click di un pulsante nella
form stessa?
Ad esempio che la pressione della barra spaziatrice sia come fare click
su un determinato pulsante.

Grazie in anticipo
Carlo Costarella
2005-06-29 05:58:01 UTC
Permalink
Post by Silvio Pianesani
Ciao ragazzi, sapete dirmi come fare in una form ad equiparare la
pressione di un tasto nella tastiera ad un click di un pulsante nella
form stessa?
Ad esempio che la pressione della barra spaziatrice sia come fare click
su un determinato pulsante.
Grazie in anticipo
Prima di tutto devi impostare a sì la proprietà della maschera "Anteprima
tasti"; poi potresti sfruttare l'evento "su pressione" della maschera stessa
per intercettare il tasto premuto. Per esempio:
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 32 Then
MsgBox "Hai premuto barra spaziatrice. Quello che vuoi"
End If

End Sub

Ovviamente la cosa può essere fatta anche su pressione di un singolo
controllo e in questo caso non è importante impostare a sì l'anteprima
tasti.

Ciao, Carlo
Sergio MAZZA
2005-06-29 17:01:03 UTC
Permalink
Post by Silvio Pianesani
Ciao ragazzi, sapete dirmi come fare in una form ad equiparare la
pressione di un tasto nella tastiera ad un click di un pulsante nella
form stessa?
Ad esempio che la pressione della barra spaziatrice sia come fare click
su un determinato pulsante.
Grazie in anticipo
Non è che per caso vorresti definirti una sequenza di tasti tutta tua (es.
CTRL-G) che esegua una determinata funzione?

Ciao.
--
Sergio MAZZA
Silvio Pianesani
2005-06-29 17:26:38 UTC
Permalink
no, perchè sto creando un programmino che simuli le funzionalità di
uno strumento che si chiama audiometro e che ha sostanzialmente una
console con dei pulsanti percui, le combinazioni di tasti mi
complicherebbero la vita.
Per quanto mi ha detto invece carlo, innanzitutto lo ringrazio per la
risposta, ma l'evento su pressione lo conosco, il problema è che....ad
esempio nel mio caso:

1: ho 2 cornici una con 5 bottoni che danno se selezionati
rispettivamente i valori alla cornice 500, 1000, 2000, 3000, 4000,
mentre la seconda cornice con 2 option button danno come valori o 1 o 2
che io ho poi associato alle lettere S e D.

2: prendo la lettera della seconda cornice (S per esempio) e il valore
della prima cornice (500 ad esempio) per poi avere una stringa unita
S500.

3: tramite le api alla pressione di un tasto mi esegue il file S500.wav

io praticamente premendo la barra spaziatrice voglio vedere quel
pulsante andare giù e lanciare la routine di esecuzione del file
audio, ma non so come e oltretutto ad esempio premendo il tasto S
vedere l'option button rdella seconda cornice relativo selezionarsi. e
così via.

ho cercato di essere il più chiaro possibile, insomma io premo un
tasto e vedo un pulsante andare giù senza che sia onfocus o roba
simile. oppure premo un tasto e mi lancia la private sub del pulsante
per eseguire il suono, senza doverla duplicare.

Grazie ancora
Sergio MAZZA
2005-06-29 17:57:14 UTC
Permalink
"Silvio Pianesani" <***@gmail.com> ha scritto nel messaggio news:***@g44g2000cwa.googlegroups.com...
no, perchè sto creando un programmino che simuli le funzionalità di
uno strumento che si chiama audiometro e che ha sostanzialmente una
console con dei pulsanti percui, le combinazioni di tasti mi
complicherebbero la vita.
Per quanto mi ha detto invece carlo, innanzitutto lo ringrazio per la
risposta, ma l'evento su pressione lo conosco, il problema è che....ad
esempio nel mio caso:

1: ho 2 cornici una con 5 bottoni che danno se selezionati
rispettivamente i valori alla cornice 500, 1000, 2000, 3000, 4000,
mentre la seconda cornice con 2 option button danno come valori o 1 o 2
che io ho poi associato alle lettere S e D.

2: prendo la lettera della seconda cornice (S per esempio) e il valore
della prima cornice (500 ad esempio) per poi avere una stringa unita
S500.

3: tramite le api alla pressione di un tasto mi esegue il file S500.wav

io praticamente premendo la barra spaziatrice voglio vedere quel
pulsante andare giù e lanciare la routine di esecuzione del file
audio, ma non so come e oltretutto ad esempio premendo il tasto S
vedere l'option button rdella seconda cornice relativo selezionarsi. e
così via.

ho cercato di essere il più chiaro possibile, insomma io premo un
tasto e vedo un pulsante andare giù senza che sia onfocus o roba
simile. oppure premo un tasto e mi lancia la private sub del pulsante
per eseguire il suono, senza doverla duplicare.

Grazie ancora

[risposta]

La SendKeys (vedi help) forse non fa vedere il tasto che va giù ma emula la
pressione di qualsiasi tasto...

Ciao.
--
Sergio MAZZA
Gaspare
2005-06-29 22:33:12 UTC
Permalink
ho cercato di essere il più chiaro possibile, insomma io >premo un
tasto e vedo un pulsante andare giù senza che sia onfocus >o roba
simile. oppure premo un tasto e mi lancia la private sub >del pulsante
r eseguire il suono, senza doverla duplicare.
Ciao,
come giustamente ti dicono sia Carlo che Sergio non puoi andare a fare un
discorso del genere (per essere "pignolo" potresti anche farlo ma il "gioco
non vale la candela" -> credimi)

Il s.o. windows funziona in maniera tale che aspetta gli eventi dall'utente
( puoi "subclassare" determinati eventi e sostituirli con altri scritti da
te) ed in base a quelli risponde mentre tu "praticamente" vorresti
"simulare" la realizzazione dell'evento da codice -> i 2 principi non si
sposano bene :-( e lacosa infastidirebbe zio Bill ;-)

L'unica cosa che puoi fare è crearti 2 immagini che simulano il pulsante
"schiacciato" e "rialzato" e giacchè ti piacciono le API usi la funzione
keybd_event della libreria user32.dll

Ti passo il codice:

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan
As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)



Const KEYEVENTF_EXTENDEDKEY = &H1 'pressione del tasto (keyDown)
Const KEYEVENTF_KEYUP = &H2 'rilascio del tasto premuto (keyUp)

Private Sub Form_KeyPress(KeyAscii As Integer)
keybd_event vbKeyA, 0, KEYEVENTF_EXTENDEDKEY, 0 'simula la pressione del
tasto "A"

ImmaginePulsanteSchiacciato.Visible=True
ImmaginePulsanteRialzato.Visible=False

Call TuaRoutine

keybd_event vbKeyA, 0, KEYEVENTF_KEYUP, 0 'simula il rilascio del tasto "A"

ImmaginePulsanteSchiacciato.Visible=False
ImmaginePulsanteRialzato.Visible=True


End Sub

----
Oltreutto non capisco cosa stai costruendo (audiometro) e quindi se ti serve
necessariamente il classico pulsante etc...o poi sostituirlo con altro

Notte :-)

Gaspare
Gaspare
2005-06-29 23:24:15 UTC
Permalink
[CUT]

Dimenticavo-> per vedere le 2 immagini simulare il pulsante basta
intervenire alla fine del richiamo della tua sub con un MsgBox->in maniera
tale che interrompi il flusso :-)
Gaspare
2005-06-29 22:42:42 UTC
Permalink
[CUT]

La funzione la trovi documenta con esempio all'url
http://www.mentalis.org/apilist/keyb_event.shtml mentre dei pulsanti sono a
quest'url http://gifanimate.html.it/bottoni.asp -> ...se "cerchi con +
attenzione" trovi di meglio

Buon lavoro ;-)
Riccardo Baldinotti
2005-06-30 09:31:22 UTC
Permalink
Post by Gaspare
[CUT]
La funzione la trovi documenta con esempio all'url
http://www.mentalis.org/apilist/keyb_event.shtml mentre dei pulsanti sono a
quest'url http://gifanimate.html.it/bottoni.asp -> ...se "cerchi con +
attenzione" trovi di meglio
Buon lavoro ;-)
Io ho escogitato un effetto così, applicabile a normali pulsanti, ma va bene
per dei "bottoni" contenuti nelle cornici.

In una maschera ho tre etichette, Etichetta21, Etichetta22 ed Etichetta23.
Hanno aspetto in rilievo (SpecialEffect=1). Inoltre ho una Etichetta20 che
deve ricevere un valore.
Le tre etichette hanno .Caption rispettivamente "&500", "&1000" e "&4000".
Nella maschera ho messo Anteprima tasti a Sì e all'evento Su tasto giu la
seguente routine:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 53 Then
Etichetta21.SpecialEffect = 2
Etichetta22.SpecialEffect = 1
Etichetta23.SpecialEffect = 1
Etichetta20.Caption = "500"
ElseIf KeyCode = 49 Then
Etichetta22.SpecialEffect = 2
Etichetta21.SpecialEffect = 1
Etichetta23.SpecialEffect = 1
Etichetta20.Caption = "1000"
ElseIf KeyCode = 52 Then
Etichetta23.SpecialEffect = 2
Etichetta21.SpecialEffect = 1
Etichetta22.SpecialEffect = 1
Etichetta20.Caption = "4000"
End If
End Sub
Il risultato è di "premere" l'etichetta corrispondente ad un certo tasto (5,
1 o 4) e di porre un valore in Etichetta20.
La maschera ha anche una routine all'evento Su tasto su:
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Etichetta21.SpecialEffect = 1
Etichetta22.SpecialEffect = 1
Etichetta23.SpecialEffect = 1
End Sub
che "rialza" il "tasto" premuto.

In realtà di pulsanti reali non ce ne sono.

Ora, per adattarlo alle tue esigenze, si può fare che altri due valori di
KeyCode aggiungano una lettera al valore di Etichetta20 e facciano partire
il relativo .wav.
Ci vorrà tutta una serie di controlli per il caso che uno scelga prima la
lettera del numero, o prema in sequenza due valori diversi perché si è
sbagliato, e così via, ma ritengo che non ci siano grosse difficoltà.
Ciao.
Riccardo

--------------------------------
Inviato via http://arianna.libero.it/usenet/

Loading...