ProcID チュートリアル

最近になって、Window に新しいプロパティ MacProcID が追加され、すでにいくつかの議論が行われた。私は、このことが REALdatabase 以来の、REALbasic への新たな良き引きつけ役の一つとなるように思う。screenshotこのチュートリアルでは、その驚くべき能力を明らかにし、読者各位のプロジェクト中での使用方法を示すことを目指す。

本稿では、ProcID プロパティの使い方を紹介し、全ての標準 ProcID をリストアップする。本稿に示す情報の大部分は、自らを pepsi と名乗る人物からのメールに基づいている。氏には大いなる謝意を表したい。このチュートリアルの第2部では、カスタム WDEF について記述する。まずはこの第一部を読み、後に役に立つであろう基本的な知識を身につけることを推奨する。

始めるにあたって、空のデフォルトプロジェクトを一つ用意してほしい。つまり、REALbasic を起動すると自動的に生成されるものである。それには既に変更可能なデフォルトウィンドウが一つ含まれているはずだ。後でリソースファイルを追加する必要があるが、まずはこれでOKだ。

デフォルトウィンドウ (WDEF 0)

System 7 ユーザにも使用できるいくつかのデフォルトウィンドウがあり、REALbasic の Frame プロパティで扱えるものと基本的に同じであるが、ウィンドウのふるまいとは独立にそれを選択できる。

私は、これら全てを MacOS 7.6.1 環境下で試し、問題なく動作した。もし、もっと古いシステムがインストールされている場合には、テストを行って問題が生じたら私にレポートしてほしい。

これらのウィンドウフレームを使うには、MacProcID フィールドに適切な ID を入力し、確認の為に Command-R を押すだけでよい。残念ながらウィンドウフレームに対する変更はエディターで直接見ることができないのだが、プログラムを走らせればすぐに見ることができる。

ID description   items optional growable notes

legend:

close box close box

grow box grow box

zoom box zoom box

window shade window shade box (system 8.x only)

growable は対象ウィンドウがリサイズ可能なことを示す。(grow box を描画可能であることとは異なるので注意)

0 Document Window window shade   close box zoom box grow box yes 1)
1 Modal Dialog       no  
2 Plain Box       no  
3 Shadow Box       no  
4 Document Window window shade   close box grow box no  
5 Moveable Modal Dialog       no  
8 Document Window window shade zoom box close box grow box yes  
12 Document Window window shade zoom box close box grow box no  
13 Moveable Modal Dialog   zoom box   no  

1) REALbaisc ではデフォルトフレームを使用することを示すために値 0 を使うので、ProcID 0 を使用することは出来ない。

optional に示されているシステムボタンは、Window のプロパティとして ON/OFF を制御可能である。items に示されたものは OFF にすることができないが、将来のバージョンの OS では OFF にすることが可能になるかもしれないので、プロパティウィンドウで設定が可能になっている。

デスクアクセサリウィンドウ (WDEF 1)

これらは角が丸いひとつながりのウィンドウで、おそらく時折目にしているだろう。今となっては少々古い見た目であり、もはや使われることは殆どない。近い将来、Apple はデザインを更新するだろう。

ID description optional growable notes
16 DA Window close box no  
18 .. 31 alternate radii close box no 2)

2) ProcID 18 〜 31 は角の丸みの為の半径値が異なるが、その他は ProcID 16 と同様である。

WDEF -32767 の ProcID -524272 及び -524270 〜 -524257 を上記の代わりに使うことも可能であるが、どちらを使うか悩む余地はないだろう。

ウィノイド (WDEF 128)

ウィノイド(winoids) は、小さなタイトルバーを持ち、故にシステムボタンアイテムも小さい。通常はフローティングパレットに使用されるので「フローティングウィンドウ」とも呼ばれる。この種のウィンドウは、無数にある(フリーの)ウィノイド WDEF が多くのソフトウェアパッケージに採用された結果、一般的になった。プロジェクトでフローティングウィンドウを使った場合、REALbasic は自動的にこの WDEF のコピーをアプリケーションに追加する。しかし、System 7.5 以降では、システムの一部に組み込まれている。

ID description   items optional growable titlebar
2048 Winoid     close box grow box yes top
2049 Winoid     close box grow box yes left
2052 Winoid     close box no top
2053 Winoid     close box no left
2056 Winoid   zoom box close box grow box yes top
2057 Winoid   zoom box close box grow box yes left

左側にタイトルバーを持つウィンドウはウィンドウシェードが不可能であり、さらにウィンドウタイトルを表示できない(ではなぜ「タイトルバー」と呼ばれるのだろう?)ことに留意されたい。

WDEF について

ここで、しばし "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 を扱う。

アピアランス WDEF

MacOS 8.0 で、Apple はインタフェイス要素の描画(及び定義)の、新しい方法を導入した。これは従来のウィンドウフレームのインタフェイスの更新を意味するばかりでなく、新しいシリーズのウィンドウスタイルが導入されたことをも意味する。

System 7 でその新しい要素を利用可能にする為に Appearance Lib をインストールすることが可能である。けれども、ユーザがこのライブラリをインストールしていなかった場合、デフォルト WDEF が使用される。この時、見た目は奇妙になるが、クラッシュや他のおかしいふるまいを導くものではない。Apple のデベロッパページから Appearance SDK を入手可能である。著者は MacOS 7.6.1 に Appearance ライブラリをインストールして使っているが、良好に動作している。

アピアランスドキュメントウィンドウ (WDEF 64)

これらは、水平・垂直 zoom box を利用可能であることを除けば、通常のドキュメントウィンドウである。それらの zoom box は、ウィンドウのリサイズが水平方向のみ、または垂直方向のみの場合に使用するべきものである。Finder の「このコンピュータについて」ダイアログボックスを参照して、この意味を理解してほしい。

ID description items optional  

legend:

window shade window shade box

close box close box

zoom box, horizontal zoom box, vertical zoom box zoom boxes

grow box grow box + resizeable

1024 Document window shade close box
1025 Document window shade grow box close box
1026 Document window shade vertical zoom box close box
1027 Document window shade vertical zoom box grow box close box
1028 Document window shade horizontal zoom box close box
1029 Document window shade horizontal zoom box grow box close box
1030 Document window shade zoom box close box
1031 Document window shade zoom box grow box close box

grow box を描画可能なフレームは、すべてリサイズ可能である。

アピアランスダイアログ (WDEF 65)

この 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 grow box yes  

ProcID 1047 〜 1055 は不可視ウィンドウを提供するようだが、特徴というよりはバグであると思われるので、おそらく手を出す必要はないはずだ。

アピアランスフローティングウィンドウ (WDEF 66 及び 67)

WDEF 66 がタイトルバーを上に表示し、WDEF 67 が左に表示することを除けば、これらのフローティングウィンドウフレームは非常に似ている。しかし、WDEF 67 はウィンドウタイトルを表示することが出来ない。

wdef 66

title bar on top

wdef 67

title bar left

items optional
1056 1072 window shade close box
1058 1074 window shade grow box close box
1060 1076 window shade vertical zoom box close box
1062 1078 window shade vertical zoom box grow box close box
1064 1080 window shade horizontal zoom box close box
1066 1082 window shade horizontal zoom box grow box close box
1068 1084 window shade zoom box close box
1070 1086 window shade zoom box grow box close box

アピアランスフローティングウィンドウ (WDEF 124)

これらは WDEF 66 及び 67 に非常に似ているが、grow icon がドキュメントウィンドウのものと同じ大きさである。例によって、左側のタイトルバーはタイトルを表示できない。

ID title bar items optional
1984 top window shade close box
1986 top window shade grow box close box
1988 top window shade zoom box close box
1990 top window shade zoom box grow box close box
1992 left window shade close box
1994 left window shade grow box close box
1996 left window shade zoom box close box
1998 left window shade zoom box grow box close box

ヘルプバルーン (WDEF 126)

バルーンヘルプウィンドウを他の目的で使用するのは 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 の利用について説明する。ここからが本当に面白いところなのだ。

【原文】 last updated: 5.7.1999 by sascha.
【翻訳】 最終更新: 1999.8.25 by Ryo Amano