第10回 全員集合!スクリーンオブジェクト 「3.目的別オブジェクト紹介 その1.表示する」

10−3 目的別オブジェクト紹介 その1.表示する

NS Basic上からPalmデバイス画面上に表示できるものとして、現時点では、文字と画像の2種類があります。
この文字を表示するオブジェクトが「Label」、画像を表示するオブジェクトが「Bitmap」です。

まず、Labelから説明しましょう。
Labelが持っているプロパティとメソッド、及びイベントは次の通りです。

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

実際にLabelオブジェクトを使って、画面に文字を表示するには、.Labelプロパティに文字列を代入します。
例えば、

    Label1005.Label="こんにちは!"

となりますが、これは、既に使ったことがありますね。
.Labelプロパティは、プログラム中からも設定や値を参照することが出来る数少ないプロパティです。
この操作は.Textでも同じ操作が出来るのですが、面白いことに、こちらは「メソッド」と位置付けられているようです。

Labelオブジェクトを使用するとき、最初に設定するのを忘れてはいけないのが、文字数です。
これは、実行時に、.Labelプロパティや.Textメソッドで、Label上の文字を変更する場合、最初に.Labelプロパティに設定した文字の長さを超えた長さの文字を代入すると、その超えた分の文字が途切れてしまう問題です。
現時点ではNS Basicの仕様として理解しておいてください。

その他、設計時に、表示する文字の種類を.Font IDプロパティで指定することが出来ます。
これは、

Font ID種類
0standard(標準)
1bold(太字)
2large(大)
3symbol(記号1)
4symbol11(記号2)
5symbol7(記号3)
6LED(数字)
7Large Bold(大太字)

となっています。
これらの文字は、通常、キーボードから入力できないような文字を含んでいますので、予め.Labelプロパティに代入することは出来ません。
FormのAfterモジュール内で、文字コードを入力するのが良いでしょう。
例えば、Font ID=4のオブジェクトLabel1004で、
    Sub Form1003_After()
        Label1004.Label=&h04
    End Sub
とすれば、普段入力の出来ない「i」マークが表示されます。
この「i」マークを表示したラベルオブジェクトに、タップした時の処理を書いておけば、簡単なインフォメーションの出来あがりですね。
この文字コードに関して注意する点があります。それは、PalmOSが日本語版であるか英語版であるか、によって一部の文字コードが異なってしまう点です。

    ■ハンドブックより抜粋(Font ID=0)
    

NS Basicのハンドブックには、各文字コード表が掲載されていますが、例えば、この.Font IDが、0の標準フォントでは、ちょうど、下半分(&H80以降)は、英語版ではハンドブックに掲載されている記号類であるのに対して、日本語版では「半角カナ」が割り当てられています。
したがって、デバイスの種類によっては意図しない表示がされることがありますので注意して下さい。

また、イベントはタップした時に発生しますので、それに応じた処理ルーチンを記述することが出来ます。


次は、Bitmapオブジェクトです。 Labelが文字だったのに対して、Bitmapは画像を表示します。

Bitmapオブジェクト
設計時実行時
プロパティ .Hight×
.Left×
.Resource ID×
.Top×
.Visible×
.Width×
メソッド .Hide非表示にします
.Redraw再描画します
.Show表示します
イベントタップ時

NS BasicのVer.1.xでの画像の指定方法は、Basic BASICの「第3回 画像でアプリをグレードアップ」で説明しましたが、今回は、Ver.2.xがリリースされていますので、こちらの方法を説明します。
原理的には、Ver.1.xの時と同様、.Resource IDプロパティに読みこんだビットマップのID番号を指定するのに変わりはないのですが、Ver.2.xからは、モノクロ画像(1ビット)に加え、4階調(2ビット)、16階調(4ビット)、256色(8ビット)のモードがサポートされましたので、若干操作が変わっています。
IDEへ[Add Bitmap]で読み込む操作は変わりませんが、読み込んだビットマップ画像のプロパティウィンドウは、次のようになっています。

    

このように、1つの画像IDに対して、4つを画像をセットできるようになっています。
ただ、どのようなモードの画像ファイルでも、デフォルトで「1-bit Path」に読み込まれますので注意して下さい。
このような状態で、実際に表示されるのは、Palm側の画面モードに合わせた画像が自動的に選択表示されます。
通常のモノクロ機であれば、デフォルトでモノクロ(1ビット)画像が表示されますが、「ビット深度(M. Maedaさん作)」などの設定ツールを使って設定すれば、そのモードに合わせたが画像が表示されます。カラー機の場合は、256色(8ビット)が標準です。
また、全ての画像が用意されている必要はありませんが、その場合、該当する画面モードの1段階下の画像が表示されますので、例えば、カラーデバイスで、8ビット画像を用意しなければ、4ビットの画像が表示されます。
NS Basicの動作環境を考慮すれば、最低限モノクロ(1ビット)画像を、フルセットなら1,4,8ビットの3種類を指定しておけば良いでしょう。ちょうど、この色深度の画像ならWindows標準のペイントで対応可能です。

さて、各モードの画像を設定したら、このビットマップのID番号をBitmapオブジェクトの.Resource IDに指定すればOKです。 実際に画像がプログラム中に読みこまれるのは、最終のコンパイル時ですので、それまでであれば、画像ファイルを修正・変更しても問題ありません。ただ、ファイル名を変えてしまったり、消してしまった場合はその限りではありません。

一応、.Height.Widthプロパティがあり、これらの値を変えると、IDE画面上に配置したオブジェクトのサイズが変わりますが、コンパイルされた実行ファイルでは、これらのプロパティは無視されます。
したがって、.Heightプロパティより大きな画像ファイルを指定しても画像が切れることはありませんし、小さな画像ファイルを指定しても余白が出来るわけではありません。
この2つのプロパティは一見無駄のように見えますが、Bitmapオブジェクトに割り当てた画像ファイルがIDE上に表示されるわけではありませんので、これらのプロパティを実際の画像ファイルと同じサイズにして、位置合わせをするのに都合が良いです。ま、モノは使いよう、ってコトですね。

Labelオブジェクトの場合は、実行時でも表示内容の変更が出来ましたが、Bitmapオブジェクトは途中で画像ファイルを変更できません。したがって、出来ることは、表示・非表示の切替と、再描画だけです。
また、イベントは、Labelと同じように、タップ時に発生します。


モノクロびっとまっぷ

表示するオブジェクトとして忘れてはならないのがFormオブジェクト、つまり画面そのものです。
Formも特殊な位置付けですが、1つのオブジェクトですので、本稿で紹介することにしました。

Formオブジェクト設計時実行時
プロパティ .Default Form×
.Hight×
.Left×
.Modal Form×
.Show Titlebar×
.Title×
.Top×
.Width×
イベント描画前(Form_Before)
描画後(Form_After)
特殊イベント発生時(ボタン、ジョグダイヤル、画面タップ)

デフォルトで画面全体が1つのフォームとして設定されるため、.Height.Widthが160×160ピクセル、.Top.Leftがそれぞれ 0で固定であると思われがちですが、実際は、これらの値は設定することが出来ます。
また、一応、160ピクセルを超えたサイズを指定できますが、NS Basic側の制約で、実際は160×160ピクセル分しか表示されません。(標準ではハイレゾにはなりません。残念。)

フォームは、1つのプログラム中に複数持つことが出来ますので、どれを最初に表示すべきかを指定するプロパティが.Dafult Formプロパティです。
このプロパティがTrueになっているフォームが実行時最初に表示されますが、フォームが1つしかない場合は、どちらでも構いません。

作成したプログラムのタイトルバーを表示するか否かを決めるのが.Show Titlebarプロパティです。 このプロパティをFalseにすると、タイトルバーがなくなり、160×160ピクセル全面が使用できるようになります。
一方、Trueにした場合、タイトルバーが表示され、.Titleプロパティで表示するタイトル文字を指定できます。

.Modal FormはVer.1.xではサポートされなかったプロパティですが、これがTrueになっているフォームは常に前面に表示されます。したがって、自作のAlert画面を作る場合はこのプロパティを活用すると良いでしょう。

イベントについては、今までに説明した通りですので、ここでは説明しません。
ただ、注意するのは、他のオブジェクトが発生するタップイベントと同じにFormへのタップ関連イベントが発生する点です。作り始めると、結構厄介なので、この辺りは理解しておいて下さい。
(Basic BASIC「第6回 Palmに動作を伝えよう 〜 イベントのお話 〜」を参照)

前へ    目次へ     次へ

第10回 全員集合!スクリーンオブジェクト 「3.目的別オブジェクト紹介 その1.表示する」