PDA

Ver la Versión Completa : Saber si una tecla esta pulsada?


fefe13
01-02-2006, 17:59:30
Como puedo saber si una tecla esta pulsada?Mi objetivo es que cuando se pulse la tecla una variable se vuelva a false.Creia que era if ... in shift then,pero por lo visto.Si alguien puede ayudarme.Graciasss

Neftali [Germán.Estévez]
01-02-2006, 18:07:10
Deberías explicar mejor en qué momento quieres detectar eso. Puede ser diferente dependiendo de en qué momento quieras detectarlo.
¿En un evento? ¿En un form? ¿Al realizar una acción? ¿en un componente?

Si añades el código que has probado será más fácil ayudarte.

roman
01-02-2006, 18:07:43
Creia que era if ... in shift then,


Creiste que era esto ¿dónde?


pero por lo visto.Si alguien puede ayudarme.Graciasss

Por lo visto ¿qué? ¿Es necesario ser tan telegráfico?

// Saludos

Palmiro
01-02-2006, 20:19:42
hola he leido tu pregunta... he aqui te paso algunos procedimiento, puede que te siervan como ami....
-------------------------------------------------------------------

procedure TForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_NUMLOCK then
case (GetKeyState(VK_NUMLOCK) + 127) of
0: ShowMessage('Activo'); // Permite usar el teclado numérico
-1: ShowMessage('Inactivo'); // Sólo funciona las teclas cursoras
end;
end;

if GetKeyState(VK_CAPITAL) = 1 then
bEstado.Panels[8].Text := rsBloqMayus
else
bEstado.Panels[8].Text := '';

if GetKeyState(VK_NUMLOCK) = 1 then
bEstado.Panels[9].Text := rsBloqNum
else
bEstado.Panels[9].Text := '';

if GetKeyState(VK_SCROLL) = 1 then
bEstado.Panels[10].Text := rsScrolLock
else
bEstado.Panels[10].Text := '';

procedure TMain.KeyState();
begin
If GetKeyState(VK_NUMLOCK) = 1 Then
StatusBar.Panels[2].Style:= psText
else
StatusBar.Panels[2].Style:= psOwnerDraw;

If GetKeyState(VK_CAPITAL) = 1 Then
StatusBar.Panels[3].Style:= psText
else
StatusBar.Panels[3].Style:= psOwnerDraw;

If GetKeyState(VK_SCROLL) = 1 Then
StatusBar.Panels[4].Style:= psText
else
StatusBar.Panels[4].Style:= psOwnerDraw;
end;

procedure TMain.KeyPressed(Key: DWORD);
begin
If Key = VK_NUMLOCK then
if (GetKeyState(VK_NUMLOCK) + 127) = 0 Then
StatusBar.Panels[2].Style:= psText
else
StatusBar.Panels[2].Style:= psOwnerDraw;

If Key = VK_CAPITAL then
if (GetKeyState(VK_CAPITAL) + 127) = 0 Then
StatusBar.Panels[3].Style:= psText
else
StatusBar.Panels[3].Style:= psOwnerDraw;

If Key = VK_SCROLL then
if (GetKeyState(VK_SCROLL) + 127) = 0 Then
StatusBar.Panels[4].Style:= psText
else
StatusBar.Panels[4].Style:= psOwnerDraw;
end;

Sinonimo
02-02-2006, 01:47:03
Deberías explicar mejor en qué momento quieres detectar eso. Puede ser diferente dependiendo de en qué momento quieras detectarlo.
¿En un evento? ¿En un form? ¿Al realizar una acción? ¿en un componente?

Si añades el código que has probado será más fácil ayudarte.

Coincido plenamente. Es necesario que seas más específico para así poder ayudarte. Entiendo que tal vez quieras detectarlo dentro de un editbox, si verificas las propiedades de estos elementos, te darás cuenta que tienen al menos 3 procedimientos para manejar los eventos de teclas presionadas.
Espero encontrar mayor información para dar una respuesta más acertada.

Jonnathan
02-02-2006, 03:30:56
Buen dia fefe.
Creia que era if ... in shift then,pero por lo visto...
if ... in shift? en el evento onKeyPress? algo asi como tratar de saber si estan presionadas las teclas Alt, Ctrl o Mayuscula?
Te va a sonar como disco rayado pero debes poner mas datos acerca de tu problema o lo que quieres hacer. Si le dedicas un poquito de tiempo a explicarnos bien, le dedicaremos tiempo a tu pregunta.

Estamos dispuestos a ayudar pero necesitamos toda la informacion posible.

fefe13
02-02-2006, 16:10:51
El procedure de palmiro me ha ayudado bastante pero no se q es bEstado,sera una variable me imagino,pero no se el tipo?Alguien sabe algo'?Gracias

roman
02-02-2006, 16:53:57
¡Por favor! Ya somos cuatro personas que te indicamos que seas más específico. ¿En qué forma te ha servido lo que escribió Palmiro?

// Saludos

fefe13
02-02-2006, 16:57:57
Intentare ser mas especifico:aora estoy utilizando el procedimiento tshiftstate.Parece que puede tener valores como ssshift o ssalt,que significa si que una de esas teclas esta pulsada.Lo unico que no consigo es ver como funciona exactamente.Pero me da un error de "incompatible types".Espero haber sido concreto esta vez.
Intente esto;
procedure tform1.tshiftstate(key:tshiftstate);
begin
if key:=ssshift then form1.close;
end;

roman
02-02-2006, 18:06:56
¿El procedimiento TShiftState? ¿De dónde has sacado tal cosa?

// Saludos