第10回 全員集合!スクリーンオブジェクト 「3.目的別オブジェクト紹介 その5.状態を変更する」

10−3 目的別オブジェクト紹介 5.状態を変更する

最後に紹介するのが、状態を変更する目的で使うオブジェクトです。
これには、「Checkbox」「Pushbutton」「Scrollbar」の3つがあります。
では、「Checkbox」から説明しましょう。

Checkboxオブジェクトは、いわゆる「チェック印」をつけるもので、環境設定などでお馴染みのオブジェクトです。

Checkboxオブジェクト
 
設計時実行時
プロパティ .Anchor Left×
.Font ID×
.Group ID×
.Height×
.LabelR/W
.Left×
.Selected×
.Top×
.Visible×
.Width×
メソッド .Hide非表示にします
.Redraw再描画します
.Show表示します
.Status状態を返します
.Text表示されている値を参照するか、セットします
イベントタップして選択後

チェック機能を除いた基本的なプロパティとメソッドは、Labelオブジェクトに似ていますね。
さて、まず、.Selectedプロパティについてですが、これは、設計時にTrueかFalseを設定して、チェック状態の初期値を決めるだけで、プログラム中では使えません。プログラム中から、Checkboxオブジェクトのチェック状態を参照するには、.Statusメソッドを使います。
選択されていれば「NsbChecked」、そうでなければ「NsbUnchecked」を返します。
例えば、
    If Checkbox1004.Status=NsbChecked Then
      MsgBox "選択されています。"
    End if
のように使います。
このNsbCheckedやNsbUncheckedのようなものを「組み込み定数」といいます。 組み込み定数は、予め設定されている値に対して、その数値などを覚えていなくても良いように、簡単な単語として定義されているものです。
このNsbCheckedなどにも数値が定義されており、NsbCheckedは「1」、NsbUncheckedは「0」が定義されています。
NS Basicで定義されている組み込み定数では、大抵の場合「真」を表す場合「1」、「偽」を表す場合は「0」が定義されていますので、NsbUncheckedなどの複雑な組み込み定数の単語を忘れてしまっても、なんとかなります。

また、.Statusメソッドを使って、状態を変更することも出来ます。
単純に、

    Checkbox1004.Status=NsbChecked

とすれば、チェック印を表示できます。

もう1つは、.Group IDプロパティですね。 これは、オブジェクトをグループ化するプロパティで、初期値の「0」以外を指定すると、同じGroup IDを持った複数のオブジェクト間でチェック印が「相互排除」されます。つまり、どれか1つしかチェックできない状態が自動的に実装できるわけですね。
また、.Group IDプロパティを指定すると、どれか1つが必ず選択されている状態になりますので、いわゆる「オプションボタン」になるわけです。
しかし、このオプションボタンは若干「中途半端」なので注意して下さい。
例えば、.Group IDを指定しても、自動的にどれか1つがチェックされる訳ではないので、意図的にどれかの.SelectedプロパティをTrueにするなどの初期値を設定する必要があります。
また、.Group IDを指定して相互排除になっても、モジュール側から.Statusメソッドで操作すると相互排除は無視され、複数のCheckboxがチェックされている状態もできてしまいます。
その他、オブジェクトが1つしかなくても.Group IDを設定すると相互排除になる点も注意点です。
そのため、一度チェックすると、「他の」Checkboxをチェックしないとチェックが外れません、すなわち、タップ操作ではチェックが外れなくなりますので、ご注意下さい。

イベントは、タップして変化した状態が画面に表示された後に発生します。なので「○○が選択されている状態で、このオプションをチェックすることは出来ません」のようなチェックモジュールをイベントモジュール内に記述できます。

Checkboxに比べて、画面上でダイナミックに選択状態を表示できるのが「Pushbutton」オブジェクトです。 これは、単なるチェック印ではなく、オブジェクト全体が反転表示されるので見た目上わかりやすいですし、大きな表示をすることで、操作も楽になります。

Pushbuttonオブジェクト
 
設計時実行時
プロパティ .Anchor Left×
.Font ID×
.Group ID×
.Height×
.LabelR/W
.Left×
.Selected×
.Top×
.Visible×
.Width×
メソッド .Hide非表示にします
.Redraw再描画します
.Show表示します
.Status状態を返します
.Text表示されている値を参照するか、セットします
イベントタップして選択後

プロパティ、メソッド及び、イベントはCheckboxと全く同じです。 これほど説明が簡単なオブジェクトは初めてですが、基本機能が同じなので当たり前といえば当たり前ですね。 動作もCheckboxと共通で、画面上にCheckboxPushbuttonを配置して、同じ.Group IDを設定すると、これらの間で相互排除的な動作となります。したがって見た目が違うだけで、PushbuttonCheckboxは同じもの、と考えても差し支えないと言えます。

    
    ■同じGroup IDを持つグループ内では、1つにだけチェックできる


最後は、Scrollbarオブジェクトです。 スクロール方向は、縦方向のものしかありませんが、IDEのツールボックスでは横向き矢印がScrollbarですので一瞬探してしまいます。

Scrollbarオブジェクト
 
設計時実行時
プロパティ .Height×
.Left×
.Max Value×
.Min Value×
.Page Size×
.Top×
.Value×
.Visible×
.Width×
メソッド .Current値を得るかセットします
.Hide非表示にします
.Max最大値を参照するか、セットします
.Min最小値を参照するか、セットします
.PageSizeページサイズを参照するか、セットします
.Redraw再描画します
.Show表示します
イベント値が変化した時

このオブジェクトは、今までのものに比べてちょっとメソッドの種類が多いですね。
Scrollbarは、.Max Value.Min Value.Page Sizeという3つのプロパティでその機能的な値が決定されます。
.Max Value.Min Valueは、それぞれScrollbarの最大値と最小値を設定しますが、.Max Valueは、.Min Value以上である必要があります。
ちなみに、プロパティウィンドウでは、その条件に反する値をセットすると、警告ダイアログが表示され、設定できないようになっています。
しかし、同じ値を入れた場合は警告が表示されず、そのまま正常にコンパイルできてしまいますが、実行時、Scrollbarが表示されなくなるので注意して下さい。
また、.Page Sizeプロパティは、Scrollbarの網掛け部分をタップした時の移動量を設定するもので、それに合わせて、バーの表示サイズが変化します。(ちなみに、▲や▼をタップすると、1ずつ変化します。)

    

Scrollbarには初期設定用のプロパティに対して、ほとんど同じ働きをするメソッドが揃っています。
(どうやら、プログラム中で「.Max Value」のように、途中で空白のあるプロパティを扱えないので、メソッドが1単語になっているような感じですね) 唯一異なるのが、.Valueプロパティに対して、.Currentメソッドで値を設定する点でしょうか。

    × Scrollbar1004.Value=10
    ○ Scrollbar1004.Current=10

細かいことを言えば、プロパティでは「Page Size」なのに、メソッドでは「PageSize」になる点もそうですね。
動作的な事では、.Min Valueプロパティは、.Max Valueを超えた値を設定できないのに対し、.Minメソッドでは最小値を.Max Valueプロパティの設定値以上に設定することが出来ます。
しかし、設定すると、リセットが必要なエラーが発生しますので、注意して下さい。

このように、プログラム中からもメソッド使ってScrollbarの内容を設定できるので、入力された値やデータベースから取得した値によって、最適な状態を動的に設定できるわけですね。
また、CheckboxPushbuttonが「○」か「×」かの2つの状態を表すのに対して、Scrollbarは、最大値や最小値を適当に設定すれば、何段階でも状態を表すことが出来る便利なものです。

イベントは、値が変化した時に発生します。したがって、バーではない網掛け表示部分を押しっぱなしにするとバーが動き続けますので、イベントは連続的に発生します。


とりあえず、NS Basicで利用できるスクリーンオブジェクトを一通り紹介してきました。
使用目的に応じた分類にしましたので、既存のユーザーの方のリファレンスとしても活用できるかもしれません。
これらの種類は多いか少ないか、という点はともかく、Palmデバイスで利用できる必要な部品は全て揃っている感があり、開発環境としてのNS Basicはとても使いやすいのではないかと思います。若干、Visual BASICと違う点があり、既に使っている方にとっては戸惑うところもあるかもしれませんが、ま、NS Basic自体が扱いやすいので許してしまいましょう。


前へ    目次へ     次へ

第10回 全員集合!スクリーンオブジェクト 「3.目的別オブジェクト紹介 その5.状態を変更する」