第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.ラーメンタイマー!!アラーム関数」
|