Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Saber si una tecla esta pulsada? (https://www.clubdelphi.com/foros/showthread.php?t=29793)

fefe13 01-02-2006 17:59:30

Saber si una tecla esta pulsada?
 
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

Cita:

Empezado por fefe13
Creia que era if ... in shift then,

Creiste que era esto ¿dónde?

Cita:

Empezado por fefe13
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....
-------------------------------------------------------------------
Código Delphi [-]
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

Cita:

Empezado por Neftali
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.
Cita:

Empezado por fefe13
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


La franja horaria es GMT +2. Ahora son las 05:59:39.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi