X作成講座 on FB[05] (4)メッセージを整える
ここでは ResEdit を使ってXのメッセージを整えます。
ResEdit はFBII のCDに入っていますのでハードディスクにコピーしておいて下さい。 ResEdit を恐ろしいもののように思っている方もいるかも知れませんが、システムファイルやアプリケーションなどを無節操にいじらない限りは安全です。また何よりプログラミングには必須のツールですので、是非慣れるようにして下さい。
最初に、開いていたテストスタックを閉じます。スタックを開いたままではリソースをいじれないからです。
このスタックを ResEdit にドラッグして開いて下さい。ウィンドウに2つのリソースが見えたと思います。 XFCN と書かれているものをダブルクリックすると、たった今コンパイルしたばかりの tasu というリソースが見えます。これを開いても呪文しか見えませんので、そのまま閉じて下さい。これから編集するのはもうひとつのリソース、STR# です。
STR# をダブルクリックすると、リストが現れます。これをもう一度ダブルクリックすると STR# の文字列編集画面になります。
上から4番目、<enter version info here> と書いてあるところにバージョン情報を書き込みます。例えば tasu XFCN ver.1.1 by UDI てなもんです。
上から5番目、<enter usage info here> と書いてあるところに書式情報を書き込みます。例えば tasu(n,m) のような感じです。
書き込んだらセーブして ResEdit を終了して下さい。
では実験。テストスタックをダブルクリックして開いて下さい。
メッセージボックスに put tasu("!") と打ち込んでリターンキーを押すと、今書き込んだバージョン情報がメッセージボックスに現れます。 put tasu("?") と打ち込んでリターンキーを押すと、書式情報が現れます。
これらは XCMD/XFCN の標準的なインターフェースで、行儀の良いXならみんなサポートしている動作です。
思っていたメッセージが現れなかったらスタックを一旦閉じて、ResEdit で開き直してメッセージを修正して下さい。
−・−・−
C言語などで作るXでは、Xの使うメッセージ(エラーメッセージやバージョン情報など)はソース中に埋め込んでしまうのが普通です。こうすることで XCMD/XFCN 単体のリソース中にメッセージまで入れてしまうことが出来るからです。
FBではこれらのメッセージを独立したリソースとして持つようになっています。再コンパイルせずに随時メッセージを変更出来、ローカライズなどが簡単に出来るというメリットがあります。しかし同時に、XCMD/XFCN の動作に STR# リソースが必須となり、リソースの管理やインストールが多少煩わしくなるというデメリットがあります。
メッセージをリソースで持つのはFBの仕様ではなく、あくまで付属するテンプレートの仕様です。ソース中にメッセージを埋め込むようなテンプレートを作ってしまえば(つまりソース中にバージョン情報やエラーメッセージを直接書けば)、STR# リソースを整える手間は省けます。多くの場合はこの方法の方が便利で一般的だと思います。
エラーメッセージのハンドリング部分は HyperXcmd Glue.INCL ファイルにあります。 LOCAL FN ErrorHandler(xCmdPtr&,errID%) と言う関数がソレですね。ご丁寧にエラーが起こった時に BEEP を2度鳴らすようになっていますがこれは余計は御世話です。
よく読むと分かりますが、プログラマが自由にエラーIDを追加して、それに対応することも出来るようになっています。これで遊んでみるのも良いでしょう。
−・−・−
これであなたの XFCN "tasu" が完成しました。
ゴチャゴチャと面倒な手続きはありましたけど、プログラミングそのものは単純でしょ? 外部ウィンドウを扱うようになるとまた少々複雑になりますが、その前に普通の XCMD/XFCN をいくつか作って、Xの作成に慣れて下さい。
引数を持たない XCMD/XFCN では引数を受け取って変換する部分が不要になります。また XCMD は値を返さないように思われるかも知れませんが、XFCN と同じ手続きで値を返すことが出来ます。 XCMD から返された値は HyperTalk からは the result として読み出します。
あ、そうそう。 tasu XFCN を他のスタックにコピーする時は、STR# リソースも一緒にコピーするのを忘れずに。
それから、XCMD/XFCN のプログラミングには一般のFBのコマンドがほとんど使えません。リファレンスマニュアルのコマンド名の右側に ResEdit のようなマークがついているものがありますが、XCMD/XFCN のプログラミングで使えるのはこの「ミニアプリケーション用」コマンドだけです。これで不足する分は ToolBox を直接呼び出すことになります。ファイル関連のコマンドが全滅なのが痛いですね。