ctrl+U - como la detecto?

Post Reply
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

ctrl+U - como la detecto?

Post by rolando »

Buenas noches,

Necesito, dentro de un diálogo, detectar cuando se haya pulsado la combinación de teclas "Ctrl + U" que antes usaba en Clipper (chr 21)

hago esto:

oDlg:bKeyDown := {|nK| if(nK==21, ...hacer una cosa... , ....hace otra cosa ) }

Pero siempre me detecta la primera de las dos que presiono (17 para Ctrol y 85 para U).

¿Como puedo hacerlo?.

Gracias.

Rolando :D
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

... if( nK == 85 .and. GetKeyState( VK_CONTROL ), ...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Post by rolando »

Buen día,

Gracias por responder pero, sigue sin funcionar.

para testear hice:

oDlg:bKeyDown := {|nK| if(nK == 85 .and. GetKeyState( VK_CONTROL ) , msginfo('21') , msginfo(str(nK)) ) }

Y siempre detecta el caracter 17.

¿Debo hacer una funcióna para esto o hay algo que me falta?

Gracias.

Rolando :D
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

El 85 es la U mayúscula. Usa entonces el 17:

{|nK| If( nK == 17 .and. GetKeyState( VK_CONTROL ), ...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Post by karinha »

Code: Select all

    DO CASE

       CASE ( nKey == Asc( "A" ) .OR. nKey == Asc( "a" ) ) .AND. ;
              GetKeyState( VK_CONTROL )
              ? 'Control+A-For Nilson'
       CASE ( nKey == Asc( "B" ) .OR. nKey == Asc( "b" ) ) .AND. ;
              GetKeyState( VK_CONTROL )
              ? 'Control+B-For Nilson'
       CASE ( nKey == Asc( "C" ) .OR. nKey == Asc( "c" ) ) .AND. ;
              GetKeyState( VK_CONTROL )
              ? 'Control+C-For Nilson'
       CASE ( nKey == Asc( "D" ) .OR. nKey == Asc( "d" ) ) .AND. ;
              GetKeyState( VK_CONTROL )
              ? 'Control+D-For Nilson'
       CASE ( nKey == Asc( "E" ) .OR. nKey == Asc( "e" ) ) .AND. ;
              GetKeyState( VK_CONTROL )
              ? 'Control+E-For Nilson'
       CASE ( nKey == Asc( "F" ) .OR. nKey == Asc( "f" ) ) .AND. ;
              GetKeyState( VK_CONTROL )
              ? 'Control+F-For Nilson'
       CASE ( nKey == Asc( "G" ) .OR. nKey == Asc( "g" ) ) .AND. ;
              GetKeyState( VK_CONTROL )
              ? 'Control+G-For Nilson'
       CASE ( nKey == Asc( "H" ) .OR. nKey == Asc( "h" ) ) .AND. ;
              GetKeyState( VK_CONTROL )
              ? 'Control+H-For Nilson'
       CASE ( nKey == Asc( "I" ) .OR. nKey == Asc( "i" ) ) .AND. ;
              GetKeyState( VK_CONTROL )
              ? 'Control+I-For Nilson'
       CASE ( nKey == Asc( "P" ) .OR. nKey == Asc( "p" ) ) .AND. ;
              GetKeyState( VK_CONTROL )
              ? 'Control+P-For Nilson'
       CASE ( nKey == Asc( "T" ) .OR. nKey == Asc( "t" ) ) .AND. ;
              GetKeyState( VK_CONTROL )
              ? 'Control+T-For Nilson'

       //CASE ( nKey == Asc( "Z" ) .OR. nKey == Asc( "z" ) ) .AND. ;
       //       GetKeyState( VK_CONTROL )
       //       ? 'Control+Z-For Nilson'

       CASE ( nKey == VK_INSERT  .AND. GetKeyState( VK_SHIFT   ) ) .OR. ;
            ( nKey == ASC( "V" ) .AND. GetKeyState( VK_CONTROL ) ) .OR. ;
            ( nKey == ASC( 'X' ) .AND. GetKeyState( VK_CONTROL ) )
            ? ' Multiplas-For Nilson'

       /*
       CASE nKey==VK_F12
              ? 'F12-For Nilson'
       */

       CASE ( nKey == VK_F2 .AND. GetKeyState( VK_CONTROL ) )
          ? 'Control+F2-For Nilson'
        // Acao(Action) do seu programa
       CASE ( nKey == VK_F3 .AND. GetKeyState( VK_CONTROL ) )
          ? 'Control+F3-For Nilson'
        // Acao(Action) do seu programa
       CASE ( nKey == VK_F4 .AND. GetKeyState( VK_CONTROL ) )
          ? 'Control+F4-For Nilson'
        // Acao(Action) do seu programa
       CASE ( nKey == VK_F5  .AND. GetKeyState( VK_CONTROL ) )
          ? 'Control+F5-For Nilson'
        // Acao(Action) do seu programa
       CASE ( nKey == VK_F6 .AND. GetKeyState( VK_CONTROL ) )
          ? 'Control+F6-For Nilson'
        // Acao(Action) do seu programa
       CASE ( nKey == VK_F7 .AND. GetKeyState( VK_CONTROL ) )
          ? 'Control+F7-For Nilson'
        // Acao(Action) do seu programa
       CASE ( nKey == VK_F8 .AND. GetKeyState( VK_CONTROL ) )
          ? 'Control+F8-For Nilson'
        // Acao(Action) do seu programa
       CASE ( nKey == VK_F9  .AND. GetKeyState( VK_CONTROL ) )
          ? 'Control+F9-For Nilson'
        // Acao(Action) do seu programa
       //CASE ( nKey == VK_F10 .AND. GetKeyState( VK_CONTROL ) )
       //   ? 'Control+F10-For Nilson'
          // Acao(Action) do seu programa
       CASE ( nKey == VK_F11 .AND. GetKeyState( VK_CONTROL ) )
          ? 'Control+F11-For Nilson'
          // Acao(Action) do seu programa
       CASE ( nKey == VK_F12 .AND. GetKeyState( VK_CONTROL ) )
          ? 'Control+F12-For Nilson'
          // Acao(Action) do seu programa

    ENDCASE
João Santos - São Paulo - Brasil
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Post by rolando »

Sigo con el mismo problema, ahora detecta apenas se presiona solamente la tecla ctrl.

Lo que necesito es que detecte cuando están ambas presionadas, CTRL y u.

Gracias.
Rolando :D
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Debería funcionarte así, como te ha mostrado Joao:

{|nK| If( ( nK == Asc( "u" ) ) .and. GetKeyState( VK_CONTROL ), ...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Post by rolando »

Gracias, por la tarde lo probaré ya que mi labor diaria me llama.

Rolando :roll:
JARO
Posts: 30
Joined: Thu Oct 25, 2007 7:54 pm

PRUEBA CON ESTO

Post by JARO »

rolando,
este codigo me funciona bien

#include "FiveWin.ch"
function Main()
local oDlg
DEFINE DIALOG oDlg TITLE "PRUEBA DE PULSACION DE TECLA"
ODLG:BKEYDOWN:={|NKEY|ULTTECLA(NKEY)}
ACTIVATE DIALOG oDlg CENTERED
return nil

FUNCTION ULTTECLA(NKEY)
// yo por si las "_" he anulado las teclas de combinación como
// ctrl en este caso
IF NKEY=17
RETURN NIL
ENDIF
IF NKEY=85 .AND. GetKeyState( 17 )
?"hola" // Aqui pones la funcion que quieras ejecutar
ENDIF
return nil

Espero que te sirva
User avatar
rolando
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Post by rolando »

Gracias, ya lo solucioné. Usé como base la función de Jaro que es algo similar a lo de Joao.

Rolando :D
Post Reply