━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ レンタル掲示板とクイズ投稿サイトを開発した櫻井文人の プログラムの考え方が身につくメルマガ『プログラムは考え方です』 ─────────────────────────────────── メルマガ発行人 櫻井文人のプロフィール ⇒ http://www.bunzin.net/program/prof.html ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ こんにちは、メルマガ発行人の櫻井文人です。 電池がいらないリモコンができたみたいです。詳しくは編集後記で。 引き続きイベント駆動型プログラミングを使ったタイマーのプログラムを 作っていきましょう。 今回のメルマガでは、 タイマーの「スタート」ボタンがクリックされた時の処理を 追加してみます。 ─────────────────────────────────── 【お知らせ】 ダイエットも目指せる、美味しいコーヒー! メタカウンセリングコーヒー 販売価格:1,980円 (税込:2,079円) コチラ ⇒ http://www.moshimo.com/article/121691/110174 4個買ったら送料無料でお届けします! ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■■ タイマーの「スタート」ボタンがクリックされた時の処理 ─────────────────────────────────── 今回は、「スタート」ボタンをクリックしたら、 画面の入力欄の秒数のチェックを行った後、 タイマープログラムの状態が「カウントダウン中の状態(EXE_COUNT_DOWN)」 になるように、プログラムを修正します。 ちなみに、今回の修正だけでは、まだカウントダウンはされません。 ■「スタート」ボタンがクリックされた時の処理を追加 タイマーのプログラムのイベントハンドラー「clicked_start()」に 「スタート」ボタンがクリックされた時の処理を追加します。 追加後のイベントハンドラー「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行目: status = "EXE_COUNT_DOWN" 16行目: End If 17行目:end function 今回は6行目から16行目を追加しました。 ・6行目では、画面の入力欄から秒数を取得して、now_cnt変数に 格納しています。 ・7行目から13行目までは、 入力された秒数のエラーチェックをしています。 入力された秒数が空っぽだったら 「秒数を入力してください。」と、 入力された秒数が数字でなかったら 「秒数は数字で入力してください。」と、 入力された秒数が1秒以上でなかったら 「秒数は1秒以上で入力してください。」と、 エラーを表示します。 入力された秒数にエラーがなかった場合だけ、 14行目以降の処理を実行します。 ・14行目では、Second関数で得られるの現在の秒(1秒〜60秒)を bef_sec変数に格納しています。 「カウントダウン実行中の時の処理」として、 定期的に現在の秒を取得して前回取得した秒と比較し 前回と違う秒だったら1秒経過したと判断してカウントを1減らす 処理を追加する予定です。 bef_sec変数は、前回取得した秒を格納するために使用します。 というわけで、bef_sec変数には、 「スタート」ボタンがクリックされた時点で、現在の秒を格納して おきます。 ・15行目では、タイマープログラムの状態を 「カウントダウン中の状態(EXE_COUNT_DOWN)」に変更しています。 タイマープログラムの状態が 「カウントダウン中の状態(EXE_COUNT_DOWN)」になると、 イベントループ内から「カウントダウン実行中の時の処理」を 実行するためのイベントハンドラ「exe_count_down()」が 呼ばれるようになります。 ■修正後のプログラム 以下が、修正後のタイマープログラムです。 ※前回まで「start_time」という名前の変数がありましたが、 実際の用途と名前が、いまいちしっくりこなかったので「bef_sec」と いう名前に変えました。 ---------------------------------------------------------------------- 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" bef_sec = 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() 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) status = "EXE_COUNT_DOWN" End If end function rem ********************************************** rem イベントハンドラ「clicked_stop()」 rem 「ストップ」ボタンがクリックされた時の処理 rem ********************************************** function clicked_stop() 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() end function rem プログラムの終了 ---------------------------------------------------------------------- ■プログラムを動かしてみる。 途中からメルマガを読んだ方などのために、復習も兼ねて、プログラムを 動かす方法を記述しておきます。 【プログラムを動かす方法】 (1)「rem プログラムの開始」から「rem プログラムの終了」までを コピーしてメモ帳を開いて貼り付けましょう。 (2)そして「timer.vbs」いうファイル名で適当な場所に保存しましょう。 (3)保存した「timer.vbs」をダブルクリックすると、 すぐにプログラムが動きます。 ■次回のメルマガでは・・・ いよいよ、タイマーを動かします。 次回は、「カウントダウン実行中の時の処理」を追加します。 お楽しみに・・・。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■■ 編集後記 ─────────────────────────────────── 電池がいらないリモコンができたそうです。 なんと、指でリモコンを押した時に生まれる振動を使って発電するそうです。 http://www.asahi.com/business/update/1117/TKY200911160377.html そんなふうにして生まれた電気を使うのも驚きですが、 そんな些細な電気で、動くリモコンがあることに、もっと驚きました。 そこまで、技術がすすんでいたことに驚きです。 そのうち、それほどパワーのいらない電気で動くものは、 ほとんど電池いらずになってしまいそうですね 最後までお読みいただき、ありがとうございました。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ●櫻井が開発したレンタル掲示板は コチラ ⇒ 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 (メール送信の際は、●を@に置き換えてください。) (櫻井が確実に読みますが、返信は保障できません。) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ |