トップへ(mam-mam.net/)

「ストップウォッチ」アプリケーション作成(Android,Windows) ~Delphiソースコード集

検索:

「ストップウォッチ」アプリケーション作成(Android,Windows) ~Delphiソースコード集

1.Delphiを起動

Delphiを起動して新規FMXプロジェクトを作成し、ターゲットプラットフォームをAndroidに設定します。
フォームの幅をドラッグして狭くします。
フォームにTScaledLayoutをドラッグ&ドロップし、Alignプロパティを「Fit」にします。
ScaledLayout1に、TLabelをドラッグ&ドロップし、Alignプロパティを「Top」にし、StyledSettings.Sizeプロパティを「False」にし、TextSettings.Font.Sizeプロパティを「24」にします。
ScaledLayout1に、TButtonを2つ、ドラッグ&ドロップします。
プロジェクトとユニットを保存します。

2.権限設定

権限は、一切不要です。

3.ソースコードの記述

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Controls.Presentation, FMX.Layouts, System.Diagnostics;

type

  TStopWatchThread=class(TThread)
  private
    FStopWatch : TStopWatch;
    FLabel:TLabel;
  protected
    procedure Execute; override;
  public
    constructor Create(l:TLabel);
    procedure Start();
    procedure Reset();
    procedure Stop();
    function IsStop():boolean;
  end;

  TForm1 = class(TForm)
    ScaledLayout1: TScaledLayout;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { private 宣言 }
    swh:TStopWatchThread;
  public
    { public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if swh.IsStop then
  begin
    swh.Start;
    Button1.Text:='停止';
  end
  else
  begin
    swh.Stop;
    Button1.Text:='再開';
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  swh.Stop;
  swh.Reset;
  Button1.Text:='開始';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button1.Text:='開始';
  Button2.Text:='リセット';
  Label1.Text:='';
  swh:=TStopWatchThread.Create(Label1);
end;

{ TStopWatchThread }

constructor TStopWatchThread.Create(l: TLabel);
begin
  inherited Create(false);
  FreeOnTerminate := True;
  FLabel:=l;
  FStopWatch:=TStopwatch.Create;
end;

procedure TStopWatchThread.Execute;
var dt:TDateTime;
    h,m,s,ms:word;
begin
  inherited;
  while not Terminated do
  begin
    dt:=FStopWatch.ElapsedMilliseconds/24/60/60/1000;
    DecodeTime(dt,h,m,s,ms);
    Synchronize(
      procedure
      begin
        FLabel.Text:= Format('%4d時%2.2d分%2.2d秒.%3.3d', [h,m,s,ms]);
      end
    );
    Sleep(1);
  end;
end;

function TStopWatchThread.IsStop: boolean;
begin
  result:=not FStopWatch.IsRunning;
end;

procedure TStopWatchThread.Reset;
begin
  FStopWatch.Reset;
end;

procedure TStopWatchThread.Start;
begin
  FStopWatch.Start;
end;

procedure TStopWatchThread.Stop;
begin
  FStopWatch.Stop;
end;

end.

4.実行する

デバッガを使わず実行(Shift+Ctrl+F9)などで実行します。
「開始」を押すとストップウォッチが開始されます。
「停止」を押すと一時停止します。
「再開」を押すとストップウォッチが再開します。
「リセット」を押すとストップウォッチがリセットされ停止します。

もちろんWindows用にコンパイルするとWindowsでも動作します。