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