AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
DelphiXE3 [FMX]タイマー(Timer)2013/10/19
 
前頁で[Additional]内の「PlotGrid」(グリッド作図)について書きました。これで[Additional]内については終了となります。次は[Win32]内ですが、この中には何もありませんので更に次。[System]内の「Timer」(タイマー)について見ていきます。
   【Delphi2010の記事はこちら】
   【DelphiXE3[VCLアプリケーション]の記事はこちら】
 
 

(ヘルプより)
Enabled
タイマが定期的に OnTimer イベントを生成するかどうかを制御します。
Enabled を使用すると、タイマを有効化または無効化することができます。Enabled が True の場合、タイマは通常通り応答します。Enabled が False の場合は、タイマは OnTimer イベントを生成しません。デフォルト値は True です。
Interval
タイマコンポーネントが新たに OnTimer イベントを初期化するまでの時間を、ミリ秒で指定します。
Interval が、OnTimerイベントが発生する頻度を指定します。指定された間隔が過ぎるたびに、OnTimerイベントが発生します。
Interval を使用すると、OnTimer イベントの間隔として基本値を指定することができます。デフォルト値は 1000 (1 秒)です。
メモ: 値 0 は有効ですが、この場合、タイマは OnTimer イベントを呼び出しません。
 
(ヘルプより)
TTimer オブジェクトを使用すると、指定した時間の間隔で特定のアクションを繰り返し実行することができます。
 
タイマの実行は、OnTimer イベントによって起動されます。TTimer には Interval というプロパティがあり、それによってタイマの OnTimer イベントが発生する頻度が決まります。
 
というわけでタイマー割り込みです。
アプリケーションプログラムが実行中、何かの処理をしている際に、指定した経過時間が経つとタイマー割り込みが発生して、そのアプリケーションプログラム内で全く別の処理を行わせる事が出来ます。
 
タイマーの Enabled プロパティが True の場合、Interval値が徐々に減っていって、0 になった時、タイマーの OnTimerイベントハンドラが実行されます。OnTimerイベントハンドラ内では、まず最初に、Enabled プロパティを False にして、イベントハンドラ内でタイマー割り込みが行われないようにします。タイマー割り込みの処理中に、更にタイマー割り込みが発生すると、どんどんおかしな事になっていくからです。処理が終了したら最後に、0値になっている Interval プロパティを再設定して、Enabled プロパティを True にします。こうして、タイマー割り込みを何ども発生させます。
 
例えば、何か時間の掛かる処理を行う際に、プログレスバーを表示して途中経過を表示したい場合には、普通は、
for i:=0 to 10000 do begin
 if ((i mod 100) = 0) then begin
  {プログレスバーの処理}
 end;
 {繰り返し処理}
end;
等のようにループ内で一定間隔毎に処理を行わせるようにして、タイマー割り込みは使用しません。そういった通常処理ではなく、突発的・無関係的な場合に利用する場合が多いと思われます。
 
例えば、単純に、1秒毎に、時計を表示する等。
下図のように配置をして、下記のようにコーディングします。

procedure TForm1.Button1Click(Sender: TObject);
var
 i,j : integer ;
begin
 for i := 0 to 1000 do begin
  ProgressBar1.Value := i / 10 ;
  TrackBar1.Value := i / 10 ;
  for j := 1 to 10 do begin
   Label2.Text := IntToStr(j) ;
   Application.ProcessMessages ; // 表示内容更新
  end;
 end;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Timer1.Enabled := False ;
 // 割り込み処理
 Label1.Text := TimeToStr(Now);
 //
 Timer1.Interval := 1000 ;
 Timer1.Enabled := True ;
end;
ラベル等の内容を変更して、それを画面上に反映したい場合、これまで(VCLアプリケーションで)は、Updateメソッドや Refreshメソッドを利用していましたが、FireMonkey(FMX)には、これがありません!? それに代替するメソッド等がどれなのかも全くさっぱり分かりません。 う〜ん、ちゃんとしたマニュアル等を読まないといけませんね。 まぁ取り敢えず、「Application.ProcessMessages;」は有効なようなので、これをしておきます。
二重ループにしているのは単に、そうしないと早すぎるのでウエイトを掛けているだけです。これは PCによって速度も異なってくると思いますので適度に調整して下さい。
 
タイマー割り込みは、単純に、現在の時刻を表示しているだけです。
 
[開始]ボタンを押せば、プログレスバーとトラックバーが動きます。その間も、何もしない間も、タイマー割り込みはで時刻表示はずっと行われます。

 
 
ちゃんとタイマー割り込みを行いたい場合は、デザイン時は EnabledプロパティをFalseにしておいて、例えば フォームの OnShowイベントハンドラの最後で、Interval値の設定と Enabled プロパティを True にする、というような事をします。
 
というわけで、タイマー(Timer)は、これまでと同様に扱えるようです。
 
タイマー(Timer)は、非ビジュアルコンポーネントですので、スタイルは無関係ですからそれについては記述しません。
 
 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
>Delphi2010
>DelphiXE3
▲2013/10/18
 2013/10/19
▼2013/10/19
 
シェアウェア
Script!World
データベース
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.