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

2010/02/01発行 『【櫻井です】ラーメンができました!のびないうちにどうぞ(^_^)』

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

こんにちは、メルマガ発行人の櫻井文人です。
パソコンのCPUの交換をしましたが動かなくなって焦りました。
詳しくは編集後記で。


今回も、引き続き
「3分間をワンタッチで計測する機能」
をタイマープログラムに追加していきます。

今回は、「ラーメン(3分)」ボタンをクリックした時だけ、
タイマーのカウントがゼロになった時のメッセージを
「ラーメンができました!のびないうちにどうぞ(^_^)」にする
修正をします。

「3分間をワンタッチで計測する機能」機能の追加は
これで一通り終了となります。


───────────────────────────────────
【おすすめ】

今年の冬もすごく寒いですね。
寒すぎて、なかなか寝付けません・・・
だからといって、暖房をガンガンかけようにも
電気代が気になります。

そんな時は、「湯たんぽ」なんかどうでしょう。

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

電気を使わないのでお財布にやさしく、
ポカポカと暖いので気持ちよく眠ることができますよ。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■■ ラーメンができました!のびないうちにどうぞ(^_^)
───────────────────────────────────

今回は、「ラーメン(3分)」ボタンをクリックした時だけ、
タイマーのカウントがゼロになった時のメッセージを
「ラーメンができました!のびないうちにどうぞ(^_^)」にする
修正をします。


■修正の概要

 タイマーのカウントが0になった時に表示するメッセージを
 格納する変数を準備します。

 そして、「スタート」ボタンがクリックされた時は
 「時間になりました」を、 
 「ラーメン(3分)」ボタンがクリックされた時は
 「ラーメンができました!のびないうちにどうぞ(^_^)」を
 準備した変数に格納します。

 タイマーのカウントが0になった時は、
 変数の中身を表示するようにします。

 今回は、プログラムの4箇所に修正を加えていきます。
 

■timeup_msg変数を追加

 タイマーのカウントが0になった時に表示するメッセージを格納する
 ための変数を追加します。変数の名前はtimeup_msgとします。

 timeup_msg変数の追加は、プログラムの初期化部分に以下のよう
 に追加します。


    1行目:ie.Document.GetElementsByName("COUNTER")(0).value = 180
    2行目:status = "IDLE"
    3行目:bef_sec = 0
    4行目:timeup_msg = ""


 今回は、4行目にtimeup_msgの宣言と初期化の処理を追加しました。


■イベントハンドラ「clicked_start()」に処理を追加

 タイマーのプログラムのイベントハンドラー「clicked_start()」に
 「時間になりました」というメッセージをtimeup_msg変数に格納する
 処理を追加します。

 処理を追加後のイベントハンドラー「clicked_start()」の内容は
 以下のとおりです。


    1行目:rem **********************************************
    2行目:rem イベントハンドラ「clicked_start()」
    3行目:rem 「スタート」ボタンがクリックされた時の処理
    4行目:rem **********************************************
    5行目:function clicked_start()
    6行目:   now_cnt = ie.Document.GetElementsByName("COUNTER")(0).value
    7行目:   If now_cnt = "" Then
    8行目:      MsgBox "秒数を入力してください。"
    9行目:   ElseIf IsNumeric(now_cnt) = false Then
  10行目:      MsgBox "秒数は数字で入力してください。"
  11行目:   ElseIf now_cnt < 1 Then
  12行目:      MsgBox "秒数は1秒以上で入力してください。"
  13行目:   Else
  14行目:      bef_sec = Second(Now)
  15行目:      timeup_msg = "時間になりました"
  16行目:      status = "EXE_COUNT_DOWN"
  17行目:   End If
  18行目:end function


 今回は15行目に、処理を追加しました。
 timeup_msg変数に「時間になりました」というメッセージを格納しています。


■イベントハンドラ「cclicked_noodle_3min()」に処理を追加

 タイマーのプログラムのイベントハンドラー「clicked_noodle_3min()」に
 「ラーメンができました!のびないうちにどうぞ(^_^)」というメッセージを
 timeup_msg変数に格納する処理を追加します。

 処理を追加後のイベントハンドラー「clicked_noodle_3min()」の内容は
 以下のとおりです。


    1行目:rem **********************************************
    2行目:rem イベントハンドラ「clicked_noodle_3min()」
    3行目:rem 「ラーメン(3分)」ボタンがクリックされた時の処理
    4行目:rem **********************************************
    5行目:function clicked_noodle_3min()
    6行目:   ie.Document.GetElementsByName("COUNTER")(0).value = 180
    7行目:   timeup_msg = "ラーメンができました!のびないうちにどうぞ(^_^)"
    8行目:   status = "EXE_COUNT_DOWN"
    9行目:end function


 今回は7行目に、処理を追加しました。
 timeup_msg変数に「ラーメンができました!のびないうちにどうぞ(^_^)」
 というメッセージを格納しています。


■イベントハンドラ「exe_count_down()」の処理を修正

 タイマーのプログラムのイベントハンドラー「exe_count_down()」に、
 タイマーのカウントが0になった時は
 timeup_msgの変数の中身を表示するための修正します。

 処理を修正後のイベントハンドラー「exe_count_down()」の内容は
 以下のとおりです。


    1行目:rem **********************************************
    2行目:rem イベントハンドラ「exe_count_down()」
    3行目:rem カウントダウン実行中の時の処理
    4行目:rem **********************************************
    5行目:function exe_count_down()
    6行目:   now_cnt = ie.Document.GetElementsByName("COUNTER")(0).value
    7行目:   now_sec = Second(Now)
    8行目:   If bef_sec <> now_sec Then
    9行目:      bef_sec = now_sec
  10行目:      now_cnt = now_cnt - 1
  11行目:      ie.Document.GetElementsByName("COUNTER")(0).value = now_cnt
  12行目:   End If
  13行目:   If now_cnt <= 0 Then
  14行目:      MsgBox timeup_msg
  15行目:      status = "IDLE"
  16行目:   End If
  17行目:end function


 今回は14行目の処理を修正しました。
 修正前は、「時間になりました」というメッセージを表示するように
 なっていましたが、timeup_msg変数の中身を表示するように修正しました。

 これで、タイマースタート時に、クリックしたボタンに応じてメッセージを
 出し分けられるようになりました。


■修正後のプログラム

 以下が、修正後のタイマープログラムです。

----------------------------------------------------------------------
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=""NOODLE_3MIN""  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=""ストップ"">" _
+ "      <input type=""button"" " _
+ "         onClick = ""getElementsByName('NOODLE_3MIN')(0).value = 'true';""" _
+ "         value=""ラーメン(3分)"">" _
+ "   </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"
bef_sec = 0
timeup_msg = ""

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("NOODLE_3MIN")(0).value <> "false" Then
      ie.Document.GetElementsByName("NOODLE_3MIN")(0).value = "false"
      clicked_noodle_3min()
   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()
   now_cnt = ie.Document.GetElementsByName("COUNTER")(0).value
   If now_cnt = "" Then
      MsgBox "秒数を入力してください。"
   ElseIf IsNumeric(now_cnt) = false Then
      MsgBox "秒数は数字で入力してください。"
   Else
      ie.Document.GetElementsByName("COUNTER")(0).value = now_cnt + 1
   End If
end function

rem **********************************************
rem イベントハンドラ「clicked_minus()」
rem 「-」ボタンがクリックされた時の処理
rem **********************************************
function clicked_minus()
   now_cnt = ie.Document.GetElementsByName("COUNTER")(0).value
   If now_cnt = "" Then
      MsgBox "秒数を入力してください。"
   ElseIf IsNumeric(now_cnt) = false Then
      MsgBox "秒数は数字で入力してください。"
   ElseIf now_cnt > 0 Then
      ie.Document.GetElementsByName("COUNTER")(0).value = now_cnt - 1
   End If
end function

rem **********************************************
rem イベントハンドラ「clicked_start()」
rem 「スタート」ボタンがクリックされた時の処理
rem **********************************************
function clicked_start()
   now_cnt = ie.Document.GetElementsByName("COUNTER")(0).value
   If now_cnt = "" Then
      MsgBox "秒数を入力してください。"
   ElseIf IsNumeric(now_cnt) = false Then
      MsgBox "秒数は数字で入力してください。"
   ElseIf now_cnt < 1 Then
      MsgBox "秒数は1秒以上で入力してください。"
   Else
      bef_sec = Second(Now)
      timeup_msg = "時間になりました"
      status = "EXE_COUNT_DOWN"
   End If
end function

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

rem **********************************************
rem イベントハンドラ「clicked_noodle_3min()」
rem 「ラーメン(3分)」ボタンがクリックされた時の処理
rem **********************************************
function clicked_noodle_3min()
   ie.Document.GetElementsByName("COUNTER")(0).value = 180
   timeup_msg = "ラーメンができました!のびないうちにどうぞ(^_^)"
   status = "EXE_COUNT_DOWN"
end function

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

rem **********************************************
rem イベントハンドラ「exe_count_down()」
rem カウントダウン実行中の時の処理
rem **********************************************
function exe_count_down()
   now_cnt = ie.Document.GetElementsByName("COUNTER")(0).value
   now_sec = Second(Now)
   If bef_sec <> now_sec Then
      bef_sec = now_sec
      now_cnt = now_cnt - 1
      ie.Document.GetElementsByName("COUNTER")(0).value = now_cnt
   End If
   If now_cnt <= 0 Then
      MsgBox timeup_msg
      status = "IDLE"
   End If
end function

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


■次回のメルマガでは・・・

 ついに「3分間をワンタッチで計測する機能」が完成しました。

 機能の追加の方法はいろいろ考えられると思いますが、
 やはり、今あるプログラムの仕組みをよく理解して、そのプログラムの
 仕組みに沿って修正するのが良いかと思います。


 さて・・・

 今回の機能追加では、押したボタンに応じてメッセージを
 出し分けるようにしました。

 このメッセージがプログラムのあちこちに分散しているのがちょっと
 気になりますね。

 今回はメッセージが2つだけなのであまり問題がなさそうですが、
 メッセージが大量にあった場合は、ちょっとメンテナンスが大変そうですね。 

 というわけで、次回は、この問題の解決方法について考えてみたいと思います。
 皆さんも次回までに、どうすれば良いか考えてみてくださいね。


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

先日、パソコンのCPUの交換をしましたが、
パソコンが動かなくなってしまいました。

画面がまったく表示されなくなり、すごく焦りました。

どうもCPUがうまくソケットにささってなかったのが原因のようです。
CPUをさしなおしたら、ちゃんと起動するようになりました。

で・・・

そもそもなぜソケットにCPUがちゃんとささってなかったのか?

それは、ついつい横着してしまったからです。

パソコンケースの上にいろいろ物が乗っていて、
どかすのも面倒だったため、
また、パソコン内のいろいろな配線も面倒なので外さないで
作業してしまいました。

結果、マザーボードが縦の状態で、さらに手が入りにくく手元が
よく見えない状態だったので、CPUがうまくささらなかったようです。

今思えば、なんかCPUをさした時の手ごたえが甘かったような気がします。

というわけで、やっぱり、CPUを交換する時は、
多少面倒でもパソコンケースを引っ張りだして横に置いて、
マザーボードもちゃんと上から見下ろせるようにして、
さらに邪魔なケーブルを外して実施するのがよろしいようです。


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


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

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

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


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

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


●お手軽!VBScriptを使ってみよう

  コチラ ⇒ http://www.bunzin.net/program/vbscript/


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

メルマガ発行責任者情報は
 コチラ ⇒ 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