PDA

Ver la Versión Completa : Saber cuando una tecla sigue pulsada


angelmsf
04-09-2008, 12:54:41
Hola a todos,

Me gustaria saber si alguien de ustedes me puede ayudar en saber como hago para saber cuando una tecla x se mantiene pulsada. Pues necesito que el programa me vaya cambiando de botones en el encabezado cuando mantengo alguna tecla x pulsada y cuando le suelto y no la presino constantemente pues me navegue en otros botones.

aguien me da una idea?

Caro
04-09-2008, 13:16:00
Hola angelmsf, en tu formulario necesitas que la propiedad KeyPreview este en True, ahora digamos que tenemos 2 botones y si presionamos las teclas de fecha izquierda (<-) y flecha derecha (->) se mueva entre nuestros botones.


procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Case key of
vk_left : Button1.SetFocus;
vk_Right: Button2.SetFocus;
end;
end;


Saluditos

angelmsf
04-09-2008, 18:49:33
Que tal [Caro],

El asunto no es tan sencillo, pues lo que quiero es saber cuando una tecla la dejas pulsada por unos cuantos segundos que el programa te mueva el foco a otro item, no es solo presionarla y ya.

es saber cuando una tecla se ha dejado presionada por unos cuantos segundo.

me entiendes ahora?

adeszeus
22-04-2010, 01:36:27
Espero te funcione:
bueno espero y este codigo te funcione

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Timer1: TTimer;
procedure FormKeyDwn(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
tiempo:integer;
implementation

{$R *.dfm}

procedure TForm1.FormKeyDwn(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
timer1.Enabled:=true;// activamos el reloj
if key=vk_left then
if tiempo>5 then
begin
showmessage('La tecla duro mas de 5 segundos oprimida');
button1.SetFocus;
tiempo:=0;
timer1.Enabled:=false;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
tiempo:=0; //inicializamos la variable para contabilizar el tiempo
// el reloj tiene un intervalo de 1000 milisegundos
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
tiempo:=tiempo+1;// acumulamos el valor de tiempo
// donde desde que se creo vale 0

end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
tiempo:=0;
timer1.Enabled:=false;
// en caso de levantar la tecla pues la cuenta de reinicia y debemos de tener
// en cuenta que debemos detener el reloj
end;

end.