第12回 広がる世界〜共有ライブラリを使ってみよう「4.ラーメンタイマー!!アラーム関数」

12−4 ラーメンタイマー!!アラーム関数

もう1つ紹介しておきましょう。
予定表などで、時間が来るとアラーム音と共にダイアログが表示される仕組み、あのアラームをこのライブラリでは使うことが出来ます。
ただ、完全にアラーム機能を制御するのは困難なため、直接アラームを制御する機能は用意されておらず、アラーム機能を代行するプログラムに処理を任せる、という方法で、それらを実現させています。何を言っているのか、よくわからないかもしれませんが、要するに、アラームをセットするのは、アラーム機能ではなく、それを代行してくれるプログラムにセットする、と事です(わかり難いなぁ)

これらの代行プログラムには、次の5つが用意されています。
	NSBAlarmProxy1.prc
	NSBAlarmProxy2.prc
	NSBAlarmProxy3.prc
	NSBAlarmProxy4.prc
	NSBAlarmProxy5.prc
アラーム機能を使いたい場合は、NSBSystemLib.prcと、代行プログラムをインストールする必要がある、と言う事です。逆を言えば、アラームを使ったプログラムを5つまで扱う事が出来る、という事ですね。
まだ、ピンときませんが、ま、アラームということで、一定時間が経ったら、メッセージを表示する、という簡単なものを作ってみましょう。いえ、正確には、それらしいサンプルを探してみましょう。
あ、ありました、
	Dim status as Integer
	Dim alarmPgm as String
	Dim alarmTime as Integer
	Dim alarmCmd as Integer
	Dim alarmMsg as String

	alarmPgm = "NSBAlarmProxy1"
	alarmTime = 3600    ' 1 hour from now
	alarmCmd = 3
	alarmMsg = "Hey Wake UP!"
	status = NSL.SetAlarm(alarmPgm, alarmTime, alarmCmd, alarmMsg)
これが、どうやら、一定時間語に「Hey,Wake UP!」と表示するサンプルのようです。
ゴメンナサイ、1つ気付きました。単にメッセージを表示するコマンドは、alarmCmd = 2ですね。英語の説明の方も 3ですので、私のミスではありませんが(笑)、これを 2にて試しましょう。
まぁ、さすがにアラームが鳴るまで1時間待つほど余裕はないでしょうから、10秒くらいにしちゃっても良いですね。そんなことで、フォームにボタンが1つあるだけの簡単なプログラムで、ボタンには次のコードを入れてみましょう。
	Sub object1004()
	    Dim status as Integer
	    Dim alarmPgm as String
	    Dim alarmTime as Integer
	    Dim alarmCmd as Integer
	    Dim alarmMsg as String

	    alarmPgm = "NSBAlarmProxy1"
	    alarmTime = 10
	    alarmCmd = 2
	    alarmMsg = "Hey Wake UP!"
	    status = NSL.SetAlarm(alarmPgm, alarmTime, alarmCmd, alarmMsg)
	End Sub
さて、ボタンをタップして待ちましょう。

   → 

おお!アラームが発生しましたね。
でも、予定表のアラームって、電源が切れていても発生するけど・・・確かにそうですね。試してみましょう。

   → 

確かに、電源が切れていてもアラームが発生しました、この機能、難しい説明を読むよりも簡単に使えそうです。

では、アラームコマンド(alarmCmd)を 3 にすると、他のアプリが起動するらしいので、そちらを試してみます。
標準でインストールされている「予定表」を起動することにしましょう。alarmCmd=3に指定した時には、表示するメッセージ(alarmMsg)にプログラム名を指定するらしいので、ここに「Date Book」と入れます。Palmデバイス上のアプリケーションには、 プログラム名とランチャー表示名があるので注意して下さい。予定表は「Date Book」、メモ帳は「Memo Pad」です。
これは、大文字小文字を区別しますので、次のように正確に修正します。
	    alarmCmd = 3
	    alarmMsg = "Date Book"
さて、これでどうでしょうか?

   → 

無事に、アプリケーションが起動しました。「意外と」と言ってはナニですが、簡単だと思いませんか?
アラームコマンドの説明を見ると、
        1 = システムアラーム音のみ鳴らします。
音を鳴らすだけの事も出来るようですね。

さて、予定表のアラームを使ったことがある方なら分かると思いますが、あのアラームには、予定時刻に鳴らし、その後一定時間毎に再度通知してくれる機能があります。あのような繰り返しも、このアラーム関数は持っています。
	NSBSystemLib.SetAlarmReset resetTime, resetLimit

	resetTime as Integer
        	再セット間隔(秒)
          	0 = 自動的にアラームを再セットしません

	resetLimit as Integer
        	生じることができる自動再セットの限界。
	         -1 = 再セットは制限されていません。
        	      自動再セットを止めるためにCancelAlarm()を使用しなければなりません。
	          0 = 自動的にアラームを再セットしません。1回で終わります。
訳した当時、よくわからなかったので「リセット」と和訳してしまったのですが、あの山田さんのコメントから「再セット」というのが妥当だと分かりましたので、書き換えてみました。
要するにこれは、NSBSystemLib.SetAlarm()でセットしたアラームが発生した後、自動的に同じ処理を再セットする機能です。 最初のサンプルに、再セットの機能を追加してみましょう。
	Dim status as Integer
	Dim alarmPgm as String
	Dim alarmTime as Integer
	Dim alarmCmd as Integer
	Dim alarmMsg as String

	Dim resetTime as Integer
	Dim resetLimit as Integer

	resetTime = 5
	resetLimit = -1

	alarmPgm = "NSBAlarmProxy1"

	alarmTime = 10
	alarmCmd = 2
	alarmMsg = "Hey Wake UP!"
	
	NSL.SetAlarmReset resetTime, resetLimit

	status = NSL.SetAlarm(alarmPgm, alarmTime, alarmCmd, alarmMsg)
このコードを実行すると、10秒後にダイアログが表示され、その後5秒毎にダイアログが表示されるようになります。
注意事項ですが、まず、再セットの間隔、resetTime という引数は、2秒以下に設定してはいけません、という事です。これは、諸々の処理にNS Basic側が2秒必要なので、この秒数以下にしてしまうと、動作上、止める事が出来ない間隔で連続的にアラームイベントが発生してしまうためです。そういう時は、リセットするしかありません。
また、SetAlarmReset()の位置ですが、これは、SetAlarm()の前に置かなければならない、という事です。
関数を使用する際の注意事項はこの2点ですが、まだ、このサンプルを動かしてはいけません。
もし、動かしてしまった人は、リセットして下さい。なぜなら、再セットが resetLimit = -1 によって制限されていないからで、この状態だと、リセットするまで止まりません。
そういう、アラームを止めるには、CancelAlarm()という関数を使って、次のようなコードを書かなければいけません。
    Dim status as Integer
    Dim alarmPgm as String

    alarmPgm = "NSBAlarmProxy1"
    status = NSL.CancelAlarm(alarmPgm)
サンプルを試す時には、こちらの動作をするボタンも貼りつけておきましょう(笑)
さて、これを利用すれば「ラーメンタイマー」簡単に作れますね。
友人penpenさんのアイディアでは、各社のカップ麺の作り方と時間をDB化して、それを選ぶだけで時間がセットされるようなのはどうだろう?と言われましたが、私は、3分、4分、5分の3つのボタンがあれば事が足りると思いました。色々なアイディアの広がるアラーム機能、皆さんは、どんなタイマーを考えますか?


そんなことで、NSBSystemLib中の比較的簡単に使えるいくつかの機能を紹介しました。
今回の内容は、機能の紹介が主のようなので、どちらかと言えばBasic BASICとしては相応しくないかと思うかも知れません。
しかし、与えられた機能やライブラリ類に対して、添付しているサンプルプログラムなどを使って機能を試したり解析するという姿勢は、今後、マニュアル等を読む上で参考になる姿勢です。その他の機能についても、サンプルプログラムを試しながらチャレンジしてみて下さい。
私が試した中では、コピー&ペーストなどの範囲指定とかも面白いと思いました。また、フォーカスのコントロールが拡張されていたりするので、実は、自作アプリ、A.S.Mが大幅に改良できるんじゃないかと思っています。


前へ     目次へ     次へ

第12回 広がる世界〜共有ライブラリを使ってみよう「4.ラーメンタイマー!!アラーム関数」