Tipsここでは、BeOSプログラミングのTipsを紹介しています。2000.2.22BeOS標準のメールソフト「BeMail」は、TrackerのウィンドウからEmailファイルを開くと、その前後(上下)のファイルを順番に表示することができます。Queryのウィンドウでも同じことができることから、これはメッセージシステムによって実現されていると考えるのが妥当ですね。いうことで、KEditにこの機能を実装すべく、Trackerのスクリプティングに挑戦してみました。その際に学んだことをつらつらと書いていきます。ウィンドウの特定には、ファイルを開く際のメッセージ「B_REFS_RECEIVED(註)」の付加情報を利用します。Messageの内容はこんな感じです。0,註)B_REFS_RECEIVEDは、BApplicationのRefsReceived()仮想関数に渡されるMessageオブジェクトの命令定数です。「TrackerViewToken」という名前のMessengerが付加されています。この付加情報は、ファイルのダブルクリックまたはTracker上でファイルをアプリケーションにドラッグ&ドロップした場合にのみ付加されます。With...」を実行してファイルを開いた場合や、LaunchPad等のアプリケーションを介して開いた場合は付加されません。&aMessenger);とするだけです。このMessengerオブジェクトはMessageと共に消える運命なので、後ほどアプリケーション中で利用する場合はコピーを作って保存しておく必要があります。BMessenger(aMessenger);さて、このMessengerが、Trackerの該当ウィンドウに対するMessengerとなるわけです。このMessengerは、該当ウィンドウが閉じられた場合は無効になるので、使用する前には必ず「IsValid()」を呼び出してメッセンジャーが使用可能かどうか確認しておきましょう。次は、このメッセンジャーを使って、ウィンドウ内のファイルのEntryを取り出します。この場合、"Entry"に対し、B_GET_PROPERTYを送ります。帰ってきたメッセージには、"result"という名前のentry_ref構造体データが付加されています。&aRef);aEntry.SetTo(&aRef);これで、ひとつ目のEntryを取り出せます。Entryの個数はaCount個なので、forループを利用すれば全てのEntryを簡単に取り出せます。次はファイルの選択です。選択には、"Selection"に対し、B_SET_PROPERTYを送ります。撰択するEntry情報は、"data"という名前でMessageに付加しておきます。現在開いているファイルの隣のファイルのEntryを(entry_ref構造体)aRefとすると、コードは次の様になります。&aRef);aMessenger->SendMessage(&aMessage);これで指定したファイル(エントリー)が強調表示されます。Entryを得る方法や撰択範囲を指定する方法は複数用意されていますので、用途によって使い分けるとよいと思います。^;(やっぱりたいしたことなかった...)BeOSプログラミングへ戻るこのページに関するお問い合わせは、karino@drycarbon.comまで。