본문 바로가기
취미/Soft

[델파이] 아무 개념 없는 밀리초 시계

by MDabsurd 2015. 8. 18.

 

 

PStopWatch.rar

 

unit StopWatch;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils,System.DateUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    lblDigit: TLabel;
    btnStart: TButton;
    btnReset: TButton;
    lblStart: TLabel;
    lblStop: TLabel;
    Timer1: TTimer;
    btnPAUSE: TButton;
    lblCompare: TLabel;
    Edit1: TEdit;
    Label5: TLabel;
    procedure btnStartClick(Sender: TObject);
    procedure btnResetClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure btnPAUSEClick(Sender: TObject);
  private
    { Private declarations }
  public
    function GetTime(aDateTime : TDateTime) : String;
  end;

var
  Form1: TForm1;
  FStartTime, FEndTime, FDurTime : TDateTime;
  bOngoing: boolean;
  CriticalSection : TRtlCriticalSection;

implementation

{$R *.dfm}

procedure TForm1.btnStartClick(Sender: TObject);
begin
  FStartTime := Now();
  lblStart.Caption := 'Start : ' + TimetoStr(FStartTime);
  bOngoing := true;
end;

procedure TForm1.btnResetClick(Sender: TObject);
var
  aStratTime : String;
  aEndTime : String;
  aDurTime : String;
begin
  bOngoing := false;
  lblDigit.Caption := '00:00:00:000';
  lblStart.Caption := 'Start : ';
  lblStop.Caption := 'Stop : ';
  lblCompare.Caption := 'Compare :';
end;

procedure TForm1.btnPAUSEClick(Sender: TObject);
begin
  lblStop.Caption := 'Stop : ' + TimeToStr(now());
  if Timer1.Enabled then
    Timer1.Enabled := false
  else
    Timer1.Enabled := true;
end;

function TForm1.GetTime(aDateTime : TDateTime) : String;
var
  aHour,aMin,aSec,aMSec : word;
begin
  DecodeTime(aDateTime,aHour,aMin,aSec,aMSec);
  Result := IntToStr(aHour) + ':' + IntToStr(aMin) + ':' +
            IntToStr(aSec) + ':' + IntToStr(aMSec);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i,j,k : integer;
begin
  k := StrToInt(Edit1.Text);

  EnterCriticalSection(CriticalSection);
  try
    if bOngoing = true then
    begin
      lblDigit.Caption := GetTime(now()- FStartTime);
      for i := 1 to k do j:= j+1;    // Delay test;
      lblCompare.Caption := 'Compare : ' + IntToStr(MilliSecondOfTheSecond(now()-FStartTime));
    end;

  finally
    LeaveCriticalSection(CriticalSection);
  end;


end;

initialization
  initializeCriticalSection(CriticalSection);
finalization
  DeleteCriticalSection(CriticalSection);


end.

옛날에 짰던 건데, 어딘가 있긴 하겠지만...

막상 인터넷 뒤져 보니, 잘 안 찾아져서

짜두었던 것.

 

걍 블로그 정리 작업 상...

 

감사합니다 하하하~

 

댓글