PDA

Ver la Versión Completa : Lanzar evento OnKeyDown


papulo
08-06-2006, 11:40:45
Será una chorrada, seguro, pero hasta que no me lo expliquen y/o lo entienda seguirá siendo un misterio total.

El caso es que para lanzar el "onkeypress" en medio de otro proceso, me pide que le pase 3 variables.

cboxLaquesea.OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState)

Sender supongo que será "self" ya que es el mismo quien se activa.
Key tendría que ser "VK_ESCAPE" ya que es la tecla que quiero "pulsar".
Shift, aunque en la ayuda que pone que es el estado de las teclas ALT,CTL y demá, no tengo ni puñetera idea de como se utiliza.
¿Alguien me lo aclara?

Gracias muchas y esas cosas que se dicen,
Papulo.

Yosuun
08-06-2006, 12:04:25
Extraido de la ayuda delphi.

TShiftState indicates the state of the Alt, Ctrl, and Shift keys and the mouse buttons.
Unit
Classes
type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);
Description
The TShiftState type is used by key-event and mouse-event handlers to determine the state of the Alt, Ctrl, and Shift keys and the state of the mouse buttons when the event occurs. It is a set of flags that indicate the following:
Value Meaning
ssShift The Shift key is held down.
ssAlt The Alt key is held down.
ssCtrl The Ctrl key is held down.
ssLeft The left mouse button is held down.
ssRight The right mouse button is held down.
ssMiddle The middle mouse button is held down.
ssDouble The mouse was double-clicked.

Espero que te sea de ayuda un saludo.

papulo
08-06-2006, 12:06:50
Gracias, copañerow, pero esto ya lo había leido y no entiendo como poner el maldito shift del averno.

Solo quiero generar el evento OnKeyPress con la tecla VK_ESCAPE, pero lo del Shift no se como usarlo.

Aun así, gracias por pararte a responder.

Papulo.

Neftali [Germán.Estévez]
08-06-2006, 12:13:50
Shift, aunque en la ayuda que pone que es el estado de las teclas ALT,CTL y demá, no tengo ni puñetera idea de como se utiliza.
¿Alguien me lo aclara?

Se supone que son las teclas que se están pulsando junto con la que envías.
Si envías la tecla 'A' y en Shift envías [ssAlt], le estás diciendo que pulsan ALT+A. No tiene más complicación.

papulo
08-06-2006, 12:21:17
Veamos, que con cada respuesta me siento mas incomprendido... :D

Si yo estoy escribiendo algo de código en el evento "OnChange" de un elemento X y veo que necesito llamar al evento "OnKeyDown" del elemento Y , para que lo lance simulando que he apretado la tecla ESCAPE.

¿Como demonios escribo tan sencilla operación con la tecla ESCAPE?

Porque llamando por ejemplo el evento bitbtn1Click(Self) no tengo ningún problema, pero con el otro evento no se que parametros pasarle, porque en la ayuda si entiendo lo del Shift, pero no quiero pasarle ninguna tecla "extra" apretada :confused:

Espero haberme explicado mejor y gracias por la ayuda.

papulo.

PD: Os prometo que lo primero que he hecho ha sido mirarme la ayuda, pero me ha dejado igual de confuso :confused:

Casimiro Notevi
08-06-2006, 12:49:11
así, sin mirarlo, de memoria, casi seguro que me equivoco, tengo que consultarlo, pero prueba pasando [] los corchetes

papulo
08-06-2006, 12:56:59
Juso lo acababa de mirar al ver mas detenidamente la respuesta de Nefftali, estaba ahí escondida, jajaja.

Lo malo de la ayuda es que en el ejemplo no se ve un cagarro y sinceramente, sin experiencia previa, no se como demonios se puede saber eso.

Al final lo he tenido que hacer de la siguiente manera, porque tenía problemas con VK_ESCAPE y su tipo:


var
esc : word
begin
...
esc := VK_ESCAPE;
componente.OnKeyDown(self, esc, []);
...
end;


Sino, no se como pasarle la tecla directamente en vez de a traves de una variable del tipo que necesita.

Gracias por la ayuda a todos,
Papulo.

Yosuun
08-06-2006, 12:57:40
No se si te estoy entendiendo bien, creo que lo que quieres hacer es mandar una pulsacion de una tecla a otro control, si es asi haz la busqueda de la palabra SendMessage en el foro y veras un mesaje de hace no mas de 5 o 6 dias en el que tratan el tema.

Un Saludo.

papulo
08-06-2006, 12:59:03
Voy a mirar eso, que a lo mejor me ahorro unos cuantos quebraderos de cabeza... jejejeje.:)

Neftali [Germán.Estévez]
08-06-2006, 13:06:26
...porque en la ayuda si entiendo lo del Shift, pero no quiero pasarle ninguna tecla "extra" apretada

Puesto que el tipo indicado en un set:
type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);

basta con [].

papulo
08-06-2006, 13:07:59
Ale, cosa nueva del día que aprendo.

ASIAAAAAAAAAAAASSSSSSSSSSSSSSSSSSSSSSSS.:D