Power Builder - Es posible enviar un Shift+Tab en un Send Handle.

 
Vista:

Es posible enviar un Shift+Tab en un Send Handle.

Publicado por karpanta31 (4 intervenciones) el 09/06/2004 10:51:14
Hola a to2
mi pregunta es sencilla:
Es posible enviar un Shift+Tab en una Send Handle.

Salu2.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Es posible enviar un Shift+Tab en un Send Handl

Publicado por Oscar (1178 intervenciones) el 09/06/2004 19:19:34
Si es posible; pero necesitas declarar primero dos funciones externas y escribir un poco más de código, en vista que el SHIFT+TAB no es un simple valor ASCII.

* Enviar un TAB. Como todo el mundo sabe, es:

Send (Handle (this), 256, 9, 0)
//Puedes colocar luego: Return 1

* Enviar un SHIFT+TAB
1. Declaras en Local External Fuctions:
function boolean GetKeyboardState (ref char kbarray[256]) library "user32.dll"
function boolean SetKeyboardState (ref char kbarray[256]) library "user32.dll"

2. Script en el control DW:
char lc_kb[256]

GetKeyboardState (lc_kb)
lc_kb[17] = Char (128)
SetKeyboardState (lc_kb)

Send (Handle (this), 256, 9, 0)

GetKeyboardState (lc_kb)
lc_kb[17] = Char (0)
SetKeyboardState (lc_kb)

Nota: Estos ejemplos se tradujeron de una página en inglés y se probaron, creando un nuevo evento de usuario (PBM_DWNPROCESSENTER), y permite que la tecla ENTER funcione como TAB o caso contrario, como SHIFT+TAB (hacia atrás). Ve las teclas a las que puedes asignar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: TAB y SHIFT+TAB en DW (más de lo mismo)

Publicado por Oscar (1178 intervenciones) el 10/06/2004 07:09:26
Acá tienes otro ejemplo. Lo que hace es lo siguiente:
- La tecla: keyDownArrow! (se comportará como TAB)
- La tecla: keyUpArrow! (se comportará como SHIFT+TAB).

1. Declarar en global external function:
subroutine keybd_event(char VK, char Scan, ulong Flags, ulong ExtraInfo) library "user32.dll"

2. Declarar un evento de usuario en el control DW:
name: ue_key id: pbm_dwnkey

3. En este evento ue_key, colocar algo similar a:
choose case key
// Mapear up arrow a SHIFT+TAB
case keyUpArrow! //, keyLeftArrow!
keybd_event(char(16), char(42), 0, 0)
keybd_event(char(9), char(15), 0, 0)
keybd_event(char(9), char(15), 2, 0)
keybd_event(char(16), char(42), 2, 0)

// Mapear down arrow a TAB
case keyDownArrow! //, keyEnter!
keybd_event(char(9), char(15), 0, 0)
keybd_event(char(9), char(15), 2, 0)

//*** Tiene el mismo efecto que:
// Post(handle(this), 256, 9, 0)

// Poner cualquier tecla(s) que se quiere ignorar
case keyPageUp!, keyPageDown!, keyHome!, keyEnd!
// no hacer nada

case else
return // proceso por defecto
end choose

message.Processed = True
return 1
//-------Fin------------

Fuente: Yo Wei Tjong
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

o.k.

Publicado por karpanta (4 intervenciones) el 10/06/2004 18:49:30
Este último si ha funcionado. El anterior generaba errores de aplicación y se cerraba.

Gracias y salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar