Newsgroup: it.comp.lang.visual-basic
Titolo: [?] keypress, up, down

Option Explicit
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If chkKeyDown Then
        lblEvent = "KeyDown"
        lblKeyCode = "KeyCode: " & KeyCode
        lblShift = "Shift: " & Shift
    End If
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
    If chkKeyPress Then
        lblEvent = "KeyPress"
        lblKeyAscii = "KeyAscii: " & KeyAscii
    End If
End Sub
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    If chkKeyUp Then
        lblEvent = "KeyUP"
        lblKeyCode = "KUP-KeyCode: " & KeyCode
        lblShift = "KUP-Shift: " & Shift
    End If
End Sub
nel form keypreview e' true, e c'e' anche una flexgrid.
guardando cosa succede nei vari casi, direi che le frecce vengano
interpretate per spostarsi fra i vari controlli. se clicco un chek e poi
muovo freccia giu', il fuoco passa al chek successivo.
c'e' modo di intercettare i tasti di direzione ?
grazie, a.

Ciao,
se non ti interessano i codici ascii 37 38 39 40 li intercetti nell'evento
keydown del form:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
        Case 37
        '//Faccio quello che mi serve
        Case 38
        '//Faccio quello che mi serve
        Case 39
        '//Faccio quello che mi serve
        Case 40
        '//Faccio quello che mi serve
    End Select
    '//annullo l'effetto del tasto premuto
    KeyCode = 0
End Sub
beppe
-----------------------------------------------------------
Visita il sito del WWF AltoFerrarese
http://www.comune.cento.fe.it/wwfaf
-----------------------------------------------------------

 Option Explicit


 keydown del form:
grazie, ho modificato la sub, ma c'e' qualcosa che continua a non tornarmi
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If chkKeyDown Then
        lblEvent = "KeyDown"
        lblKeyCode = "KeyCode: " & KeyCode
        lblShift = "Shift: " & Shift
        Select Case KeyCode
            Case 4, 5, 19, 24
                MsgBox KeyCode
        End Select
        'KeyCode = 0
    End If
End Sub
i codici dovrebbero essere gli ascii delle frecce.
non mi arriva nessun msgbox, e nel lblkeycode non cambia nulla (mentre
cambia se premo ins, canc, pgup, ecc.).
ciao, a.

Ciao,
il problema è nei codici ascii che utilizzi, le frecce corrispondono a
37,38,39,40
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'    If chkKeyDown Then
        lblEvent = "KeyDown"
        lblKeyCode = "KeyCode: " & KeyCode
        lblShift = "Shift: " & Shift
        Select Case KeyCode
            Case 37, 38, 39, 40
                MsgBox KeyCode
        End Select
        'KeyCode = 0
'    End If
End Sub


 37,38,39,40
beppe, grazie, ma avevo gia' provato coi tuoi codici e non va.
dubbio... ...no, neanche togliendo la flexgrid. se clicco un chek e poi do'
freccia giu', nessun msgbox, si sposta sul chek successivo.
ciao, a.
ps - comincio a incasinarmi:
37-40 se li faccio con alt + fn + numerici mi danno:
% & ' (
allora la serie keycode a cosa corrisponde ?

 allora la serie keycode a cosa corrisponde ?
i keycode non centrano niente con i codici ascii (altrimenti sarebbero
interceddabili anche dal keypress).
Corrispondono invece ai codici della Virtual-Key Table che windows associa
ad ogni applicazione come mappatura dello stato della tastiera e del mouse.
Questa è un array di 256 byte in cui ogni elemento rappresenta lo stato di
un tasto; il keycode del VB si riferisce alla posizione ordinale in questa
tabella (per uniformità sarebbe meglio gestirli in esadecimale)
da cui:
Symbolic constant name        Value (hexadecimal)        Mouse or keyboard
equivalent
VK_LBUTTON                   01                                  Left mouse
button
VK_RBUTTON                   02                                 Right mouse
button
VK_CANCEL                     03
Control-break processing
VK_MBUTTON                  04                                 Middle mouse
button (three-button mouse)
-                                           05-07
Undefined
VK_BACK                          08
BACKSPACE key
VK_TAB                              09                                 TAB
key
-                                           0A-0B
Undefined
VK_CLEAR                         0C                                CLEAR key
VK_RETURN                      0D                                 ENTER key
-                                           0E-0F
Undefined
VK_SHIFT                          10                                  SHIFT
key
VK_CONTROL                  11                                  CTRL key
VK_MENU                         12                                  ALT key
VK_PAUSE                        13                                   PAUSE
key
VK_CAPITAL                     14                                  CAPS LOCK
key
-                                          15-19
Reserved for Kanji systems
-                                           1A
Undefined
VK_ESCAPE                      1B                                  ESC key
-                                          1C-1F
Reserved for Kanji systems
VK_SPACE                        20
SPACEBAR
VK_PRIOR                         21                                   PAGE
UP key
VK_NEXT                          22                                   PAGE
DOWN key
VK_END                            23                                   END
key
VK_HOME                         24                                   HOME
key
VK_LEFT                           25                                   LEFT
ARROW key
VK_UP                               26                                   UP
ARROW key
VK_RIGHT                         27                                   RIGHT
ARROW key
VK_DOWN                       28                                    DOWN
ARROW key
ect...
Questo per siegarti cosa sono ma, sinceramente non ho ben capito qual'è il
tuo problema.
Ciao.
--
Princi, 
princ...@programmer.net
----------------------------------------------------------------------
"Tutti sanno che una cosa è impossibile da realizzare,
finché arriva uno sprovveduto che non lo sa e la inventa." A.E.

 wrote in message
9akag3$5lnvg$1...@ID-51318.news.dfncis.de...


 c'e' modo di intercettare i tasti di direzione ?
direttamente dalla guida del VB:
Proprietà KeyPreview
Nota   Alcuni controlli intercettano gli eventi della tastiera in modo che
il form non sia in grado di riceverli.
che poi è proprio il caso dei checkbox, listbox ed altri controlli con i
tasti di direzione. :-(
hai provato ad agganciarli direttamente nel evento keydown dei singoli
controlli?


 controlli?
grazie a te e a beppe per l'aiuto.
in effetti, togliendo i chek _e_ il flexgrid, i msgbox arrivano.
il problema, per rispondere all'altro post, non era direttamente mio. mi era
rimasta in mente una cosa chiesta da *alessandro* al riguardo, relativa
proprio al flexgrid, la stessa domanda e' riapparsa oggi fatta da qualcun
altro. cosi' ho provato a vedere cosa succedeva.
sembra proprio che con un flexgrid si debba escogitare qualcos'altro per
intercettare le frecce. non e' il massimo della linearita', ma sapendolo...
grazie ancora e ciao, a.

 altro. cosi' ho provato a vedere cosa succedeva.
Ciao,
speravo che alla fine *Alessandro* avesse risolto, in effetti anch'io ero
interessato al caso ma ho perduto il thread.
Se qualcuno ha una soluzione sarebbe bene "pubblicarla" :-)
Magari domattina ci provo...
Ciao.
--
Princi, 
princ...@programmer.net


 Magari domattina ci provo...
hai provato col sistema suggerito da buc in questio thread ?
ciao, a.

 hai provato col sistema suggerito da buc in questio thread ?
Non funzionerebbe con le listbox e la flex.
Il problema non è affatto semplice: qualsiasi codice lo devi inserire in un
evento, ma se l'evento non ce l'hai?
Ed io continuo a non volerne sapere di subclassing!


 Ed io continuo a non volerne sapere di subclassing!
Tranquillo, subclassa quel che vuoi ke non funzia lo stesso :)
Ciaotutti,
Alessandro

 Ciao.
Ecco cosa ha trovato *Alessandro*:
PRB: FlexGrid Control Doesn't Trap Arrow Keys
Q171733
[...]
RESOLUTION
There are no workarounds at this time.
STATUS
This behavior is by design.
[...]
Firmato,
(per) William H. Gates, III
Questo chiude il discorso.
Ma ne apre un altro: come cacchio fa M$ a intercettare i tasti di un
componente subclassato?? E perche' se possono farlo loro non posso farlo io?
Qualcuno ne sa nulla?
Ciaotutti,
Asterix