FAQ
Visual BasicでICommandをインプリメントする方法

ナレッジ番号:5458 | 登録日:2023/07/27 | 更新日:2024/11/21

【概要】

DLLとしてカスタム・コマンドを作成する方法を以下に示します。


【手順】

  1. Visual Basic ActiveX DLLプロジェクトを作成します。

    A. Visual Basicを起動します。
    B. 新規の「ActiveX DLL」プロジェクトを選択します。
    C. 「プロジェクト」 > 「参照設定」をクリックします。
    D. "ESRI Object Library"への参照にチェックを入れます。
    E. プロジェクト・エクスプローラからクラスモジュールを選択します。
    F. プロパティ・ウィンドウでクラス名を分かりやすい名前にします。
    G. プロジェクト・エクスプローラからプロジェクトを選択します。
    H. プロパティ・ウィンドウでプロジェクト名を分かりやすい名前にします。
    I. 「プロジェクト」 > 「<プロジェクト名>のプロパティ」をクリックし、「プロジェクトの説明」を入力します。
    J. プロジェクトを保存します。

    Visual Basic ActiveX DLLプロジェクトを作成する際に、例えば以下のように設定します。

    ・クラス名:clsMyCommand
    ・プロジェクト名:AoDemo
    ・プロジェクト プロパティの「プロジェクトの説明」に"ArcObjects MyCommand"と入力

    ・クラスモジュール・ファイル:clsMyCommand.cls
    ・プロジェクト・ファイル:AoDemo_clsMyCommand.vbp

  2. 一般宣言セクションで以下のように入力します。

    
    Implements ICommand
    
    
    Enterキーを押します。

  3. コード・ウィンドウの左側にあるオブジェクト・ドロップダウンリストからICommandを選択します。

  4. コード・ウィンドウの右側にあるプロシージャ・ドロップダウンリストからICommandのメンバを1つずつ選択していきます。コード・ウィンドウ内にICommandのプロパティおよびメソッドに対するラッパー・コードが作成されます。

    
    Option Explicit 
    
    Implements ICommand
    
    Private Property Get ICommand_Bitmap() As esriCore.OLE_HANDLE                       
    
    ' Private Property Get ICommand_Bitmap() As esriSystem.OLE_HANDLE
    
      'バージョン9.0の場合
    
    End Property
    
    Private Property Get ICommand_Caption() As String
    
    End Property
    
    Private Property Get ICommand_Category() As String
    
    End Property
    
    Private Property Get ICommand_Checked() As Boolean
    
    End Property
    
    Private Property Get ICommand_Enabled() As Boolean
    
    End Property
    
    Private Property Get ICommand_HelpContextID() As Long                       
    
    End Property
    
    Private Property Get ICommand_HelpFile() As String
    
    End Property
    
    Private Property Get ICommand_Message() As String
    
    End Property
    
    Private Property Get ICommand_Name() As String
    
    End Property
    
    Private Sub ICommand_OnClick()
    
    End Sub
    
    Private Sub ICommand_OnCreate(ByVal hook As Object)
    
    End Sub
    
    Private Property Get ICommand_Tooltip() As String
    
    End Property
  5. Captionプロパティに対するコードを記述します。

    
    Private Property Get ICommand_Caption() As String
    
    ICommand_Caption = "テストコマンド"
    End Property
    ※"Caption"は説明目的で追加した文字列です。
    このプロパティはArcMapのカスタマイズ・ダイアログに表示されるコマンド名となります。

  6. Categoryプロパティに対するコードを記述します。

    
    Private Property Get ICommand_Category() As String
    
    ICommand_Category = "ArcObjects Custom Commands"
    End Property
  7. Checkedプロパティに対するコードを記述します。

    
    Private Property Get ICommand_Checked() As Boolean
    
    ICommand_Checked = False
    End Property
    ※Falseはボタンを押されていない状態にしておきます。

  8. Enabledプロパティに対するコードを記述します。

    
    Private Property Get ICommand_Enabled() As Boolean
    
    ICommand_Enabled = True
    End Property
    ※EnabledプロパティがTrueに設定されると、ボタンがクリック可能になります。

  9. HelpContextIDプロパティに対するコードを記述します。

    
    Private Property Get ICommand_HelpContextID() As Long
    
    ICommand_HelpContextID = 0
    End Property
    ※カスタム・ヘルプがない場合、0を使用します。

  10. HelpFileプロパティに対するコードを記述します。

    
    Private Property Get ICommand_HelpFile() As Long
    
    ICommand_HelpFile = ""
    End Property
    ※カスタム・ヘルプがない場合、""を設定します。

  11. Messageプロパティに対するコードを記述します。

    
    Private Property Get ICommand_Message() As String
    
    ICommand_Message = "メッセージ: テストコマンド"
    End Property
    ※"Message"は説明目的で追加した文字列です。
    このプロパティはコマンド上にマウスカーソルを持っていったときにステータスバーに表示される説明文となります。

  12. Nameプロパティに対するコードを記述します。

    
    Private Property Get ICommand_Name() As String
    
    ICommand_Name = "MyCommand"
    End Property
  13. Tooltipプロパティに対するコードを記述します。

    
    Private Property Get ICommand_Tooltip() As String
    
    ICommand_Tooltip = "ツールチップ: テストコマンド"
    End Property
    ※"Tooltip"は説明目的で追加した文字列です
    このプロパティはコマンド上にマウスカーソルを持っていったときに表示される文字列(チップ表示)です。

  14. このステップ以降は、コマンドとArcMapを関連付けるコードを記述します。
    一般宣言セクションで、Applicationオブジェクトへの参照を保持するモジュール・レベルのオブジェクト変数を追加します。

    
    Option Explicit 
                            
    
    
    
    Private m_pApp As IApplication
    Implements ICommand 'ステップ2ですでに追加しています。
    
    
  15. OnCreateメソッドで、Applicationオブジェクトへhook変数を設定します。

    
    
    Private Sub ICommand_OnCreate(ByVal hook As Object)
      Set m_pApp = hook
    End Sub
    
    
    
  16. ボタンをクリックしたときに実行するコードを記述します。

    
    Private Sub ICommand_OnClick()
      MsgBox "コマンドのテスト"
      m_pApp.Caption = "コマンドのOnClickメソッドが実行されました"
    End Sub
    
    
  17. コードウィンドウのオブジェクト・ドロップダウンリストからClassを選択します。次にプロシージャ・ドロップダウンリストからClassの各メンバを選択します。

  18. Class_Terminate内でアプリケーションへの参照を解放します。

    
    Private Sub Class_Terminate()
      Set m_pApp = Nothing
    End Sub
    
    
  19. 以上でコンパイルする準備が整いました。

    ※Bitmapプロパティのコードは省略しております。

  20. プロジェクトを保存します。

  21. AoDemo_clsMyCommand.dllという名前でDLLをコンパイルします。

    A. 「ファイル」 > 「DLLの作成」を選択してDLLを作成します。
    B. 「プロジェクト」 > 「<プロジェクト名>のプロパティ」を選択します。
    C. 「コンポーネント」タブを選択します。
    D. 「バイナリ互換」にチェックを入れます。
    E. 「ファイル」 > 「DLLの作成」を選択してDLLを作成します。

  22. カスタム・コマンドをArcMapへ追加します。

    A. カスタム・コマンドを追加したいArcGISアプリケーション(ArcMap、ArcCatalog、ArcSece)を起動します。
    B. 「ツール」 > 「カスタマイズ」を選択します。
    C. 「コマンド」タブを選択します。
    D. 左下隅の「保存先」プルダウン・メニューからコマンドを保存したい場所を選択します。
    E. 「ファイルから追加」をクリックします。
    F. カスタム・コマンドを含むDLLへ進み、選択して「OK」ボタンを押します。
    G. 「追加オブジェクト」ダイアログが表示されると、ArcMap、ArcCatalog、ArcSceneにレジストリ登録された新規オブジェクトが報告されますので、「OK」をクリックします。
    H. 「コマンド」リストからコマンドをクリック&ドラッグして任意のツールバーに追加します。「カテゴリ」リストはDLL作成時に設定したカテゴリ名になっています。
    I. 「閉じる」をクリックします。

  23. コマンド・ボタンをテストします。

メタデータ

機能

種類

製品