Esse é um post básico, destinado a quem está iniciando a programação em Delphi ou Lazarus. Vamos criar um cronômetro.
Um cronômetro deve marcar horas, minutos, segundos e milésimos de segundos. Deve ter um botão para iniciar, um para parar e outro para zerar.
Crie a form preta com um label vermelho e três botões, e deixe-a como a figura acima. Coloque também um TTimer e deixe a propriedade interval em 1 milissegundo e a propriedade enabled como false, para ele começar desligado.
O DFM/LFM ficará assim:
object frmvisor: Tfrmvisor
Left = 405
Top = 209
BorderIcons = [biSystemMenu, biMinimize]
BorderStyle = bsDialog
Caption = 'Cron'#244'metro'
ClientHeight = 102
ClientWidth = 314
Color = clBlack
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
SnapBuffer = 1
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object lbTempo: TLabel
Left = 8
Top = 8
Width = 294
Height = 55
Caption = '00:00:00.000'
Font.Charset = ANSI_CHARSET
Font.Color = clRed
Font.Height = -48
Font.Name = 'Microsoft Sans Serif'
Font.Style = [fsBold]
ParentFont = False
Transparent = False
WordWrap = True
end
object btInicio: TButton
Left = 16
Top = 72
Width = 75
Height = 25
Caption = '&Iniciar'
TabOrder = 0
OnClick = btInicioClick
end
object btPara: TButton
Left = 96
Top = 72
Width = 75
Height = 25
Caption = '&Parar'
TabOrder = 1
OnClick = btParaClick
end
object btZera: TButton
Left = 224
Top = 72
Width = 75
Height = 25
Caption = '&Zerar'
TabOrder = 2
OnClick = btZeraClick
end
object crono: TTimer
Enabled = False
Interval = 1
OnTimer = cronoTimer
Left = 16
Top = 16
end
end
O código dessa form, o arquivo.pas segue abaixo:
unit visor;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, dateutils;
type
Tfrmvisor = class(TForm)
btInicio: TButton;
btPara: TButton;
btZera: TButton;
crono: TTimer;
lbTempo: TLabel;
procedure cronoTimer(Sender: TObject);
procedure btInicioClick(Sender: TObject);
procedure btParaClick(Sender: TObject);
procedure btZeraClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
fTempo: Ttime;
fMomento: integer;
end;
var
frmvisor: Tfrmvisor;
implementation
{$R *.dfm}
procedure Tfrmvisor.cronoTimer(Sender: TObject);
begin
ftempo := (GetTickCount - fmomento) * OneMillisecond;
lbTempo.Caption := formatdatetime('hh:nn:ss.zzz', fTempo);
end;
procedure Tfrmvisor.btInicioClick(Sender: TObject);
begin
fmomento := GetTickCount;
crono.Enabled := true;
end;
procedure Tfrmvisor.btParaClick(Sender: TObject);
begin
crono.Enabled := false;
end;
procedure Tfrmvisor.btZeraClick(Sender: TObject);
begin
fTempo := 0;
lbTempo.Caption := formatdatetime('hh:nn:ss.zzz', fTempo);
end;
procedure Tfrmvisor.FormCreate(Sender: TObject);
begin
self.DouBleBuffered := True; //evitar o flick do relógio.
end;
end.
O principio é simples: Temos uma variavel chamada momento, do tipo inteiro, que armazena este exato momento através do método GetTickCount da API do windows, que traz a quantidade de milissegundos passada desde que se iniciou a máquina, e uma variável Tempo do tipo Time que a cada milissegundo do timer armazenará o GetTickCount de agora (a cada milsec) menos o que estava armazenado em Momento tudo isso multiplicado por OneMilliSecond, que é uma constante racional que armazena o valor de um milissegundo em relação a um dia. Isso porque no Delphi e Lazarus um dia é um inteiro e um milissegundo é uma fração de 1/milissegundos_de_um_dia.
O calculo é esse (GetTickCount - fmomento) * OneMillisecond;
Iniciar captura o momento e liga o timer. Parar simplesmente para o timer. Zerar atribui 0 ao Momento.
Esse foi um post básico do Delphi/Lázarus, mas não abordei como manusear as ferramentas para criar esses arquivos. Talvez em uma futura video - aula?
Você pode baixar o Lazarus aqui:
http://sourceforge.net/projects/lazarus/files/ e o fonte deste projeto
aqui.
Have Fun ;)
Comentários
Postar um comentário