|
|
|||||||||
|
|||||||||
Q Script.h に次の宣言があります。
extern PASCAL Boolean IsCmdChar(const EventRecord *eventRecord, short test) FOURWORDINLINE(0x2F3C, 0x8206, 0xFFD0, 0xA8B5);
この関数の説明を含むドキュメントを見つけることができません。そのようなドキュメントはありますか。もし私が考えているように動作する関数ならぜひ使いたいのですが。
A ご指摘ありがとうございました。このルーチンは System 7 で導入されたものです。ここでルーチンの説明をいたします。
FUNCTION IsCmdChar(keyEvent: EventRecord; testChar: INTEGER): BOOLEAN;
この関数は、他のキーと組み合わせて command キーが押されたかどうかをテストするものです。command キーを押す/離す操作や shift キーを押す/離す操作と組み合わせたときに、testChar が生成されます。testChar にシフト文字が指定されることがあるヨーロッパのキーボードや、command キーと同時でなければ生成されない testChar がある非ローマンキーボードにも対応します。最も便利な使い方は command キーとピリオド (.) の組み合わせのテストですが、command キーとあらゆる文字の組み合わせをテストすることができます。
呼び出し側は command キーが押された状態で得られたキーの押下またはリピートキーのイベントレコードを渡します。テスト対象の文字 (例えば「.」) も渡します。関数は現在の修飾キーで testChar が生成される場合は真を返します。また、現在の修飾キービットに対して次のいずれかまたは両方の変更を加えた結果 testChar が生成される場合も真を返します。
以下は、この関数の使い方のサンプルです。
OSErr HandleKeys (EventRecord *eventPtr) {
OSErr err = noErr;
if (eventPtr->modifiers & cmdKey) {
if (IsCmdChar (eventPtr, '.')) {
gStop = true;
} else {
err = DispatchMenuChoice (MenuKey (eventPtr->message & charCodeMask));
}
}
return err;
}
注意: IsCmdChar 関数が true として返す値は 0xFF です。つまり、IsCmdChar は 1 を返さないので、0xFF を返されてもコードが正しく動作するようにしてください。開発環境の「true」の定義が 0xFF であることがわかっている場合以外は、その定義をそのまま使ってはいけません。MacTypes.h では true は 1 に定義されています。この場合常に結果は偽になってしまいます。