NiconamaCommentViewer(ニコ生コメントビューア)のプラグイン作成法 2


ニコニコ生放送用のコメントビューアであるNiconamaCommentViewerのプラグインの作成法メモです。

前回は、開発環境を準備し、何もしないプラグイン作成を行いました。
今回は、何もしないプラグインを改造し、フォームを追加してみます。



プラグインにフォームを追加する


①プロジェクトへのフォーム追加

 プロジェクトにフォームを追加します。

 ソリューションエクスプローラのプロジェクト名を右クリックし、追加->Windowフォームを選択します。



 「新しい項目の追加」ダイアログで「Windowsフォーム」を選択します。
 フォーム名はform1.csとしています。 



 これでForm1クラスを使ったコーディングができるようになりました。

②フォーム生成、破棄コード追加

 まずForm1クラスの実体を格納するメンバ変数_formを追加します。


before

namespace NCV_Plugin_Sample
{
    public class Class1 : IPlugin
    {
        private IPluginHost _host = null;
                :
                :

after

namespace NCV_Plugin_Sample
{
    public class Class1 : IPlugin
    {
        private IPluginHost _host = null;
        private Form1 _form = null;//★追加
                :
                :

 
 
 次にプラグイン開始処理を行うIPlugin::Runメソッドに、フォーム生成、表示処理を追加します。
 また、フォームが閉じられた際のイベントハンドラも登録しておきます。
before

        /// <summary>
        /// プログインを実行する
        /// </summary>
        public void Run()
        {
                //何もしない
        }

after

        /// <summary>
        /// プログインを実行する
        /// </summary>
        public void Run()
        {
            if (_form == null)
            {
                //フォームの生成、表示
                _form = new Form1();
                _form.Show((System.Windows.Forms.IWin32Window)_host.MainForm);

                //フォームが閉じられた際のイベントハンドラを登録
                _form.FormClosed += new System.Windows.Forms.FormClosedEventHandler(_form_FormClosed);
            }
        }

 
 
 フォームが閉じられた際のイベントハンドラを実装します。

        /// <summary>
        //フォームが閉じられた際のイベントハンドラ
        void _form_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e)
        {
            _form = null;
        }

 
 

③ビルド


 プロジェクトをビルドし、DLLファイルが生成されることを確認します。
 本サンプルでは(NCV_Plugin_Sample.dll)

 このDLLファイルがNiconamaCommentViewerのプラグインファイルとなります。
 

 
 
 ソースコード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Plugin;
namespace NCV_Plugin_Sample
{
    public class Class1 : IPlugin
    {
        private IPluginHost _host = null;
        private Form1 _form = null;

        #region IPlugin メンバ

        /// <summary>
        /// IsAutoRunがtrueの場合、アプリケーション起動時に自動実行される
        /// </summary>
        public void AutoRun()
        {

        }

        /// <summary>
        /// プラグインの説明
        /// </summary>
        public string Description
        {
            get { return "プラグインのサンプルです"; }
        }

        /// <summary>
        /// プラグインのホスト
        /// </summary>
        public IPluginHost Host
        {
            get
            {
                return _host;
            }
            set
            {
                _host = value;
            }
        }

        /// <summary>
        /// アプリケーション起動時にプラグインを自動実行するかどうか
        /// </summary>
        public bool IsAutoRun
        {
            get { return false; }
        }

        /// <summary>
        /// プラグインの名前
        /// </summary>
        public string Name
        {
            get { return "サンプルプラグイン"; }
        }

        /// <summary>
        /// プログインを実行する
        /// </summary>
        public void Run()
        {
            if (_form == null)
            {
                //フォームの生成
                _form = new Form1();
                _form.Show((System.Windows.Forms.IWin32Window)_host.MainForm);

                //閉じられた際のイベントハンドラ追加
                _form.FormClosed += new System.Windows.Forms.FormClosedEventHandler(_form_FormClosed);

                //コメント受信時のイベントハンドラ追加(今回はまだ実装しません)
                //_host.ReceivedComment += new ReceivedCommentEventHandler(_form.ReceivedComment);
            }
        }

        /// <summary>
        /// プラグインのバージョン
        /// </summary>
        public string Version
        {
            get { return "1.0"; }
        }

        #endregion

        //フォームが閉じられた際のイベントハンドラ
        void _form_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e)
        {
            _form = null;
        }
    }
}

 
 

動作確認


①メニュー確認


 作成したDLLファイルをNiconamaCommentViewerのpluginsフォルダに格納し、NiconamaCommentViewerを立ち上げます。
 プラグインメニューに作成したプラグインが追加されていることを確認します。
 

 
 

②フォームの確認


 クリックするとフォームが表示されることを確認します。
 これがプラグイン専用のフォームになります。
 
 まっさらなフォームですが、今後ボタン等を追加すれば機能を持たせられそうですね。
 

 
 以上でフォームを持つプラグインが作成できました。
 
 

プラグインに機能を追加する


 今回はプラグインにフォームを追加しました。しかしまだ機能がありませんね。
 次回はいよいよコメント文字列の取得処理などを実施します。
 
 次回へ続く
 →NiconamaCommentViewer(ニコ生コメントビューア)のプラグイン作成法 – 3
 

29件のコメント

  1. ピンバック:NiconamaCommentViewer(ニコ生コメントビューア)のプラグイン作成法 1 « 夏研ブログ

  2. ピンバック:NiconamaCommentViewer(ニコ生コメントビューア)のプラグイン作成法 3 « 夏研ブログ

  3. ピンバック:NiconamaCommentViewer(ニコ生コメントビューア)のプラグイン作成法 デバッグ編 « 夏研ブログ

  4. 型または名前空間名 ‘Form1’ が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。とエラーが表示されたのですが、どうしたらいいんですか?

  5. あ、できました!

  6. LiveCommentData クラスから、コメントの日付 Dateプロパティを使っています。
    しかし、実際取得すると、10桁の数字が取得され、実際の時間~~時間~~分~~秒に変換できません。
    このDateプロパティは、どう利用すべきでしょうか。

    よろしくお願いします。

  7. ロフトくん

    >tatuyaさん
    こんにちは。
    いわゆるUNIX時間です。扱いやすいDateTime型への変換(及びその逆変換)は
    以下を参照されて下さい。
    http://www.digitalcoding.com/Code-Snippets/C-Sharp/C-Code-Snippet-Convert-Unix-timestamp.html

  8. 日付、変換できました。
    ありがとうございました。
    プラグイン作れそうです。

  9. ロフトくん

    >tatuyaさん
    お役に立てましたら幸いです。プラグイン開発頑張って下さいノ

  10. 手順どおりコーティングしてみましたが、
    //フォームの生成、表示
    _form = new Form1();
    _form.Show(System.Windows.Forms.IWin32Window)_host.MainForm);

    //フォームが閉じられた際のイベントハンドラを登録
    _form.FormClosed += new System.Windows.Forms.FormClosedEventHandler(_form_FormClosed);
    のところでどうしてもエラーが出てしまいます。サンプルコードと同じだと思うのですが、何が原因でしょうか?

  11. ロフトくん

    >ぶりさん
    こんにちは。
    サンプルコードを1行ずつ加えていった場合に、
    最初にエラーする行とエラーの内容を教えて下さい。

  12. エラー 1 型または名前空間名 ‘Form1’ が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 C:\Users\owner\Documents\Visual Studio 2010\Projects\NCV_Plugin_Sample1\NCV_Plugin_Sample1\Class1.cs 13 17 NCV_Plugin_Sample1
    打ち直してみたところですね。

  13. ロフトくん

    >ぶりさん
    こんにちは。
    本ブログ記事の 手順①プロジェクトへのフォーム追加
    はお済みでしょうか?

    Form1が追加済みであれば、以下画像のように、
    ソリューションエクスプローラーにForm1.csが表示されます。
    http://c-loft.sunnyday.jp/blog/wp-content/uploads/201.png

    まずは、Form1.csを追加済みかどうかご確認下さい。

  14. Form1.csは追加済みですね。

  15. Form1をFormに書き換えて他も書き換えたところ動作しました。

  16. また、Usingならびに参照にフォームのところを追加しました。

  17. Form生成の場所でIWinWindowにエラーが出ます
    どうすればいいでしょうか?

  18. こんばんは。
    何もしないプラグインは、お陰でうまくいきました。
    次の画面がでないので困っています。
    ソースは打ち込んだのですが。

    ①プロジェクトへのフォーム追加
     プロジェクトにフォームを追加します。

     ソリューションエクスプローラのプロジェクト名を右クリックし、追加->Windowフォームを選択します。

    ↑これがいくら右クリックしても出ないのです。
    よろしくお願いします。

  19. URL消えました。ここの使い方もわかってないようです。

  20. アップローダーにjpg置きました。
    ご確認お願いします。

    https://ux.getuploader.com/naopy34/download/3

  21. ロフトくん

    >なおpさん

    以下に変更前と変更後の差分を置きます。

    黄色の行が変更した行です。
    左が変更前(なおpさんのソースコード)、右が変更後です。

    http://c-loft.com/blog/upload/diff_1110_01.pdf

    右側が灰色になっているところは文法的に不要な行を削除したということです。
    左右ともに黄色になっているところは一見左右は同じように見えますが
    よく見ると大文字小文字の違いがあったりしますので、確認してみて下さい。

    ご不明な点はお気軽に聞いて下さいノ

tatuya へ返信する キャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です