NS Basic/Palm


気づいた点などをボチボチと...

HPのTOPに戻る
<日付選択を行う>

dim Res as integer
dim TheDate as date
    
    TheDate=today()
    Res=PopUpDate(TheDate,"日付を選択して下さい")
    if Res=1 then
	Msgbox str(TheDate)
    else
    	msgbox "日付は選択されませんでした"
    end if
上記のようなコーディングで
よく見かける日付を選択する画面を表示出来ます。

TheDateに選択した日付が入ります。

戻り値Resは
1 − 日付がユーザーによって選択された。
0 − 日付が選択されなかった。

気を付ける事は、PopUpDateで画面を呼び出す前に必ず
TheDate変数に日付を入れておかなければいけないようです。

※上記リストではToday()命令を使って現在の日付を入れています。

※マニュアルには、OS3.5が必要とあるのですが、WorkPad30JのROMのエミュレータで動きました?

<時間選択を行う>

dim Res as integer
dim StartTime as Time
dim EndTime as time
    
    Res=PopUpTime(StartTime,EndTime,"時間を選択して下さい")
    if Res=1 then
        if str(StartTime)="**:55:00" then
            Msgbox "時間指定なし"
        else
	        Msgbox str(StartTime) + ":" + str(EndTime)
        end if
    else
    	Msgbox "時間は選択されませんでした"
    end if
上記のようなコーディングで
よく見かける時間を選択する画面を表示出来ます。

StartTimeに開始時間が、EndTimeに終了時間がそれぞれ入ります。

戻り値Resは
1 − 時間がユーザーによって選択された。
0 − 時間が選択されなかった。

if str(StartTime)="**:55:00" then
の行はユーザーが指定なしでOKした場合です。
つまり指定なしの場合には、StartTime変数に(EndTime変数もですが)"**:55:00"が入ります。

※マニュアルには、OS3.5が必要とあるのですが、WorkPad30JのROMのエミュレータで動きました?

<昔懐かしの乱数発生>
昔、Basicをかじった頃、数当てゲームなんかを作ってました。
こういったものを作る時に必ず必要になるのが、乱数ですね。

マニュアルを見るとありました。
Rand命令がそうですね。
でもあのRandomize命令がマニュアルに載っていません。
昔のBasic(VisualBasicも)は
Randmize Timer とかやってましたよね?
必要ないのかな?と思い昔の記憶を頼りに
lbl1006.text=str(int(rnd()*6)+1)
とやって見ました
これでおそらく1〜6のランダムな整数値が求められるハズです。
エミュレータに通して見ると一応OKなようです。
NS Basic/PalmではRandmize命令を使わなくてもきちんとした乱数が発生出来るようです。

<ClieのJOGダイヤルの対応その後>
sub Screen1004_events()
    lbl1005.text=str(geteventtype())
    lbl1006.text=str(asc(getkey()))
    seteventhandled
end sub
※上記のプログラムをPalm本体で起動すると、全てのボタンのイベントをキャンセルしてしまうので、
ソフトリセット以外に復旧の方法がありません、注意して下さい。

※そんなに簡単には行きませんでした。

上記プログラムでリターンコードを調べて見ると
JOGダイヤルのリターンコードと、その他標準のハードキー等のリターンコードが同一であるという問題があるようです。
上手くJOGダイヤルからのリターンコードだと判別出来ればseteventhandled命令でキャンセル出来るんですが...
GetKeyのリターンコード
※アスキーコードにしたもの
ハードキー等の機能JOGの機能
0-JOGを時計回りに回した
1予定表ボタンJOGを反時計回りに回した
2アドレス帳ボタンJOGを押し続け
3ToDoボタンJOGを押しながら時計回りに回した
4メモ帳ボタンJOGを押しながら反時計回りに回した
5メニューボタンJOGを押した
6ホームボタンJOGを離した
7検索ボタン-
8Calcボタン-
11上ボタン-
12下ボタン-

<ClieのJOGダイヤルの対応>
sub Screen1004_events()
    if GetEventType() = nsbkeyorbutton then
        select case asc(getkey())
        case 0
            lbl1009.text="JoGUp"
        case 1
            lbl1009.text="JoGDown"
        case 2
            lbl1009.text="JogPressRepeat"
        case 3
            lbl1009.text="JogPageUp"
        case 4
            lbl1009.text="JogPageDown"
        case 5
            lbl1009.text="JogPress"
        case 6
            lbl1009.text="JogRelese"
        end select
    end if
end sub
※SONYから提供されているJOGダイヤルのリファイレンスを見て
自分なりに解釈したものなので、内容には自信なしです。(一応動くようですが...)

JOGのイベントは
Graffiti文字を入力したとき、
画面下部のボタンを押したとき、
アイコンエリアのアイコン(『検索』アイコン等)をタップした時
の拡張イベントとして認識されるそうです。
そこで

if GetEventType() = nsbkeyorbutton then

でNS Basic上でイベントを認識します。
その後
Select文でGetkey()関数の戻り値によってジョグの状態を認識します。
GetKey()関数の戻り値をAsc関数でキャラクタコードに変換しています。

戻り値
0-ジョグダイヤルを時計周りに回した。
1-ジョグダイヤルを反時計周りに回した。
2-ジョグダイヤルを長押ししている。
3-ジョグダイヤルを押しながら時計周りに回した。
4-ジョグダイヤルを押しながら反時計周りに回した。
5-ジョグダイヤルを押した。
6-ジョグダイヤルを放した。

という感じのようです。どうでしょう?あってます?(笑)

※PowerJOGについて
とても便利なPowerJOGですが、PowerJOGが有効になっていると
JOGを押したイベントが認識出来ないようです。
多分、PowerJOGがそのイベントを受け取ってしまうからでしょうか?

まぁ、基本はJOGを放したイベントで普通は押した時の処理をするようなので問題無しでしょうか?

- Page End -