Palm Programmer's Laboratory

トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

【NS Basic/Palm】PopupDateを使用する際の注意

[開発情報]

【NS Basic/Palm】PopupDateを使用する際の注意

  • PopupDateをPalmOS5.4で使用する際の注意点について解説します。

概要

PopupDateは、PalmOS標準の日付入力用ポップアップを使用してユーザに任意の日付を入力させるための、非常に便利な関数です。
しかし、PalmOS5.4環境でこのPopupDateを使った場合に、何故か日付が変更できない事があります。
ここでは、PalmOS5.4環境でPopupDate関数を使う際の注意点について解説します。

PopupDateが上手く動作しないコード

以下のコードをご覧下さい。

Sub Form1003_After()
    Dim dDay as Date

    dDay=Today()
    Selector1004.Text = Str(dDay)
End Sub
Sub object1004()
    Dim dDay as Date
    Dim Res  as Integer

    dDay=Today()
    Res=PopUpDate( dDay, "Enter the Date" )
    Selector1004.Text = Str(dDay)
End Sub

フォームを表示する際にAfterコード内でSelectorに今日の日付をセットしています。
さらに、Selectorをタップする事でPopupDateを実行し、任意の日付を日付入力用ポップアップから入力するようになっています。
入力された日付は、Selectorに反映されます。

一見何の問題も無いプログラムのようですが、何故かPalmOS5.4環境では日付入力用ポップアップから入力した日付が、Selectorに反映されません。

これは、日付入力用ポップアップを閉じたあとの処理が、PalmOS5.4とそれ以外のバージョンのOSで異なっているのが原因です。

PalmOS5.4では日付入力用ポップアップをクローズした際に、何故かAfterコードが実行されてしまいます
と言う訳でせっかく新しい日付を選んでも、Afterコードを実行した際にSelectorに今日の日付が設定されてしまい、日付が更新されていないように見えるのです。

PopupDateが上手く動作するコードのサンプル

と言う訳で、原因が判ってしまえば回避方法はいくつか考えられますが、なるべくIF文などで分岐しないスマートなコードの例を以下に記します。

Sub Project_Startup()
    Global dDay as Date
    dDay = Today()
End Sub
Sub Form1003_After()
    Selector1004.Text = Str(dDay)
End Sub
Sub object1004()
    Dim Res as Integer

    dDay=Today()
    Res=PopUpDate( dDay, "Enter the Date" )
    Selector1004.Text = Str(dDay)
End Sub

先ほどのプログラムと違うのは、日付を扱う変数dDayをグローバル変数としてしまい、Startupコード内で今日の日付を定義しています。
Afterコード内では変数への値入力を行わず、Selectorへの日付セットのみ行うようにしました。
こうする事によって、例え日付入力のあとにAfterコードが呼ばれても、選択した日付がSelectorに登録されるようになっています。

注意点

同様の問題はPalmOS5.4だけでなく、今後登場するであろう新バージョンのOSで発生することも考えられます。
また、この件はNS Basicの不具合と考える事が出来る問題であり、今後NS Basicのバージョンアップで修正されるかもしれません。
そうなるとユーザが使用しているNSBRuntimeのバージョンにも依存する問題にもなる可能性がありますので、PopupDate関数を使用する際は、そのような環境に左右されないコーディングを心がけるようにするべきでしょう。

コメント

このページの情報に関する誤りや追加情報がありましたら、コメントをお願いします。

お名前: コメント:


表示された文字列