━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ レンタル掲示板とクイズ投稿サイトを開発した櫻井文人の プログラムの考え方が身につくメルマガ『プログラムは考え方です』 ─────────────────────────────────── メルマガ発行人 櫻井文人のプロフィール ⇒ 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 (メール送信の際は、●を@に置き換えてください。) (櫻井が確実に読みますが、返信は保障できません。) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ |