-rao-
hjmr9****@yahoo*****
2003年 5月 10日 (土) 13:10:25 JST
このところ激いそがしで,夜中と明け方以外になかなかソースを触る時間が取れ ないため,ちょっと動きが鈍くなっています.すみません. 掲示板にも書きましたが,ちょろちょろとSimpleUIの改造を試みていまして,と りあえず出来ているところまで,昨晩CVSに上げました. 変更したのはSimpleUIとnsmsgs本体の複数ファイルです. 1) プラグインからメニューに項目を追加できる機構の追加 2) ヘルプファイルの参照(レグネ本体と同じフォルダに入れたayami_wingさん 作のヘルプを開くようにしてあります.感謝>ayami_wingさん) 3) リンク先のSF.jpへの変更 4) 本体のバージョン番号をα10に向けて 0.5.10 系に設定しました. 1) についてですが,プラグインからメニューに項目を追加する方法は以下のよ うな感じにしてみました. ----- UIサービスの仕様 ----- 1) UIサービスの登録 メニューに登録したい項目があるプラグインは以下のUIサービスを CreateServiceにより登録します. プロトコルプラグインの場合: /Protocol/<プロトコル名>/Connection/UIService/Member/<サービス名> /Protocol/<プロトコル名>/Connection/UIService/Group/<サービス名> AddInプラグインの場合: /AddIn/<名前>/UIService/Main/<サービス名> /AddIn/<名前>/UIService/Member/<サービス名> /AddIn/<名前>/UIService/Group/<サービス名> /AddIn/<名前>/UIService/Tab/<サービス名> Main:メインウィンドウの「機能」メニューに登録 Member,Group:メンバーやグループを右クリックしたときのメニューに登録 Tab:メインウィンドウのタブを右クリックしたときのメニューに登録 注1) Memberメニューに関しては,登録されたメニュー(従来の互換メニューを 含む)のうち,一番上に位置する項目(最初に登録された項目)がデフォルトと なります(これもいい方法があれば変えたい) 注2) Memberメニューに登録されるプロトコルUIサービスは「名前をコピー」と いう項目の上に,アドインUIサービスはメニューの末尾に追加されます. 2) UIサービスの実装 UIサービスの仕様は以下の通りです. Integer TNsmServiceProc(Cardinal wParam, Cardinal lParam); wParam: HNsmConnection(Main, Tabの場合は不定) lParam: struct TNsmUIServiceInfoへのポインタ struct TNsmUIServiceInfo { Integer cbSize; // 構造体のサイズ=sizeof(TNsmUIServiceInfo) Integer nInfoKey; // UIサービス呼び出し理由(NMUI_XXXXで指定) Integer nGroupId; // グループID(Member, Groupの時のみ有効) LPCTSTR lpAccount; // アカウント(Memberの時のみ有効) PNsmInfo lpInfo; // 情報設定用 Integer nFlags; // 予約 }; [引数の内容] a) nInfoKey = NMUI_GETCAPTION の場合 nGroupId = 不定 lpAccount = 不定 lpInfo->nType = NMIT_WIDESTRING lpInfo->lpBuffer = バッファ lpInfo->nBufferSize = lpBufferの大きさ b) nInfoKey = NMUI_ONCLICK の場合 b-1) クリックされた対象がメンバの場合 (〜/UIService/Member/〜が呼び出された場合) nGroupId = メンバの所属するグループのID lpAccount = メンバのアカウント名 lpInfo = NULL b-2) クリックされた対象がグループの場合 (〜/UIService/Group/〜が呼び出された場合) nGroupId = グループのID lpAccount = NULL lpInfo = NULL b-3) それ以外の場合 nGroupId = 0 lpAccount = NULL lpInfo = NULL [返り値] 失敗した場合 0 成功した場合 0以外 a) nInfoKey = NMUI_GETCAPTION(キャプション取得要求)の場合には以下の情 報も返す lpInfo->nType = NMIT_WIDESTRING lpInfo->lpBuffer = メニューに設定するキャプション lpInfo->nBufferSize = lpBufferの大きさ 設定例 wcsncpy(lpInfo->lpBuffer, <キャプション>, (lpInfo->nBufferSize)/2); 3) 従来との互換UIサービス 上記のフォーマットのUIサービス以外に,以下のUIサービスは対応するキャプショ ンと共に右クリックメニューに登録されます. これにより従来のプラグインも利用できますが,【使用されていない(できない) UIサービスはメニューには表示されません】ので注意して下さい. サービス /Protocol/<プロトコル名>/Session/Open /Protocol/<プロトコル名>/Connection/AddMember /Protocol/<プロトコル名>/Connection/RemoveMember /Protocol/<プロトコル名>/Connection/AddGroup /Protocol/<プロトコル名>/Connection/RemoveGroup /Protocol/<プロトコル名>/Connection/ChangeGroupName ----- ここまで ----- これだけだと分かりにくいので,実際に動いているサンプルプラグインを添付し ます. (追記:と思ったのですが,メイルのサイズが大きくなりすぎましたので以下の URLにアップしておきます http://www007.upp.so-net.ne.jp/rao/regne/test/AddInMenuTest.zip http://www007.upp.so-net.ne.jp/rao/regne/test/ProtocolMenuTest.zip ) AddInMenuTest(ソース付き) AddInメニューの簡単なサンプルで,機能メニュー,タブメニュー,メンバ右ク リックメニュー,グループ右クリックメニューに「ダイアログを開く」という項 目を追加します. ProtocolMenuTest(ソース無し) 拙作の Yahoo!ニュースヘッドラインプラグインを改造したもので, NMS_PROTOCOL_SESSION_OPEN に割り当てられていた機能を,独自に追加した「ニュー スを読む」というメニュー項目で置き換えています.プロトコルUIサービスとア ドインUIサービスの動作の違いを見るためなので,ソースは付けていません. なお,今回の変更では,メンバ右クリックメニューから「会話ログを見る」とい う項目をなくしています.UFrmHistory も NotUsed ディレクトリに移動し, 会話履歴の表示をSimpleUIでは面倒を見なくなりました.これに合わせてログ表 示機能をSimpleLogプラグインに実装しないといけないのですが,ちょっと忙し くて手が回りませんでした…すんません. -Rao- __________________________________________________ Do You Yahoo!? Yahoo! BB is Broadband by Yahoo! http://bb.yahoo.co.jp/