Visual Basic 6.0 初級講座
VB6対応

 

Visual Basic 中学校 > VB6 初級講座 >

第10回 タイマー

今回もコントロールの説明です。前回まではピクチャーボックス、イメージ、テキストボックス、ラベルをよく使う4つのコントロールを説明しました。今回は少し変わったコントロール「タイマー」を説明しましょう。

タイマーのアイコンは下の画像で確認してください。

名前のように時計の絵をしたアイコンだからわかりやすいですね。

 

1.タイマーの機能

 

タイマーは「時間を計る」ために使ってもいいのですが、それは普通の使い方ではありません(多分)。普通は一定時間おきにコードを実行させるために使います。

たとえば、フォームにタイマーを張り付けて、タイマーをダブルクリックして次のように打ち込んでください。

Private Sub Timer1_Timer()

    Static HANKEI As Long
    
    HANKEI = HANKEI + 100

    Circle (2000, 2000), HANKEI, RGB(255, 100, 100)

End Sub

それと、プロパティウィンドウで、タイマーのIntervalプロパティを1000にしてください。

準備ができたら実行すると、1秒ごとにフォームに赤い円が描かれていきます。この「1秒ごと」のように「一定時間ごと」にコードを実行させたいときに使うのがタイマーなのです。

注意:Staticについて

上の例で、Staticというキーワードを使いました。これは Dim とほとんど同じなのですが、Dimと1つだけ違うところがあって、それは「Staicで宣言した変数の値は記録されている」という点です。このためHANKEIの値が記録されて、100ずつ大きくなっていくわけです。もし、Dimを使っていたら、このコードを実行するたびにHANKEIの値は0に戻されて、それに毎回100を足すのだから、いつでも円の半径は100というおもしろくない結果になってしまいます。

 

2.タイマーの使い方

 

タイマーは時間がくると「タイマーイベント」というものを発生させます。このタイマーイベントが発生するとPrivate Sub Timer1_Timer()の部分のコードが実行されるわけです。

そこで、タイマーの使い方はかんたんで「いつタイマーイベントを発生させるか」だけ気にしていればほとんど事足ります。上の例では1秒ごとにタイマーイベントを発生させているのでした。

この設定はタイマーの Interval プロパティで行います。Interval = 1000 の時に「1秒ごと」という意味になります。そこで、Interval = 500 とすると「0.5秒ごと」という意味になります。かんたんですね。

intervalプロパティは1秒の1000分の1を単位にするのでこの単位を「ミリ秒」といいます。そこでInterval=1とすると「0.001秒ごと」という意味になるのですが、現代のコンピュータの性能ではこんなにすばやい動きは無理なのでこの場合、Intervalプロパティの値に関わらず0.1秒ごとくらいの早さで実行されます。現代のコンピュータの限界は1秒に10回程度ということらしいです。(注:私のコンピューターのCPUは500MHzなので1秒間に5億回の計算ができる。しかし、プログラムでは1行ですむことでもコンピュータは裏で何百回も計算していたりするのである。また、Windowsは同時に複数のアプリケーションを起動することができるので、他のアプリケーションの分を計算している時間もある。何もしていないように見えるときでも実はコンピュータは忙しくしているのだ。こういったいろいろな事情を考えると1秒に10回くらいのタイマーイベントを発生させるのが限界ということだろう・・・と私は思っている)。

それから、これはタイマー以外のコントロールでもそうですが、Enabledプロパティを使って、タイマーの有効と無効を切り替えることもできます。

 

3.アニメーション

 

それでは、タイマーを使ってアニメーションに挑戦しましょう。

まず、画像を3枚用意してください。アニメーションを作るのだから少しずつ違う絵の画像がいいです。たとえば下の画像のような物です。

  

自分で画像を用意するのが面倒な場合はこの画像を使ってください。(この画像の上で右クリックして 名前を付けて保存 を選ぶと自分のパソコンの中に画像を保存できます。そのときは3枚とも保存してくださいね

なまえは、右から順に anim1.gif  , anim2.gif , anim3.gif です。自分で画像を書いた場合でも名前はこの3つと同じにすることをおすすめします。画像が用意できたら Cドライブの下に anim というフォルダを作ってその中に入れて置いてください。

さて、プログラムに入りましょう。ちょっと複雑ですからよく読んでください。

1.まず、フォームにイメージを1つだけ配置します。

2.そのイメージ(image1)を右クリックして 「コピー」 を押します。

3.フォームを右クリックして 「貼り付け」 を押します。

4.「コントロール配列にしますか?」と聞いてくるので 「はい」をえらびます。

そうすると、あたらしくイメージが配置されるので場所を変えてください。(はじっこのほう)

5.2,3の行為を繰り返して、合計で4個のイメージを作ります。

6.フォームをダブルクリックして次のコードを打ち込んでください。

Private Sub Form_Load()

    Image1(0).Picture = LoadPicture("C:\anim\anim1.gif")
    Image1(1).Picture = LoadPicture("C:\anim\anim2.gif")
    Image1(2).Picture = LoadPicture("C:\anim\anim3.gif")
    Image1(3).Picture = LoadPicture("C:\anim\anim2.gif")

End Sub

7.フォームにタイマーを配置します。

8.タイマーのプロパティをプロパティウィンドウから次のようにセットしてください。

Enabledプロパティを False にする。

Intervalプロパティを 100 にする。

9.タイマーをダブルクリックして次のコードを打ち込んでください。

Private Sub Timer1_Timer()

    Static Gazou As Integer

    Gazou = Gazou + 1
    If Gazou = 4 Then Gazou = 0

    Picture1.Picture = Image1(Gazou).Picture

End Sub

10.フォームにコマンドボタンを貼り付けてください。

11.コマンドボタンをダブルクリックして次のように打ち込んでください。

Private Sub Command1_Click()
    Timer1.Enabled = True
End Sub

12.フォームのWindowStateプロパティを 2 にします。

※この設定をすると、プログラムを実行したときに自動的にフォームが最大化されます。

13.ピクチャーボックスを1つ配置します。

このピクチャーボックスにアニメーションを表示するので、適当な大きさにしてください。

14.以上です。おつかれさまでした。

全体のコードは次のようになります。

Private Sub Command1_Click()
    Timer1.Enabled = True
End Sub
Private Sub Form_Load()

    Image1(0).Picture = LoadPicture("C:\anim\anim1.gif")
    Image1(1).Picture = LoadPicture("C:\anim\anim2.gif")
    Image1(2).Picture = LoadPicture("C:\anim\anim3.gif")
    Image1(3).Picture = LoadPicture("C:\anim\anim2.gif")

End Sub
Private Sub Timer1_Timer()

    Static Gazou As Integer

    Gazou = Gazou + 1
    If Gazou = 4 Then Gazou = 0

    Picture1.Picture = Image1(Gazou).Picture

End Sub

さぁ、早速実行してみてください。コマンドボタンを押すと、首をふっているアニメーションができましたね?ちょっとぎこちないですが、画像が3枚しかないし、絵も下手なせいです。

プログラムの構造は0.1秒ごとにタイマーイベントを発生させて、コードで画像を入れ替えるという物です。画像には番号がついていてその番号を Gazou変数 で管理しています。画像は4枚(3枚ではないのだよ)読み込んでいるので 番号は 0〜3までです。もし、画像の番号が4になったら0に戻せという命令が、 If Gazou = 4 Then Gazou = 0になります。

ところで、いつのまに画像に番号がついたのか分かりますか?それは 手順4 でコントロール配列にしたときです。コントロール配列は重要なのでまたいつかやりますが、これはコントロールに番号をつける物です。コントロール配列にしたコントロールは番号で呼び出すことができます。今回は Image1 をコントロール配列にしたので Image1(0) や Image1(1) のように ()の中に番号をいれて呼び出します。そのため、Picture1.Picture = Image1(Gazou).Pictureのようにかんたんに画像を入れ替えられるのです。

それから、最後に注意。画像の入れ替えは素早くやらなければいけません。私は小さな画像を用意したので入れ替えも素早くできましたが、大きな画像を入れ替えるのは時間がかかることでしょう。

それでは、今回はここまでです。

自分でアニメーションを作って楽しんでください。

できたら私にも送って下さいね。では。