最近になって、Window に新しいプロパティ MacProcID が追加され、すでにいくつかの議論が行われた。私は、このことが REALdatabase 以来の、REALbasic への新たな良き引きつけ役の一つとなるように思う。このチュートリアルでは、その驚くべき能力を明らかにし、読者各位のプロジェクト中での使用方法を示すことを目指す。
本稿では、ProcID プロパティの使い方を紹介し、全ての標準 ProcID をリストアップする。本稿に示す情報の大部分は、自らを pepsi と名乗る人物からのメールに基づいている。氏には大いなる謝意を表したい。このチュートリアルの第2部では、カスタム WDEF について記述する。まずはこの第一部を読み、後に役に立つであろう基本的な知識を身につけることを推奨する。
始めるにあたって、空のデフォルトプロジェクトを一つ用意してほしい。つまり、REALbasic を起動すると自動的に生成されるものである。それには既に変更可能なデフォルトウィンドウが一つ含まれているはずだ。後でリソースファイルを追加する必要があるが、まずはこれでOKだ。
System 7 ユーザにも使用できるいくつかのデフォルトウィンドウがあり、REALbasic の Frame プロパティで扱えるものと基本的に同じであるが、ウィンドウのふるまいとは独立にそれを選択できる。
私は、これら全てを MacOS 7.6.1 環境下で試し、問題なく動作した。もし、もっと古いシステムがインストールされている場合には、テストを行って問題が生じたら私にレポートしてほしい。
これらのウィンドウフレームを使うには、MacProcID フィールドに適切な ID を入力し、確認の為に Command-R を押すだけでよい。残念ながらウィンドウフレームに対する変更はエディターで直接見ることができないのだが、プログラムを走らせればすぐに見ることができる。
ID | description | items | optional | growable | notes | legend: close box grow box zoom box window shade box (system 8.x only) growable は対象ウィンドウがリサイズ可能なことを示す。(grow box を描画可能であることとは異なるので注意) | |
---|---|---|---|---|---|---|---|
0 | Document Window | yes | 1) | ||||
1 | Modal Dialog | no | |||||
2 | Plain Box | no | |||||
3 | Shadow Box | no | |||||
4 | Document Window | no | |||||
5 | Moveable Modal Dialog | no | |||||
8 | Document Window | yes | |||||
12 | Document Window | no | |||||
13 | Moveable Modal Dialog | no |
1) REALbaisc ではデフォルトフレームを使用することを示すために値 0 を使うので、ProcID 0 を使用することは出来ない。
optional に示されているシステムボタンは、Window のプロパティとして ON/OFF を制御可能である。items に示されたものは OFF にすることができないが、将来のバージョンの OS では OFF にすることが可能になるかもしれないので、プロパティウィンドウで設定が可能になっている。
これらは角が丸いひとつながりのウィンドウで、おそらく時折目にしているだろう。今となっては少々古い見た目であり、もはや使われることは殆どない。近い将来、Apple はデザインを更新するだろう。
ID | description | optional | growable | notes |
---|---|---|---|---|
16 | DA Window | no | ||
18 .. 31 | alternate radii | no | 2) |
2) ProcID 18 〜 31 は角の丸みの為の半径値が異なるが、その他は ProcID 16 と同様である。
WDEF -32767 の ProcID -524272 及び -524270 〜 -524257 を上記の代わりに使うことも可能であるが、どちらを使うか悩む余地はないだろう。
ウィノイド(winoids) は、小さなタイトルバーを持ち、故にシステムボタンアイテムも小さい。通常はフローティングパレットに使用されるので「フローティングウィンドウ」とも呼ばれる。この種のウィンドウは、無数にある(フリーの)ウィノイド WDEF が多くのソフトウェアパッケージに採用された結果、一般的になった。プロジェクトでフローティングウィンドウを使った場合、REALbasic は自動的にこの WDEF のコピーをアプリケーションに追加する。しかし、System 7.5 以降では、システムの一部に組み込まれている。
ID | description | items | optional | growable | titlebar | |
---|---|---|---|---|---|---|
2048 | Winoid | yes | top | |||
2049 | Winoid | yes | left | |||
2052 | Winoid | no | top | |||
2053 | Winoid | no | left | |||
2056 | Winoid | yes | top | |||
2057 | Winoid | yes | left |
左側にタイトルバーを持つウィンドウはウィンドウシェードが不可能であり、さらにウィンドウタイトルを表示できない(ではなぜ「タイトルバー」と呼ばれるのだろう?)ことに留意されたい。
ここで、しばし "WDEF" について説明する。WDEF の実体はシステムとアプリケーションのリソースフォークの両方に組み込むことの出来るプログラムコードの集まりである。そしてウィンドウの外観とふるまいを定義する(故に Window DEFinitions の略)。
WDEF を扱うために知らなければ行けない値は、その ID (ResEdit で調べられる)であり、それを 16 倍した値である(したがって WDEF 1 の ProcID は 16 から始まり、WDEF 128 の ProcID は 2048 から始まる)。WDEF がバリエーションを持つ場合には、バリエーションコードを ProcID に足してやればよい。例えば、WDEF 1 のバリエーション 2 は ProcID 18 となる。
このチュートリアルの第2部では、変形ウィンドウのためのカスタム WDEF のことを学ぶが、当面は標準の WDEF を扱う。
MacOS 8.0 で、Apple はインタフェイス要素の描画(及び定義)の、新しい方法を導入した。これは従来のウィンドウフレームのインタフェイスの更新を意味するばかりでなく、新しいシリーズのウィンドウスタイルが導入されたことをも意味する。
System 7 でその新しい要素を利用可能にする為に Appearance Lib をインストールすることが可能である。けれども、ユーザがこのライブラリをインストールしていなかった場合、デフォルト WDEF が使用される。この時、見た目は奇妙になるが、クラッシュや他のおかしいふるまいを導くものではない。Apple のデベロッパページから Appearance SDK を入手可能である。著者は MacOS 7.6.1 に Appearance ライブラリをインストールして使っているが、良好に動作している。
これらは、水平・垂直 zoom box を利用可能であることを除けば、通常のドキュメントウィンドウである。それらの zoom box は、ウィンドウのリサイズが水平方向のみ、または垂直方向のみの場合に使用するべきものである。Finder の「このコンピュータについて」ダイアログボックスを参照して、この意味を理解してほしい。
ID | description | items | optional | legend: window shade box close box , , zoom boxes grow box + resizeable | |
---|---|---|---|---|---|
1024 | Document | ||||
1025 | Document | ||||
1026 | Document | ||||
1027 | Document | ||||
1028 | Document | ||||
1029 | Document | ||||
1030 | Document | ||||
1031 | Document |
grow box を描画可能なフレームは、すべてリサイズ可能である。
この WDEF はモーダルダイアログとして用いられる場合に特化している。plain box 等に使われる ProcID 1040 〜 1043 は敢えて省略した。興味深いのは以下のものだけである。
ID | description | items | growable | notes |
---|---|---|---|---|
1044 | Modal Alert | no | red outline | |
1045 | Moveable Modal Alert | no | red outline | |
1046 | Navigation Services | yes |
ProcID 1047 〜 1055 は不可視ウィンドウを提供するようだが、特徴というよりはバグであると思われるので、おそらく手を出す必要はないはずだ。
WDEF 66 がタイトルバーを上に表示し、WDEF 67 が左に表示することを除けば、これらのフローティングウィンドウフレームは非常に似ている。しかし、WDEF 67 はウィンドウタイトルを表示することが出来ない。
wdef 66 title bar on top |
wdef 67 title bar left |
items | optional |
---|---|---|---|
1056 | 1072 | ||
1058 | 1074 | ||
1060 | 1076 | ||
1062 | 1078 | ||
1064 | 1080 | ||
1066 | 1082 | ||
1068 | 1084 | ||
1070 | 1086 |
これらは WDEF 66 及び 67 に非常に似ているが、grow icon がドキュメントウィンドウのものと同じ大きさである。例によって、左側のタイトルバーはタイトルを表示できない。
ID | title bar | items | optional |
---|---|---|---|
1984 | top | ||
1986 | top | ||
1988 | top | ||
1990 | top | ||
1992 | left | ||
1994 | left | ||
1996 | left | ||
1998 | left |
バルーンヘルプウィンドウを他の目的で使用するのは cool に思えるかもしれないが、これらのウィンドウはマウスクリックを受け付けない(そのまま直下のオブジェクトに伝わる)し、フォーカスも受け付けない(よってキーボードを使うことも不可能)ことを知っておくべきである。つまりちょっとした情報を表示する目的にのみ有効活用できるわけだが、私はいくつか利用方法を思いつくことが出来る。
もちろんヘルプバルーンには close box も、zoom box も、ウィンドウシェードも、その他のものもない。システムボタンもすべてない。なぜなら、バルーンウィンドウ上のマウスクリックはすべて通り抜けてしまうからだ。
ProcID によって変更できるのは、ポインタがどこに描画されるかということのみである。
ID | border | side | ID | border | side | |
---|---|---|---|---|---|---|
2016 | left | top | 2017 | top | left | |
2018 | top | right | 2019 | right | top | |
2020 | right | bottom | 2021 | bottom | right | |
2022 | bottom | left | 2023 | left | bottom |
ProcID に関しては以上である。第2部ではいくつかのカスタム WDEF の利用について説明する。ここからが本当に面白いところなのだ。