第10回 全員集合!スクリーンオブジェクト 「3.目的別オブジェクト紹介 その4.タップ」

10−3 目的別オブジェクト紹介 4.タップ

入力関連の次は、画面へのアクションに注目してみましょう。
Palmデバイスは、基本的にスタイラスペンによる画面へのタッチが中心の操作体系ですが、それらの操作に合わせたオブジェクトとして次のものが用意されています。
「Button」「Gadget」「Repeater」の3種類です。

Buttonは、今までも登場してきました、お馴染みのオブジェクトです。

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

この辺りになると、もう初登場のプロパティはそれほど多く見当りませんね。
目新しいのは、まず、.Frameプロパティと.Non-bold Frameプロパティの2つです。
これは、Buttonの周りに「枠」を表示するか否かを指定するプロパティで、True/Falseで指定します。
.FrameプロパティをTrueにするとボタンの外周に枠が描かれ、.Non-bold FrameプロパティをFalseにすると、太線の枠になります。ただし、Non-bold Frameの方は、外枠が描かれていないい場合は無視されます。
その他、プロパティやメソッドで、特に説明を必要とするものはありませんし、イベントは、基本中の基本、タップ時に発生するだけですので、それほど複雑なオブジェクトではないですね。




Gadget(ガジェット)は、ちょっと特殊なオブジェクトで、実行時、画面上に何も表示されません。
このオブジェクトは、タップだけを受け持っていたのですが、その他「Signature」という拡張機能も備えています。

Gadgetオブジェクト
 
設計時実行時
プロパティ .Height×
.Left×
.Top×
.Visible×
.Width×
メソッド .Hide非表示にします
.Show表示します
.StartSignatureCapture署名機能を開始します
.EndSignatureCapture署名機能を終了します
.EraseSignature表示されている署名を削除します
.DisplaySignature署名を表示します
イベントタップ時

プロパティは一般的なサイズと位置を指定するものだけですので、特に説明は不要でしょう。
メソッドには「何も表示されない」オブジェクトのはずなのに.Hide.Showの表示系メソッドがあります。
ん?何も見えないのに、表示/非表示を指定してどうするんだろ?って感じですが、「非表示」に設定されたGadgetオブジェクトは、イベントを受け付けなくなりますので、機能的に「見えない」状態になっているわけですね。



一方、特殊な拡張機能「Signature」は、Gadgetオブジェクト上に線画を書いたり、それを保存したりできる簡易手書きメモのような機能です。
色を指定したり、複雑な描画ができるわけではなく、単に「署名(Signature)」ができる程度ですが、「画像を入力できる」特殊な機能です。
この機能は、Ver.2.xから正式にハンドブック上に登場していますので、簡単に概要を説明しておきます。

この機能を使うと、Gadgetオブジェクト上に「手書き」をすることが出来ます。
具体的には、

    Gad.startSignatureCapture

のコードが実行されてからペンなどで画面のGadgetオブジェクト上に手書きが出来るようになります。(Gadは、配置したGadgetオブジェクトの名前です)
そして、描き込んだ手書きを保存するには、

    Dim strIMG as String

    strIMG=Gad.EndSignatureCapture

となります。そう、画像データは、文字列型の変数に代入されます。このフォーマットは「PalmOSの圧縮ビットマップである」とハンドブックにはありますが、とりあえず、読み飛ばしても良いでしょう。
一方、このデータを再度表示するには、

    Gad.DisplaySignature strIMG

とすれば表示されます。
消すには、

    Gad.EraseSignature

です。それほど複雑なコードではありませんので、簡単な手書きメモであれば、すぐにでも作成できます。
この機能の特徴は、署名データが「文字列型」になる点です。そのため、データベースへの保存や読み込みの取り扱いが容易です。
ただ、CLIE N600Cでは正常に動作確認が出来ませんでした。ハイレゾかPalmOS4.0が原因かと思われますが、現在調査中です。
(後日追記:現在のバージョンでは、問題なく動作します。2002.05)


さて、基本的にButtonGadgetが一度タップをしたらおしまいの「一話完結」タイプであるのに対して、Repeaterオブジェクトは、連続的にイベントを発生します。

Repeaterオブジェクト
 
設計時実行時
プロパティ .Anchor Left×
.Font ID×
.Frame×
.Height×
.LabelR/W
.Left×
.Non-bold Frame×
.Top×
.Visible×
.Width×
メソッド .Hide非表示にします
.Redraw再描画します
.Show表示します
.Text表示されている値を参照するか、セットします
イベントタップしている間

見てわかる通り、プロパティとメソッドは、Buttonと同じなので説明は省略してもよいですね。
違う点は、イベントが「タップしている間、ず〜っと発生している」ということです。
これは、タップをしている間中、Repeaterオブジェクトに記述されたイベントモジュールが繰り返し実行され続ける、ということですが、簡単なコードでは
    Sub object1004()
      Beep
    End Sub
というコードをRepeaterオブジェクトのイベントモジュールに記述すれば、Repeaterにペンが触れている間中、Beep音が鳴り続けます。
使い方は、色々考えられますが、例えば、2つのRepeaterを用意して▼と▲を表示しておけば、値を増やしたり減らしたりすることがリピート付きで実現できます。
ま、オートリピートのついたButtonですね。

このように、ペンが中心のデバイスですから、シンプルで、かつ必要な機能を持ったオブジェクトが用意されています。
特に、1回押すのか、何度も押すのかという点に注目すれば、ButtonRepeaterの使い分けが出来そうですし、また、Gadgetを使えば隠し機能のようなものも作れそうですね。
更に、Signature機能を使えば、今まで出来なかった手書きでのデータ入力が出来るようになります。


前へ    目次へ     次へ

第10回 全員集合!スクリーンオブジェクト 「3.目的別オブジェクト紹介 その4.タップ」