Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Crear un temporizador para botón (https://www.clubdelphi.com/foros/showthread.php?t=85576)

UsuarioBaja123 02-04-2014 19:47:47

Crear un temporizador para botón
 
Hola, gracias a todos los del Club Delphi que resuelven mis dudas. Bueno, al grano:

Necesito crear un temporizador que se active cuando pulse un botón y me cuente cuantos segundos estoy pulsando el botón hasta que lo suelte y me lo guarde en una variable con el tiempo que he estado pulsándolo. (no tiene por qué ser segundos)

Gracias a todos los que me contesten. :)

Casimiro Notevi 02-04-2014 20:14:33

¿Qué parte llevas hecha?
¿En qué parte tienes problemas?
¿Cuántos puntos te dan por el ejercicio? :p

UsuarioBaja123 02-04-2014 21:50:22

Nada, ya encontré yo solo la manera de hacerlo. ¿Si quiero compartirlo lo escribo aquí o lo pongo en trucos?

Casimiro Notevi 02-04-2014 22:06:56

Aquí, por favor :)

UsuarioBaja123 02-04-2014 22:35:53

Pues sencillamente añades un TTimer y una variable:
Código Delphi [-]
var
valueduration : integer;
begin
valueduration := valueduration +1
end;

De esta manera cada vez que en el Timer pasen los 1000 (1 seg.) se sumara a la variable 1.

Mi problema es que no se hacer una función cuando el botón está o no pulsado:

Código Delphi [-]
var
valueduration : integer;
begin
if Button1.OnClick true
then begin
valueduration := valueduration +1
end;
if Button1.OnClick false
then begin
Text1.Text := valueduration;
end;

¿Qué estoy haciendo mal?

Gracias. :rolleyes:

Casimiro Notevi 02-04-2014 22:54:58

Decías que querías controlar cuánto tiempo está pulsado el botón, ¿eso quiere decir que cuente el tiempo que lo pulsas hasta que lo sueltas? ¿o quieres decir el tiempo entre que lo pulsas una vez y lo vuelves a pulsar otra vez?

UsuarioBaja123 02-04-2014 23:40:42

Que calcule el tiempo entre que lo pulse y lo suelte. Y si no se puede hacer con el botón que sea con presionar cualquier tecla y la suelte.

ecfisa 03-04-2014 00:11:24

Cita:

Empezado por ZaneMS (Mensaje 474734)
Que calcule el tiempo entre que lo pulse y lo suelte. Y si no se puede hacer con el botón que sea con presionar cualquier tecla y la suelte.

Hola ZaneMS.

Con el mouse:
Código Delphi [-]
...
implementation

var
 Frequency, Start, Stop: Int64;

procedure TForm1.FormCreate(Sender: TObject);
begin
  QueryPerformanceFrequency(Frequency);
end;

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  QueryPerformanceCounter(Start);
end;

procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  QueryPerformanceCounter(Stop);
  ShowMessage(FormatFloat('0,',(Stop-Start)* 1000000 div Frequency) + ' µs.');
end;
...
Para el teclado usa los eventos OnKeyDown y OnKeyUp.

Saludos :)

nlsgarcia 03-04-2014 01:03:53

ZaneMS,

Cita:

Empezado por ZaneMS
...Necesito crear un temporizador que se active cuando pulse un botón y me cuente cuantos segundos estoy pulsando el botón hasta que lo suelte y me lo guarde en una variable con el tiempo que he estado pulsándolo (no tiene por qué ser segundos)...

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Frequency, Start, Stop: Int64;

implementation

{$R *.dfm}

// Inicio de Conteo de Tiempo (Pulsa el botón del Mouse)
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   QueryPerformanceFrequency(Frequency);
   QueryPerformanceCounter(Start);
end;

// Fin de Conteo de Tiempo (Libera el botón del Mouse)
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);

var
   Hours, Minutes, Seconds, Milliseconds : Int64;
   TotalTime : TDateTime;
   TimeLapse : String;

begin

   QueryPerformanceCounter(Stop);

   // Calculo del Tiempo Total del Proceso expresado en Milisegundos
   Milliseconds := (Stop-Start) * 1000 div Frequency;

   // Conversión de Milisegundos a Horas, Minutos, Segundos y el resto en Milisegundos
   Hours := Milliseconds div (1000*60*60);
   Minutes := Milliseconds mod (1000*60*60) div (1000*60);
   Seconds := Milliseconds mod (1000*60*60) mod (1000*60) div 1000;
   Milliseconds := Milliseconds mod (1000*60*60) mod (1000*60) mod 1000;

   // Conversión de las variables de tiempo a TDateTime
   TotalTime := EncodeTime(Hours,Minutes,Seconds,Milliseconds);

   // Formateo del tiempo calculado
   TimeLapse := 'El Tiempo de Pulsación fue : ';
   TimeLapse := TimeLapse + FormatDateTime('hh:nn:ss:zzz', TotalTime);

   // Visualización del Tiempo Trascurrido
   MessageDlg(TimeLapse,mtInformation,[mbOK],0);

end;

end.
El código anterior permite registrar el tiempo de pulsación del botón del Mouse en formato HH:MM:SS:ZZZ.

Te sugiero revisar también este link:
Espero sea útil :)

Nelson.

ecfisa 03-04-2014 10:44:03

Hola ZaneMS.

Como te indican, este tema ya ha sido tratado con anterioridad en los foros y la web (es por eso que la guía de estilo aconseja las búsquedas).
Te pongo algunos viejos enlaces para que puedas ampliar el ámbito de uso de estas funciones API con Delphi:Saludos. :)


La franja horaria es GMT +2. Ahora son las 00:52:51.

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