Detectar teclas FLECHAS avpag y repag, dialogo

Detectar teclas FLECHAS avpag y repag, dialogo

Postby noe aburto » Thu Jun 04, 2015 10:41 pm

Saludos:

Mis estimados, como podre saber en un dialogo definido, cuando oprimo las flechas: arriba, abajo, izq, der, o RePag, AvPag
cuando escribo:

oDlg:bKeyDown:={|nOpc|PintaPantalla(aVent,nOpc)}

cada que oprimo una tecla normal: letras y numeros y signos va y ejecuta PintaPantalla(...) y alli segun la tecla oprimida realiza una accion. PERO NO IDENTIFICA LAS FLECHAS Y AVANCES DE PAGINA

alguna sugerencia?
Noé Aburto Sánchez
Tec. Prog. de Sistemas. -Morelia, Mich. México.
fwh 20.06, Harbour 3.2.0, bcc 7.4
TsBrowse 9.0, TsButton 7.0, xEdit 6.1
naburtos@gmail.com, noeaburto67@hotmail.com
User avatar
noe aburto
 
Posts: 418
Joined: Wed Nov 26, 2008 6:33 pm
Location: Morelia, Mich. Mexico.

Re: Detectar teclas FLECHAS avpag y repag, dialogo

Postby Antonio Linares » Fri Jun 05, 2015 5:57 am

Prueba con

oDlg:bKeyChar := {|nOpc|PintaPantalla(aVent,nOpc)}
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Detectar teclas FLECHAS avpag y repag, dialogo

Postby colthop » Fri Jun 05, 2015 6:01 am

Hola Noe:

Yo para poder hacer algo similar en mis programas modifique en la clase TGet.prg el METHOD KeyDown, porque yo tengo activado un GET cuando quiero que me funcionen distinto esas teclas.
Puse una variable publica zGetKey y según quería que hiciese una cosa u otra le daba un valor. Así lo deje.

Code: Select all  Expand view
METHOD KeyDown( nKey, nFlags ) CLASS TGet

   local nHi, nLo, nPos, nLastHi := -1, uVal

   ::nLastKey = nKey

   if ::bKeyDown != nil
      if ValType( uVal := Eval( ::bKeyDown, nKey, nFlags, Self ) ) == "N" .and. ;
         uVal == 0
         return 0
      endif
   endif
   do case
        case nKey == VK_TAB .or. nKey == VK_RETURN
          do case
            case zGetKey = 1

            case zGetKey = 2
              derecha()
            case zGetKey = 3
              if zControl < 41 .OR. zControl = 43 .OR. zControl = 44 .OR. zControl = 45
                abajof()
              else
                derechaf()
              endif
            case zGetKey = 4
              if zControl < 38 .OR. zControl = 40 .OR. zControl = 41 .OR. zControl = 42
                abajadfa()
              else
                dereadfa()
              endif
          endcase
        case nKey == VK_PRIOR
           do case
             case zGetKey = 1
               if ::lSpinner
                 Self--
               endif
             case zGetKey = 2
               antediar()
             case zGetKey = 3
               antefact()
             case zGetKey = 4
               anteadfa()
           endcase

        case nKey == VK_NEXT
           do case
             case zGetKey = 1
               if ::lSpinner
                 Self++
               endif
             case zGetKey = 2
               sigudiar()
             case zGetKey = 3
               sigufact()
             case zGetKey = 4
               siguadfa()
           endcase

      case nKey == VK_UP
           do case
             case zGetKey = 1
               if Len( ::oWnd:aControls ) > 1
                 ::oWnd:GoPrevCtrl( ::hWnd )
                 return 1   // avoid default behavior
               endif
             case zGetKey = 2
               arriba()
             case zGetKey = 3
               arribaf()
             case zGetKey = 4
               arriadfa()
           endcase
      case nKey == VK_DOWN
           do case
             case zGetKey = 1
               if Len( ::oWnd:aControls ) > 1
                   ::oWnd:GoNextCtrl( ::hWnd )
                   return 1
               endif
             case zGetKey = 2
               abajo()
             case zGetKey = 3
               abajof()
             case zGetKey = 4
               abajadfa()
           endcase
      case nKey == VK_LEFT
          do case
             case zGetKey = 1
               if ::oGet:buffer != nil .and. ::nPos >= Len( ::oGet:buffer )
                  ::GetSelPos( @nLo, @nHi )
                  ::oGet:Pos = nLo + 1
                  ::nPos := nLo + 1
               endif
               if GetKeyState( VK_CONTROL )
                  ::oGet:WordLeft()
               else
                  ::oGet:Left()
                  #ifndef __XHARBOUR__
                     ::nPos--
                     ::oGet:Pos := ::nPos
                  #endif
               endif
               ::oGet:Pos = Max( ::oGet:Pos, 1 )
               while .t.
                  CallWindowProc( ::nOldProc, ::hWnd, WM_KEYDOWN, nKey, nFlags )
                  ::GetSelPos( @nLo, @nHi )
                  if nLo <= ::oGet:Pos - 1
                     EXIT
                  endif
               end
               ::nPos = nLo + 1
               if ::nPos < ::oGet:Pos
                  #ifndef __XHARBOUR__
                     ::SetPos( ::oGet:Pos-1 )
                  #else
                     ::SetPos( ::oGet:Pos )
                  #endif
               else
                  ::oGet:Pos = ::nPos
               endif
               if ::oBtn != nil
                  ::oBtn:Refresh()
               endif
               return 0
             case zGetKey = 2
               izquierda()
             case zGetKey = 3
               izquierdaf()
             case zGetKey = 4
               izquadfa()
           endcase


      case nKey == VK_RIGHT
          do case
             case zGetKey = 1
               nPos = ::oGet:Pos
               if GetKeyState( VK_CONTROL )
                  ::oGet:wordRight()
               else
                  ::oGet:right()
               endif
               if nPos <> ::oGet:Pos
                  while .t.
                     CallWindowProc( ::nOldProc, ::hWnd, WM_KEYDOWN, nKey, nFlags )
                     ::GetSelPos( @nLo, @nHi )
                     if nHi + 1 >= ::oGet:Pos .or. ::lPassword .or. ;
                        nHi == nLastHi
                        EXIT
                     endif
                     nLastHi = nHi
                  end
                  ::oGet:Pos = nHi + 1
                  ::nPos     = nHi + 1
               elseif nPos == Len( ::oGet:buffer )
//                  ::nPos++
//                  ::oGet:Pos := ::nPos
                  ::GetSelPos( @nLo, @nHi )
                  ::oGet:Pos = nLo + 1
                  ::nPos := nLo + 1
                  CallWindowProc( ::nOldProc, ::hWnd, WM_KEYDOWN, nKey, nFlags )
               endif
               if ::oBtn != nil
                  ::oBtn:Refresh()
               endif
               return 0
             case zGetKey = 2
               derecha()
             case zGetKey = 3
               derechaf()
             case zGetKey = 4
               dereadfa()
           endcase
                                          // Many thanks to HMP
      case nKey == VK_INSERT .and. ! GetKeyState( VK_SHIFT ) ;
           .and. ! GetKeyState( VK_CONTROL )   // to copy to the clipboard

           do case
             case zGetKey = 1
               Set( _SET_INSERT, ! Set( _SET_INSERT ) )
               DestroyCaret()
               if Set( _SET_INSERT )
                  CreateCaret( ::hWnd, 0, 6, ::nGetChrHeight() - 1 )
               else
                  CreateCaret( ::hWnd, 0, 2, ::nGetChrHeight() )
               endif
               ShowCaret( ::hWnd )
               return 0
             case zGetKey = 2

             case zGetKey = 3
               altafact()
             case zGetKey = 4

           endcase


      case ( nKey == VK_INSERT .and. GetKeyState( VK_SHIFT ) ) .or. ;
           ( nKey == ASC("V") .and. GetKeyState( VK_CONTROL ) ) .or. ;
           ( nKey == ASC('X') .and. GetKeyState( VK_CONTROL ) ) .and. ;
           ! lAnd( nFlags, 2 ** 29 )

          if ! ::lReadOnly
             CallWindowProc( ::nOldProc, ::hWnd, WM_KEYDOWN, nKey, nFlags )
             SysRefresh()
             if ValType( ::oGet:buffer ) = "C"
                ::oGet:buffer = Pad( GetWindowText( ::hWnd ), Len( ::oGet:buffer ) )
                SetWindowText( ::hWnd, ::oGet:buffer )
             else
                ::oGet:buffer = GetWindowText( ::hWnd )
             endif
             ::oGet:Assign()
             // ::GetSelPos( @nLo, @nHi )
             // ::nPos = nHi + 1
             // ::oGet:Pos = ::nPos
             if ::bChange != nil
                Eval( ::bChange, nKey, nFlags, Self )
             endif
          endif

          return 0

      case nKey == VK_HOME .or. nKey == VK_END

           if GetKeyState( VK_SHIFT )
              CallWindowProc( ::nOldProc, ::hWnd, WM_KEYDOWN, nKey, nFlags )

              ::GetSelPos( @nLo, @nHi )
              ::oGet:Pos = nLo + 1
              ::nPos = nLo + 1
           else
               if nKey == VK_HOME
                  ::oGet:Home()
                  ::SetPos( ::oGet:Pos )
               endif

               if nKey == VK_END
                  ::oGet:End()
                  if ::oGet:Pos == len( ::oGet:buffer )
                     ::SetPos( ::oGet:Pos + 1)
                  else
                     ::SetPos( ::oGet:Pos )
                  endif
               endif
           endif
           if ::oBtn != nil
              ::oBtn:Refresh()
           endif
           return 0

      case nKey == VK_DELETE .or. nKey == VK_BACK

           if ::lReadOnly
              return 0
           endif

           if ::lDrag
              return ::Super:KeyDown( nKey, nFlags )
           endif

           ::GetSelPos( @nLo, @nHi )

           // Deletes selection
           if nHi != nLo
              ::GetDelSel( nLo, nHi )
              if GetKeyState( VK_SHIFT )
                 CallWindowProc( ::nOldProc, ::hWnd, WM_KEYDOWN, nKey, nFlags )
              endif
           else
              if nKey == VK_DELETE
                 #ifndef __XHARBOUR__
                    if ::nPos > len( ::oGet:buffer )
                       return 0
                    endif
                 #endif
                 ::oGet:Delete()
              else
                 #ifndef __XHARBOUR__
                    if ::nPos > len( ::oGet:buffer )
                       ::oGet:Delete()
                    else
                       ::oGet:BackSpace()
                    endif

              endif
           endif
           ::EditUpdate()
           if ::bChange != nil
              Eval( ::bChange, nKey, nFlags, Self )
           endif

           return 0

                 #else
                 ::oGet:BackSpace()
              endif
           endif
           ::EditUpdate()
           if ::bChange != nil
              Eval( ::bChange, nKey, nFlags, Self )
           endif
           return 0
                 #endif

   endcase

return ::Super:KeyDown( nKey, nFlags )


Con el valor 1 hacia lo que tiene estipulado por defecto, con valor 2 ejecuta FUNCTIONS del diario de apuntes, con valor 3 ejecuta FUNCTION de Ingresos y Gastos y con valor 4 ejecuta FUNCTION del histórico.

Si tu estas escribiendo supongo que será en un GET por lo que te puede valer adaptándolo a tus necesidades.

Un saludo

Carlos
Colt Hop ED, S.L.
Carlos Blas Fernández Domínguez
Tlfo: 645847093
E-Mail: carlos@colthop.es

Nunca se termina de aprender, por eso necesito siempre ayuda.
colthop
 
Posts: 505
Joined: Sat Apr 22, 2006 9:09 am
Location: Madrid - España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 62 guests