Newsgroup: it.comp.lang.visual-basic
Titolo: Tasti Funzioni F1-F12

Salve a tutti,
volevo sapere come fare per poter abilitare i tasti funzione F1-F12 nonchè
altri tasti come CANC, CTRL, etc.
Ho provato l'evento KEYPRESS con il vbkeyreturn su una textbox  e funziona,
mentre il vbkeyF1 o altri del genere non danno risultati.
Sono grato a chi saprà darmi un'indicazione di base con la quale poi
applicare queste utilità ai miei programmini.
Grazie a tutti e buon lavoro.

Ci provo:
io penso che tu debba usare la KeyDown
esempio:
Private Sub Text5_KeyDown(KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
        Case vbKeyF2
        Case vbKeyReturn
    Case Else
    End Select
End Sub
saluti
Cris

 altri tasti come CANC, CTRL, etc.
cerca codice su
http://www.planet-source-code.com/vb/
trovi un sacco di roba sul keymapping

Imposta anche KeyPreview = True nelle proprieta' del form!
Ciaps
Stracca
http://www.stracca.net
-- 
Posted from 
smsirmj0-5.customer.nettuno.it
 [130.186.251.229] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Intanto ringrazio sia Cristina che Randy per le risposte.
Ho dato un'occhiata al sito segnalato da Randy e spero di trovare qualcosa.
Quanto al codice fornito da Cristina ho seri problemi ad applicarlo vista la
mia poca esperienza.
Quindi ripropongo il quesito con un esempio pratico.
Apro un form nuovo contenente solo un oggetto SHAPE al quale, in base alla
pressione di un tasto voglio far cambiare il BackColor (non questa
l'applicazione che mi interessa, ma mi serve solo per capire il
funzionamento) premendo F1 per impostarlo sul rosso, F2 per il giallo e cosě
via. Premetto che pur avendolo sentito nominare non conosco bene il comando
CASE in quanto da vecchio utilizzatore del Basic ero solito usare IF-THEN
(sarebbe molto comodo poter far funzionare una riga del tipo 'if
keyascii=vbkeyreturn then ....' o 'if keyascii=vbkeyF1 then ....'). Puoi
inoltre spiegarmi che differenza applicativa passa tra il KEYPRESS ed il
KEYDOWN ?
Sperando di non farvi sprecare molto del vostro tempo vi
ringrazioanticipatamente.
Ciao Cri e ciao Randy


prova cosě:
Private Sub Text5_KeyDown(KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
        Case vbKeyF1 ' in caso ke keycode sia = a F1 then fai quello ke
viene appresso
            Shape1.BackColor = ROSSO ' dove avrai inserito in un modulo:
Public Const ROSSO = &HFF&
        Case vbKeyF2
            Shape1.BackColor = GIALLO ' dove avrai inserito in un modulo:
Public Const GIALLO=&HFFFF&
    Case Else
        beep 'in caso sia diverso da F1 e da F2 fai un bel BEEP!
    End Select
End Sub
Quale la differenza tra keypress e keydown? bah, ti posso solo dire che i
tasti funzione o altri (ctrl, alt, home, ecc.) li puoi controllare SOLO
attra verso la KeyDown. Per quanto riguarda la CASE praticamente CASE
KeyCode significa "in caso che KeyCode sia uguale a ..." e via di seguito i
vari casi
saluti
Cris

per CRIS
mi rendo conto che avresti voglia di accoltellarmi per tutto il tempo che ti
faccio perdere a leggere i miei msg e ti prometto che non posto più
sull'argomento.
Ho provato il tuo codice e purtroppo non va:
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
        Case vbKeyR
        Shape1.BackColor = vbRed
        Case vbKeyF2
         Shape1.BackColor = vbYellow
        Case Else
        Beep
        End Select
        End Sub
Con questo codice invece tutto funziona con i vbkey letterali e vbkeyreturn,
ma non per i vbkeyF1-F..
    Private Sub Text5_KeyPress(KeyAscii As Integer)
     If KeyAscii = vbKeyReturn Then Shape1.BackColor = vbWhite
    End Sub
Why ?
Grazie comunque per la tua collaborazione.
Un bacione e buon lavoro.
Max


'scolta: il tuo codice và benissimo ma anche il mio! infatti devi
utilizzarli tutt'e due. quello con keypress di "intercetta" le lettere, i
numeri, ecc. quello con keydown intercetta i tasti funzione. semplice no? (a
proposito: usare la Case o la If è la medesima cosa)
Cris

(a proposito: usare la Case o la If è la medesima cosa)
[...]
Non sempre.
Immagina che una variabile possa assumere 3 valori; per controllarli
dovresti:
Con "If"
'...
if variabile=1 then
    msgbox "1"
else
    if variabile=2 then
        msgbox "2"
    else
        msgbox "3"
    end if
end if
'...
con "Select Case"
'...
Select Case Variabile
    case 1
        msgbox "1"
    case 2
        msgbox "2"
    case 3
        msgbox "3"
End Select
'...
Select case e' molto + elegante!
CiaoZ
SebaMix

 Non sempre.

anche a me in genere piace di piu',
pero' sopra potevi usare elseif
if variabile=1 then
     msgbox "1"
elseif variabile=2 then
      msgbox "2"
elseif variabile =3 then
     msgbox "3"
else 'anche con case in genere metto un case else. unsisammai...
     msgbox "else"
endif
ciao, a.

Ho provato il tuo codice e purtroppo non va:
Allora!
Il codice di cristina funziona benissimo :)
Intanto un po' di precisazioni:
KeyPress() rileva solo il codice ASCII dei tasti premuti (mai chiesto perchč
il parametro č KeyAscii e non KeyCode come nell'evento KeyDown()?), quindi
F1 non č un codice ASCII, quindi niente evento.
KeyDown()/KeyUp() intercettano il codice del TASTO, non del carattere!
E' semplicemente l'identificativo del tasto, un progressivo.
Con vbKeyReturn ti va di c..o perchč sia il codice ascii che il codice del
tasto del Return (vbCR) č 13.
E cosě anche per le lettere _MAIUSCOLE_ e i numeri NON del tastierino.
Occhio ad usare KeyDown(), perchč se trovi il tipico utonto finale che tiene
premuto il tasto 2 secondi ti trovi una cascata di eventi, qui č meglio
usare una KeyUp().
Al contrario non mettere una msgbox nella KeyUp() o sei rovinato.
Le msgbox scompaiono quando l'enter va giů, cosě quando lo rilasci te ne
verrebbe fuori un'altra e ti inluppi felicemente.
Adesso assicurati di aver messo Form.KeyPreview = True e riprova.
Ciao

Grazie a tutti.
Ho appena provato il codice di Cris corredato dalle istruzioni di Zanna ed č
tutto OK (molto utili i consigli sui vari eventi Key..).
Spero che questa 'parentesi' sui tasti Funzione (si chiamano cosě ?) sia
stata utile anche a qualche altro lettore del NG.
Vi saluto e ci sentiamo al prossimo dubbio (ne ho molti, ma per adesso mi
fermo qui!).
Ciao a tutti da MAX