Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol Fujitsu COBOL PowerCOBOL (ActiveX, v4 - v11)
PowerCOBOL (ActiveX, v4 - v11) Versiones del IDE basadas en ActiveX
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Sintaxis] Table: Control de teclas pulsadas (SHIFT+TAB) Begoguay PowerCOBOL (ActiveX, v4 - v11) 0 15 de julio de 2020 18:23
[Sintaxis] Teclas de desplazamiento Josber PowerCOBOL (ActiveX, v4 - v11) 6 1 de mayo de 2020 14:09
[Duda] Teclas de Funcion F13 - F24 jotica PowerCOBOL (ActiveX, v4 - v11) 6 8 de mayo de 2017 12:48
[Sintaxis] Detectar teclas de flechas (Sheet) Eslopes PowerCOBOL v3 (V3L10, Win32) 16 9 de junio de 2016 16:37

Respuesta
 
Herramientas

  #1
Antiguo 23 de mayo de 2019, 12:22
Begoguay
Forero
Última Actividad 21.08.2025 16:34
Posts Posts: 69
Likes enviados Enviados: 93
Likes recibidos Recibidos: 10
Predeterminado Control de teclas pulsadas
0 Inactivo Inactivo

Hola amigos foreros.

Me gustaría saber de que forma puedo controlar si se ha pulsado una combinación de teclas, para poderlo programar. Por ejemplo: Ctrl+F1, Shift+L, Alt+E

Un saludo.
Begoguay is offline   Responder Con Cita
  #2
Antiguo 23 de mayo de 2019, 12:31
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

Comprobando en el evento KeyDown, KeyPress o KeyUp el valor de la tecla pulsada con los siguientes valores:

Código:
[0] to [9] POW-KEY-0 to POW-KEY-9
[A] to [Z] POW-KEY-A to POW-KEY-Z
[Alt] POW-KEY-MENU
[Application Key] POW-KEY-APPS
[Back Space] POW-KEY-BACK
[Break] POW-KEY-CANCEL
[Caps Lock] POW-KEY-CAPITAL
[Clear] POW-KEY-CLEAR
[Ctrl] POW-KEY-CONTROL
[Del] POW-KEY-DELETE
[Down arrow] POW-KEY-DOWN
[End] POW-KEY-END
[Enter] POW-KEY-RETURN
[Esc] POW-KEY-ESCAPE
[F1] to [F24] POW-KEY-F1 to POW-KEY-F24
[Home] POW-KEY-HOME
[Ins] POW-KEY-INSERT
[Left arrow] POW-KEY-LEFT
[Left Windows Key] POW-KEY-LWIN
[Num Lock] POW-KEY-NUMLOCK
[Numeric pad * ] POW-KEY-MULTIPLY
[Numeric pad . ] POW-KEY-DECIMAL
[Numeric pad / ] POW-KEY-DIVIDE
[Numeric pad - ] POW-KEY-SUBTRACT
[Numeric pad + ] POW-KEY-ADD
[Numeric Pad 0] to
[Numeric Pad 9]
POW-KEY-NUMPAD0 to
POW-KEY-NUMPAD9
[Page Down] POW-KEY-NEXT
[Page Up] POW-KEY-PRIOR
[Pause] POW-KEY-PAUSE
[Print Screen] POW-KEY-SNAPSHOT
[Right arrow] POW-KEY-RIGHT
[Right Windows Key] POW-KEY-RWIN
[Scroll Lock] POW-KEY-SCROLL
[Shift] POW-KEY-SHIFT
[Space] POW-KEY-SPACE
[Tab] POW-KEY-TAB
[Up arrow] POW-KEY-UP
Un saludo.-
Josber is offline   Responder Con Cita
  #3
Antiguo 24 de mayo de 2019, 11:27
Begoguay
Forero
Última Actividad 21.08.2025 16:34
Posts Posts: 69
Likes enviados Enviados: 93
Likes recibidos Recibidos: 10

Gracias Josber.

Pero yo lo que quiero saber es en que evento, y como puedo indicar que cuando se pulsa, por ejemplo, Ctrl y Esc a la vez, que haga algo.

En las aplicaciones, en el evento PreKeyDown del formulario, compruebo que si se pulsa ESC, se salga del programa:
Código COBOL:
  1. IF    POW-ARG-KEYCODE = POW-KEY-ESCAPE
  2.        INVOKE POW-SELF "CloseForm"
  3.        EXIT PROGRAM
  4. END-IF

Entonces yo quiero que en lugar de ESCAPE, se salga al pulsar Ctrl+Esc

Y no se como ponerlo.

Un saludo
Begoguay is offline   Responder Con Cita
  #4
Antiguo 24 de mayo de 2019, 12:13
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

Citación del post de Begoguay Ver Mensaje
por ejemplo, Ctrl y Esc a la vez, que haga algo.
Igual tienes que buscar otra combinación de teclas, porque esa combinación por defecto, hace que se muestre la barra de inicio de Windows y, supongo, que eso primará sobre tu programa.

No he usado nunca una "consulta" de combinación de teclas pero, supongo que sera algo así como

Código COBOL:
  1.     IF    POW-ARG-KEYCODE = POW-KEY-CONTROL
  2.            IF POW-ARG-KEYCODE = POW-KEY-ESCAPE
  3.               INVOKE POW-SELF "CloseForm"
  4.               EXIT PROGRAM
  5.            END-IF
  6.     END-IF

El evento en el que lo usas es el correcto si quieres que eso suceda en cualquier momento del programa, si no es así, y lo quieres en un sitio en especial, tendrás que usar el evento KeyPress de el control que quieras.

Un saludo.-
Josber is offline   Responder Con Cita
  #5
Antiguo 24 de mayo de 2019, 19:24
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

Josber, no, porque el asunto se basa en eventos, cada evento ejecuta nueva instancia del código, con lo cual el mismo campo no puede tener 2 valores.

Begoguay, lo que necesitas es el evento KeyDown:

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  LINKAGE         SECTION.
  5.  01  POW-ARG-KEYCODE PIC S9(4) COMP-5.
  6.  01  POW-ARG-SHIFT   PIC S9(4) COMP-5.
  7.  PROCEDURE       DIVISION USING POW-ARG-KEYCODE POW-ARG-SHIFT.
  8.      
  9.      IF  POW-ARG-SHIFT = POW-SHIFTSTATE-CTRL AND
  10.          POW-ARG-KEYCODE = POW-KEY-ESCAPE
  11.          INVOKE POW-SELF "DisplayMessage" USING "Ctrl+Esc" 64
  12.      END-IF
  13.      

Cita:
KeyDown Event

Description:
Generated when a key is pressed and passed to the control that has the focus.

The KeyPress and KeyUp events are usually generated after the KeyDown event.

If a key is pressed and kept pressed, multiple KeyDown and KeyPress events are generated before a KeyUp event.

Note that if you press a toggle key (e.g. Caps Lock, Num Lock):

· The order of events may be changed.

· One of these events may not be generated.

To support special keystrokes, such as short-cuts, on the form, see the PreKeyDown.

...

Parameters:
  1. [VT_I4 – Index S9(9) COMP-5]
  2. VT_I2 – KeyCode S9(4) COMP-5
  3. VT_I2 – ShiftState S9(4) COMP-5

Description of parameters (with constants):
1. Index: When the control is part of an array, Index contains the control's index in the array.

2. KeyCode: The key code that was pressed. See Key Code Constants for details of key codes.

3. ShiftState: Bit mask settings indicate the state of each of the shift keys - Shift, Ctrl and ALT. Numbering the bits 1 to 8, from least significant to most significant, the bit mapping is:
1 - Shift key (POW-SHIFTSTATE-SHIFT)
2 - Ctrl key (POW-SHIFTSTATE-CTRL)
3 - Alt key (POW-SHIFTSTATE-ALT)
For example if the parameter has a value of 6 (binary 00000110), this indicates that the Ctl and Alt keys are depressed.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #6
Antiguo 25 de mayo de 2019, 12:06
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

Citación del post de Kuk Ver Mensaje
Josber, no, porque el asunto se basa en eventos, cada evento ejecuta nueva instancia del código, con lo cual el mismo campo no puede tener 2 valores.
Gracias Kuk, me imaginaba algo, pero como ya dije en el post anterior, nunca había tenido que utilizar una combinación de teclas, ahora ya lo tengo más claro.

Un saludo.-
Josber is offline   Responder Con Cita
  #7
Antiguo 28 de mayo de 2019, 21:08
Nitzer
Guru de COBOL
Activista del Foro: Activista del Foro - Issue reason: Por Videoconferencia-Webinar Guru de los Gurus: Por solidos y amplios conocimientos - Issue reason: Por aportar conocimientos excepcionales 
Última Actividad 05.08.2026 17:33
Posts Posts: 200
Likes enviados Enviados: 70
Likes recibidos Recibidos: 157

Yo también utilizo atajos de teclado para llamar a determinados procedimientos, lanzar menus, etc.

Pero "discrepo" algo de kuk (sin que sirva de precedente) jjjjjjj
En vez de utilizar keydown, mejor programarlo en keyup, con el keydown si la persona deja el dedo y no lo suelta, se puede ejecutar continuamente.

Que en algunos casos puede interesar, pero si queremos controlar solo una acción, veo mejor hacerlo en el up, yo al menos lo hago asi.

Tambien tengo un truco en mi aplicación

Pulsando con el botón derecho del ratón sobre una imagen y el botón shift pulsado entras en el modo DIOS ))))
Nitzer is offline   Responder Con Cita
  #8
Antiguo 29 de mayo de 2019, 21:20
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

Citación del post de Nitzer Ver Mensaje
mejor programarlo en keyup
¡Totalmente de acurdo!
Si tienes el rango de Guru en este foro, es por algo!!! Parece una tontería, pero claramente es mejor para el rendimiento de la aplicación.
Ejecutar eventos en vano consume CPU para nada.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #9
Antiguo 22 de agosto de 2024, 18:19
lumalma
Forero Junior
Última Actividad 13.08.2026 16:57
Posts Posts: 25
Likes enviados Enviados: 7
Likes recibidos Recibidos: 3

Buenas tardes
Tengo un textbox en el que tengo que controlar que se introduzca unas letras concretas (de la A a la D) y en función de la letra realizar unas acciones u otras. Quiero controlar que solo se puedan introducir estas letras y si se introduce otro carácter hay que dejar el textbox vacío. Yo lo había intentado con los eventos KeyPress (controlando que lo introducido eran de la A a la D) y Change para ejecutar las acciones después de introducir la letra pero no conseguía que funcione bien ya que al introducir una tecla no válida pongo un espacio y queda un poco raro ya que para borrarlo debo seleccionar el espacio y pulsar la tecla suprimir.
Según he leído lo mejor es hacerlo en el evento KeyUp. Pero si en lugar de teclear pego el carácter con el ratón (botón derecho->pegar) lógicamente no se ejecuta el evento KeyUp. No se como resolver y agradeceré cualquier ayuda.

Muchas gracias

Un saludo
lumalma is offline   Responder Con Cita
  #10
Antiguo 22 de agosto de 2024, 19:51
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

@lumalma, no se me ha ocurrido probarlo pero, podrías comprobar en el evento MouseUp de ese objeto, con un INSPECT, que no se haya introducido nada distinto de esos carácteres. Es parecido a todo lo anterior, pero cambiando el evento.

Un salu2.-
Josber is offline   Responder Con Cita
Respuesta



Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:14.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.