Teclas - Timer - Delphi
01/08/2019
0
Como descubro a diferença de tempo apertado entre duas teclas?
Exemplo aperto a tecla 1 = Tempo ???
Aperto em seguida a Tecla 2 = tempo???
Resultado - Diferença do tempo = a ?????????
Obrigado
Trevis Souza
Post mais votado
05/08/2019
type TForm5 = class(TForm) LabelDiferenca: TLabel; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormCreate(Sender: TObject); private { Private declarations } FTeclaPressionada: Word; FDataHoraPressinamento: TDateTime; public { Public declarations } end; implementation {$R *.dfm} procedure TForm5.FormCreate(Sender: TObject); begin FTeclaPressionada := 0; FDataHoraPressinamento := Now; end; procedure TForm5.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var Horas, Minutos, Segundos, MSegundos: word; begin if FTeclaPressionada > 0 then begin DecodeTime(FDataHoraPressinamento - Now, Horas, Minutos, Segundos, MSegundos); labelDiferenca.caption := 'Diferença entre os pressionamentos de '+Chr(FTeclaPressionada)+' e '+Chr(Key)+' foi de : '+IntToStr(Horas)+' horas, '+IntToStr(Minutos)+' minutos, '+IntToStr(Segundos)+ ' segundos e '+IntToStr(MSegundos)+' milésimos.'; end; FDataHoraPressinamento := Now; FTeclaPressionada := Key; end; end.
OBSERVAÇÃO IMPORTANTE: para funcionar corretamente, a propriedade KeyPreview do form precisa estar como True.
Emerson Nascimento
Mais Posts
01/08/2019
William Maciel
Segue um pequeno exemplo.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
lblDiferenca: TLabel;
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
tmptime1 : TTime;
tmptime2 : TTime;
implementation
{$R *.dfm}
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
Hour, Min : Word;
Sec, MSec : Word;
begin
tmptime1 := tmptime2;
tmptime2 := time;
if (tmptime1 <> 0) and (tmptime2 <> 0) then
begin
DecodeTime(tmptime2-tmptime1,Hour,Min,Sec,MSec);
lblDiferenca.caption :='Diferença entre os pressionamentos foi de : '+IntToStr(Min)+' minutos '+IntToStr(Sec)+ ' segundos e '+IntToStr(Msec)+' milésimos.';
end;
end;
initialization
tmptime1 := 0;
tmptime2 := 0;
end.
05/08/2019
Trevis Souza
Segue um pequeno exemplo.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
lblDiferenca: TLabel;
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
tmptime1 : TTime;
tmptime2 : TTime;
implementation
{$R *.dfm}
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
Hour, Min : Word;
Sec, MSec : Word;
begin
tmptime1 := tmptime2;
tmptime2 := time;
if (tmptime1 <> 0) and (tmptime2 <> 0) then
begin
DecodeTime(tmptime2-tmptime1,Hour,Min,Sec,MSec);
lblDiferenca.caption :='Diferença entre os pressionamentos foi de : '+IntToStr(Min)+' minutos '+IntToStr(Sec)+ ' segundos e '+IntToStr(Msec)+' milésimos.';
end;
end;
initialization
tmptime1 := 0;
tmptime2 := 0;
end.
Obrigado
não funcionou bem.
Acho que deve ter faltado algum código para o Timer?
Consegue adaptar o código para trabalhar no evento Keyopress
usando as teclas 1 e 2
e calculando o tempo?
grato mais uma vez
19/08/2019
Trevis Souza
type TForm5 = class(TForm) LabelDiferenca: TLabel; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormCreate(Sender: TObject); private { Private declarations } FTeclaPressionada: Word; FDataHoraPressinamento: TDateTime; public { Public declarations } end; implementation {$R *.dfm} procedure TForm5.FormCreate(Sender: TObject); begin FTeclaPressionada := 0; FDataHoraPressinamento := Now; end; procedure TForm5.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var Horas, Minutos, Segundos, MSegundos: word; begin if FTeclaPressionada > 0 then begin DecodeTime(FDataHoraPressinamento - Now, Horas, Minutos, Segundos, MSegundos); labelDiferenca.caption := 'Diferença entre os pressionamentos de '+Chr(FTeclaPressionada)+' e '+Chr(Key)+' foi de : '+IntToStr(Horas)+' horas, '+IntToStr(Minutos)+' minutos, '+IntToStr(Segundos)+ ' segundos e '+IntToStr(MSegundos)+' milésimos.'; end; FDataHoraPressinamento := Now; FTeclaPressionada := Key; end; end.
OBSERVAÇÃO IMPORTANTE: para funcionar corretamente, a propriedade KeyPreview do form precisa estar como True.
Muito obrigado amigo!
Tudo ok!!!
Clique aqui para fazer login e interagir na Comunidade :)