Newsgroup: it.comp.lang.visual-basic
Titolo: Ottenere con ENTER la stessa funzionalità come TAB

C'e' un modo per ottenere la stessa funzionalità TAB (avanzamento al campo
successivo) premento il tasto ENTER ? ? ? ?
......fino ad adesso utilizzavo il metodo SENDKEYS:
If KeyAscii = 13 Then
      SendKeys "{TAB}"
      KeyAscii = 0
End If
.... ma con questo sistema ho 2 problemi:
1) Premendo molte volte l'enter, dopo un po' mi si spegne il NUMLOCK
2) Con Windows 2000 Professional dopo aver premuto l'enter alcune volte, si
blocca tutto (tastiera e programma)
AIUTOOOOOOOOOOOOOOOOOOOOOOOO

 ha scritto nel messaggio
news:ctPT6.30811$Uo3.1...@news6.giganews.com...



Questo sul mio win2k _sembra_ funzionare:
// dichiarazioni API
Private Const VK_TAB = &H9
Private Const KEYEVENTF_KEYUP = &H2
Private Declare Function SetFocus Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, _
                                               ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
// wrapper per l' api
Public Sub SendTab(ByVal a_hWnd As Long)
    SetFocus a_hWnd
    keybd_event VK_TAB, 0, 0, 0
    keybd_event VK_TAB, 0, KEYEVENTF_KEYUP, 0
End Sub
// utilizzo del wrapper
// N.B. l' evento in cui fare la chiamata e' il KeyUp
Private Sub Text1_KeyUp(Index As Integer, KeyCode As Integer, Shift As Integer)
    If (KeyCode = vbKeyReturn) Then SendTab Text1(Index).hwnd
End Sub
ciao, hal

 C'e' un modo per ottenere la stessa funzionalitą TAB (avanzamento al campo


 ha scritto nel messaggio
news:9fonal$5bmrc$1...@ID-56381.news.dfncis.de...


 ha scritto nel messaggio
news:ctPT6.30811$Uo3.1...@news6.giganews.com...

Prova così:
If KeyAscii = 13 then
        KeyAscii = vbKeyTab o VbTabKey
end if
Ciao
--
Timothy Redaelli
timothy.redae...@email.it
Togliere NONSPAMMARE per rispondere

 >     keybd_event VK_TAB, 0, KEYEVENTF_KEYUP, 0
Ovvero: premo tab, rilascio tab
Devi cambiare la sequenza in
premo shift
premo tab
rilascio tab
rilascio shift
La C define (che  nell'API viewer giustamente non c'e'...) e':
#define VK_SHIFT          0x10
Ciaotutti,
Asterix

codice devo usare al posto di &H9 ? ? ? ?
Ti ha gia' risposto correttamente *Alessandro* Asterix e mi sembra che a questo
punto avresti dovuto arrivarci da solo.
Comunque, sotto la firma ho postato il codice che prevede Control, Alt e Shift
da soli o combinati, cosi' tagliamo la testa al topo (il toro no, e' troppo grosso
e si incazza :)
ciao, hal
p.s.: non postare messaggi con subject tipo aiutooooo perche' a 
quelli generalmente non rispondo ;-)
========================================
--In un modulo:
// dichiarazioni API
Private Const VK_TAB = &H9
Private Const VK_SHIFT = &H10
Private Const VK_CONTROL = &H11
Private Const VK_MENU = &H12
Private Const KEYEVENTF_KEYUP = &H2
Private Declare Function SetFocus Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, _
                                               ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
// wrapper per l' api
Public Sub SendTab(ByVal a_hWnd As Long, ByVal a_Shift As Integer)
    SetFocus a_hWnd
    If ((a_Shift And vbCtrlMask) = vbCtrlMask) Then
        keybd_event VK_CONTROL, 0, 0, 0
    End If
    If ((a_Shift And vbShiftMask) = vbShiftMask) Then
        keybd_event VK_SHIFT, 0, 0, 0
    End If
    If ((a_Shift And vbAltMask) = vbAltMask) Then
        keybd_event VK_MENU, 0, 0, 0
    End If
    keybd_event VK_TAB, 0, 0, 0
    keybd_event VK_TAB, 0, KEYEVENTF_KEYUP, 0
    If ((a_Shift And vbCtrlMask) = vbCtrlMask) Then
        keybd_event VK_CONTROL, 0, KEYEVENTF_KEYUP, 0
    End If
    If ((a_Shift And vbShiftMask) = vbShiftMask) Then
        keybd_event VK_SHIFT, 0, KEYEVENTF_KEYUP, 0
    End If
    If ((a_Shift And vbAltMask) = vbAltMask) Then
        keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
    End If
End Sub
-- su un form contenente un array di textbox:
// utilizzo del wrapper
// N.B. l' evento in cui fare la chiamata e' il KeyUp
// i tasti modificatori vanno combinati in OR
// Ctrl+Alt diventa vbCtrlMask Or vbAltMask
Private Sub Text1_KeyUp(Index As Integer, KeyCode As Integer, Shift As Integer)
    If (KeyCode = vbKeyReturn) Then SendTab Text1(Index).hwnd, vbShiftMask
End Sub

 ha scritto nel messaggio
news:9g37a5$6slms$1...@ID-56381.news.dfncis.de...
