BUNZIN NET ポータル / プログラムは考え方です / メルマガバックナンバーリスト
前のメルマガ / 次のメルマガ

2009/10/27発行 『【櫻井です】タイマーのプログラムを作りましょう』

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
レンタル掲示板とクイズ投稿サイトを開発した櫻井文人の
プログラムの考え方が身につくメルマガ『プログラムは考え方です』
───────────────────────────────────
メルマガ発行人
櫻井文人のプロフィール ⇒ http://www.bunzin.net/program/prof.html
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

こんにちは、メルマガ発行人の櫻井文人です。
20円で売れました。詳しくは編集後記で。


前回のメルマガでは、イベント駆動型プログラミングの概要を
ざっと説明しました。
そして、今回のメルマガからは、いよいよイベント駆動型プログラミングを
使ったプログラムを作っていきます。


───────────────────────────────────
【お知らせ】

 「小岩井ミルクとコーヒー 500ml 48本セット」を3,864円で販売中。
 1本だいたい80円くらいです。

  コチラ ⇒ http://www.moshimo.com/article/121691/122708


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■■ タイマーのプログラムを作りましょう
───────────────────────────────────

イベント駆動型プログラミングの実習として、
タイマーのプログラムを作っていくことにします。

今回もVBScriptというプログラム言語を使います。VBScriptはOSがWindowsで
あれば、何かを新しく追加しなくても使うことができます。

※ただしVBScriptが使えるのはWindows98以降なので、
 Windows95ではVBScriptは使うことができません。


■どんなタイマープログラムを作るのか?

 今回作るタイマープログラムの仕様は、次のような感じです。

  ・指定した秒数を1秒毎にカウントダウンしていき、
   秒数が0秒になったらポップアップで通知する。

  ・秒数は画面の入力欄に入力する。(デフォルトは180秒)

  ・「スタート」ボタンでカウントダウンを開始する。

  ・「ストップ」ボタンでカウントダウンを停止する。

  ・「+」ボタンで秒数を1増やす。

  ・「-」ボタンで秒数を1減らす。

  ・「閉じる」ボタンでプログラムを終了する。


■今回はどこまで作るのか?

 今回は、操作画面と、
 イベントループ、そして、各イベントハンドラー(中身は空)を
 準備します。

 これだけでも、少々プログラムが大きめになっていますので、

   心が折れそう・・・

 になってしまう方もいるかと思います。

 そういう場合は、今回はさしあたって
 「イベントループからイベントハンドラーが呼ばれてるんだな」
 程度の理解でも大丈夫です。

 実際のところ、今回作った部分は、Visual Studio等の主な開発環境では、
 画面操作だけで準備できてしまいます。
 (VBScriptでは自力で準備する必要があるので作りました)

 今回は、これからプログラムをしていく下地を作ったようなものです。
 次回からは、少しづつイベントハンドラーに実際の処理を追加していき
 プログラムを完成に近づけていきます。


■今回のプログラム

 以下が、準備したプログラムです。

----------------------------------------------------------------------
rem プログラムの開始

rem **********************************************
rem お手軽タイマープログラム
rem **********************************************

rem **********************************************
rem プログラムの準備
rem **********************************************
set w = WScript

set ie = CreateObject("InternetExplorer.Application")
ie.Width = 350
ie.Height = 130
ie.ToolBar = false
ie.StatusBar = false
ie.Resizable = false
ie.Visible = true
ie.Navigate "about:blank"
do while ie.Busy
  w.sleep 100
loop

html = "" _
+ "<form name=""form1"" >" _
+ "   <table width=300><tr><td>" _
+ "      <input type=""hidden"" name=""CLICKED_PLUS""  value=""false"">" _
+ "      <input type=""hidden"" name=""CLICKED_MINUS"" value=""false"">" _
+ "      <input type=""hidden"" name=""CLICKED_START"" value=""false"">" _
+ "      <input type=""hidden"" name=""CLICKED_STOP""  value=""false"">" _
+ "      <input type=""hidden"" name=""CLICKED_CLOSE"" value=""false"">" _
+ "      <input type=""text"" name=""COUNTER"" size=5>" _
+ "      <input type=""button"" " _
+ "         onClick = ""getElementsByName('CLICKED_PLUS')(0).value = 'true';""" _
+ "         value=""+"">" _
+ "       <input type=""button"" " _
+ "         onClick = ""getElementsByName('CLICKED_MINUS')(0).value = 'true';""" _
+ "         value=""−"">" _
+ "      <br>" _
+ "      <input type=""button"" " _
+ "         onClick = ""getElementsByName('CLICKED_START')(0).value = 'true';""" _
+ "         value=""スタート"">" _
+ "      <input type=""button"" " _
+ "         onClick = ""getElementsByName('CLICKED_STOP')(0).value = 'true';""" _
+ "         value=""ストップ"">" _
+ "   </td><td align=""right"" valign=""top"">" _
+ "      <input type=""button"" " _
+ "         onClick = ""getElementsByName('CLICKED_CLOSE')(0).value = 'true';""" _
+ "         value=""閉じる"">" _
+ "   </td></tr></table>" _
+ "</form>" _

ie.Document.Body.InnerHtml = html
ie.Document.Title = "お手軽タイマー"

on error resume next

ie.Document.GetElementsByName("COUNTER")(0).value = 180
status = "IDLE"
start_time = 0

rem **********************************************
rem イベントループ
rem **********************************************
do while ie.Busy or status <> "CLOSE"

   If ie.Document.GetElementsByName("CLICKED_PLUS")(0).value <> "false" Then
      ie.Document.GetElementsByName("CLICKED_PLUS")(0).value = "false"
      clicked_plus()
   End If

   If ie.Document.GetElementsByName("CLICKED_MINUS")(0).value <> "false" Then
      ie.Document.GetElementsByName("CLICKED_MINUS")(0).value = "false"
      clicked_minus()
   End If

   If ie.Document.GetElementsByName("CLICKED_START")(0).value <> "false" Then
      ie.Document.GetElementsByName("CLICKED_START")(0).value = "false"
      clicked_start()
   End If

   If ie.Document.GetElementsByName("CLICKED_STOP")(0).value <> "false" Then
      ie.Document.GetElementsByName("CLICKED_STOP")(0).value = "false"
      clicked_stop()
   End If

   If ie.Document.GetElementsByName("CLICKED_CLOSE")(0).value <> "false" Then
      ie.Document.GetElementsByName("CLICKED_CLOSE")(0).value = "false"
      clicked_close()
   End If

   If status = "EXE_COUNT_DOWN" Then exe_count_down()

   w.sleep 100

loop

ie.Quit

rem **********************************************
rem イベントハンドラ「clicked_plus()」
rem 「+」ボタンがクリックされた時の処理
rem **********************************************
function clicked_plus()
end function

rem **********************************************
rem イベントハンドラ「clicked_minus()」
rem 「-」ボタンがクリックされた時の処理
rem **********************************************
function clicked_minus()
end function

rem **********************************************
rem イベントハンドラ「clicked_start()」
rem 「スタート」ボタンがクリックされた時の処理
rem **********************************************
function clicked_start()
end function

rem **********************************************
rem イベントハンドラ「clicked_stop()」
rem 「ストップ」ボタンがクリックされた時の処理
rem **********************************************
function clicked_stop()
end function

rem **********************************************
rem イベントハンドラ「clicked_close()」
rem 「閉じる」ボタンがクリックされた時の処理
rem **********************************************
function clicked_close()
end function

rem **********************************************
rem イベントハンドラ「exe_count_down()」
rem カウントダウン実行中の時の処理
rem **********************************************
function exe_count_down()
end function

rem プログラムの終了
----------------------------------------------------------------------

 それでは、プログラムの内容を簡単に説明します。

 最初の「プログラムの準備」では、Internet Explorerを使って操作画面を
 作っています。

 次の「イベントループ」で、イベントが発生するのを
 グルグルと待ち続けます。
 今回発生するイベントは、以下の6つです。

  ・「+」ボタンがクリックされた

  ・「-」ボタンがクリックされた

  ・「スタート」ボタンがクリックされた

  ・「ストップ」ボタンがクリックされた

  ・「閉じる」ボタンがクリックされた

  ・カウントダウン実行中

 そして、それぞれのイベントに対応したイベントハンドラが続きます。
 今はまだイベントハンドラの中身は空っぽですので、
 イベントが発生しても何もしません。


■プログラムを動かしてみる。

 途中からメルマガを読んだ方などのために、復習も兼ねて、プログラムを
 動かす方法を記述しておきます。

 【プログラムを動かす方法】

   (1)「rem プログラムの開始」から「rem プログラムの終了」までを
     コピーしてメモ帳を開いて貼り付けましょう。

   (2)そして「timer.vbs」いうファイル名で適当な場所に保存しましょう。

   (3)保存した「timer.vbs」をダブルクリックすると、
     すぐにプログラムが動きます。


 今回は、画面が表示されるだけです。
 イベントハンドラの中身が空っぽなので、
 ボタン類をクリックしても何も起こりません。
 
 というわけで、次回からは、イベントハンドラの中身を少しずつ
 追加していきながら、タイマープログラムが動くようにしていきます。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■■ 編集後記
───────────────────────────────────

すごく古いPCやマザーボードが20円で売れました。

以前のメルマガで、いらなくなった古いPCやマザーボードなどを
ハードオフに持ち込んでますが買い取り価格はいつも0円です・・・
という話をしたと思います。

しかしなんと、先日、
すごく古いPC本体と、すごく古いマザーボード6枚程と、
すごく古いCDドライブを持ち込んだところ、
まさかの20円で売れてしまいました。

20円という微々たる金額ではあるものの、
買い取り価格が0円が当たり前だと思ってたので、
ものすごいハイテンションになってしまいました。

たったの20円で、ものすごいハイテンションになれるなんて、
凄く安上がりで自分でも笑えてしまいました。

いつもは少しずつ持ち込んでたのですが、
今回はちょっと多めに持っていったのがよかったのか?
その辺は不明です・・・
とりあえず、次の機会があったら多めに持ち込んでみようかと
思ってます。


最後までお読みいただき、ありがとうございました。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

●櫻井が開発したレンタル掲示板は
  コチラ ⇒ http://www.bunzin.gr.jp/m_board/

  画像のアップロードも可能なレンタル掲示板です。
  無料ですのでお気軽にどうぞ。


●櫻井が開発したクイズ投稿サイトは
  コチラ ⇒ http://www.bunzin.gr.jp/quiz/

  あなたが考えたクイズを投稿することができます。
  投稿されたクイズに回答することもできます。
  無料ですのでお気軽にどうぞ。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
メルマガ発行人 櫻井文人

メルマガ発行責任者情報は
 コチラ ⇒ http://www.bunzin.net/program/mghsinfo.html

アドレス変更と登録解除はコチラ ⇒ http://www.mag2.com/m/0000293166.html

メルマガバックナンバーは
 コチラ ⇒ http://www.bunzin.net/program/mailmaga/backnumber/

櫻井文人のプロフィール ⇒ http://www.bunzin.net/program/prof.html

ご意見・ご感想はコチラ ⇒ bunzin●bunzin.gr.jp
(メール送信の際は、●を@に置き換えてください。)
(櫻井が確実に読みますが、返信は保障できません。)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 
メルマガ登録・解除
 
前のメルマガ / 次のメルマガ
企画・運営・管理 BUNZIN NET