Teclas - Timer - Delphi

01/08/2019

0

Boa tarde,

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

Trevis Souza

Responder

Post mais votado

05/08/2019

tente assim:
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

Emerson Nascimento
Responder

Mais Posts

01/08/2019

William Maciel

Boa noite 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.
Responder

05/08/2019

Trevis Souza

Boa noite 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
Responder

19/08/2019

Trevis Souza

tente assim:
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!!!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar