Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL v3 (V3L10, Win32) (https://www.cobolforo.es/forumdisplay.php?f=5)
-   -   [Sintaxis] Detectar teclas de flechas (Sheet) (https://www.cobolforo.es/showthread.php?t=398)

Eslopes 5 de junio de 2016 12:53

Olá,

encontrei uma possível solução :)


Código COBOL:
  1.  ENVIRONMENT DIVISION.
  2.  DATA        DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01 INDICEKEY       PIC 9(03) VALUE 1.
  5.  01 keyBoard.
  6.     03 aKeyCode          PIC S9(09) COMP-5 VALUE 0.
  7.     03 keys PIC X(256).
  8.  
  9.  
  10.  
  11.  PROCEDURE   DIVISION.
  12.  
  13.      MOVE   0           TO  aKeyCode
  14.  
  15.      CALL  "GetKeyState"  WITH STDCALL  USING aKeyCode
  16.  
  17.      MOVE SPACES  TO  keys
  18.  
  19.      CALL   "GetKeyboardState"  WITH STDCALL  USING keys
  20.  
  21.      IF keys(38:1) > X"01"
  22.         DISPLAY "LEFT"
  23.      END-IF
  24.  
  25.      IF keys(39:1)  > X"01"
  26.         DISPLAY "UP"
  27.      END-IF
  28.  
  29.  
  30.      IF keys(40:1) > X"01"
  31.         DISPLAY "RIGHT"
  32.      END-IF
  33.  
  34.      IF keys(41:1) > X"01"
  35.         DISPLAY "DOWN"
  36.      END-IF

Agora posso terminar o jogo :cerv:

Gracias, Emerson

Kuk 5 de junio de 2016 16:32

Eslopes, para qué haces la llamada a "GetKeyState" si no usas su retorno después?

Eslopes 5 de junio de 2016 17:43

Olá,

de acordo com o post do forum abaixo, nem sempre o Windows faz um scan das teclas, então GetKeyState força este scan.


Cita:

I'v been using GetAsyncKeyState quite extensively without any issues. But if you follow the news groups, you'll realize that GetKeyboardState does have a quirk which is really not identified in the MS docs. The quirk is that the message processing can go out of synch based on how the messages are processed. In other words, Windows can sometimes avoid updating the keystate buffer if for some unknown reason it feels that updating the buffer is not necessary at times. Thus, the key state buffer may not be up to date and in sych with the input message queue. The news group folks recommend calling GetKeyState prior to calling GetKeyboardState to eliminate this potential problem.

GetKeyboardState() problem


Saludos, Emerson

Jovimabo 7 de junio de 2016 13:59

Hola, no estoy seguro si esta subrutina te pueda servir
Código:

CBL_READ_SCR_KEY
Consultala en el manual de CBL Subroutines
User’s Guide capitulo 11
Esto es de NetCOBOL CBL routines.

Eslopes 7 de junio de 2016 14:21

Olá, esta era minha primeira opção, mas o PowerCobol 3 não tem suporte para esta rotina, apenas a versão 4 em diante.

Todavia, a chamada à API que usei está funcionando perfeitamente. Ela poderia inclusive ser usada para criar uma rotina de entrada de dados, substituindo o uso de Textbox (pense no caso de uma aplicação de POS - Point Of Sale).

Saludos, Emerson

Eslopes 7 de junio de 2016 17:15

Uma outra coisa, a API detecta (e retorna) múltiplas teclas pressionadas, incluindo se estão em CAPS LOCK, ou se CONTROL, SHIFT ou mesmo se as teclas do mouse foram pressionadas. É um muito interessante mesmo.

Saludos, Emerson

Adrianeloy 9 de junio de 2016 16:37

Eslopes, tu rutina funciona a la perfección, aqui estan los codigos del resto de las teclas...
NOTA: para detectar una tecla con el ejemplo de Eslopes, debemos sumarle uno al código.

Código:

Código        Tecla
1        LButton
2        RButton
3        Cancel
4        Mbutton (no contigüo a L & RBUTTON)
8        Back 
9        Tab   
12        Clear 
13        Return
16        Shift 
17        Control
18        Menu 
19        Pause 
20        Capital
27        Escape
32        Space 
33        Prior 
34        Next 
35        End   
36        Home 
37        Left 
38        Up   
39        Right 
40        Down 
41        Select
42        Print 
43        Execute
44        SnapShot
44        Copy (no usada x teclado)
45        Insert
46        Delete
47        Help 
65-90        Teclas 'A' hasta 'Z'
97-122        Teclas 'a' hasta 'z'
45-57        Teclas '0' hasta '9'
96        NumPad0
97        NumPad1
98        NumPad2
99        NumPad3
100        NumPad4
101        NumPad5
102        NumPad6
103        NumPad7
104        NumPad8
105        NumPad9
106        Multiply
107        Add   
108        Separator
109        Subtract
110        Decimal
111        Divide
112        F1   
113        F2   
114        F3   
115        F4   
116        F5   
117        F6   
118        F7   
119        F8   
120        F9   
121        F10   
122        F11   
123        F12   
124        F13   
125        F14   
126        F15   
127        F16   
128        F17   
129        F18   
130        F19   
131        F20   
132        F21   
133        F22   
134        F23   
135        F24   
144        NumLock
145        Scroll



La franja horaria es GMT +2. Ahora son las 14:57.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.