1 Reply Latest reply on Nov 1, 2013 5:15 AM by nick_hong

    Expedition 혹은 Dxdesigner의 Menu에 대한 Built in command ID 문의

    bkk.kim

      안녕하세요.

      아래와 같은 script 예제에서 32867이라는 Built in command를 사용했는데요.

      메뉴실행을 위한 Command ID를 알고 싶습니다.

      아시는 분 계신가요?

       

      --------------------------------------------------------------------------------------------------

      Set cntrls = menu.Controls

      Set button = cntrls.Add

      button.Caption = "&Highlight"

      button.OnAction = "32867" ' 32867 is the ID of the built-in command,

      Highlight

        • 1. Re: Expedition 혹은 Dxdesigner의 Menu에 대한 Built in command ID 문의
          nick_hong

          Expedition 또는 DxDesigner에서 Menu Bar 에 있는 각각의 항목, 즉 CommandBarButton Object는 각각 고유의 command id가 부여되어 있습니다.

           

          이 command id는 CommandBarButton.Id 로 알아낼 수 있습니다.

           

          그 예로, ExpeditionPCB의 Document Menu Bar (PCB도면을 열었을 때의 pull down menu) 에 있는 Output > Design Status 에 대한 command ID는 다음과 같은 방법으로 알아낼 수 있습니다.

          (아래 예제에서 사용한 &기호는 ExpeditionPCB에서 해당 메뉴 항목에 대한 핫키로, 화면성 밑줄이 있는 글자에 대해서는 앞에 &기호를 사용해야 합니다.)

          Set docMenuBar = Gui.CommandBars("Document Menu Bar")

          Set menuOutput = docMenuBar.Controls.Item("&Output")

          Set menuDesignStatus = menuOutput.Controls.Item("&Design Status...")

          MsgBox menuDesignStatus.Id

           

          만약 ExpeditionPCB의 모든 메뉴 항목에 대해서 command id 를 확인해야 한다면, loop 반복구문을 이용해서 각 CommandBarButton에 대한 Id를 출력하면 됩니다.

          마침 여기에 해당하는 예제 script가 ExpeditionPCB를 설치할 때에 함께 배포되는 Common Automation Reference(auto_common_useref.pdf)의 Chapter 3. CommandBar Server > CommandBarServer Data Model > CommandBarButton Object > Id Property 에 소개되어 있습니다.

           

          편의상 위의 매뉴얼에 소개되어 있는 예제 script를 첨부합니다. - ExpeditionPCB에서 도면을 연 상태로 실행하면 C:\temp\output.txt 에 모든 메뉴항목에 대한 command id 를 출력합니다.

          (8번째 줄에 있는 file 변수를 수정하여 출력될 file의 위치를 정할 수 있습니다.)

           

          DxDesigner의 경우 각 메뉴 항목에 대한 command id가 부여되어 있지 않습니다. 따라서, Automation으로 추가된 메뉴에서 기존에 있는 메뉴항목을 호출하려 할 때에는 MenuButton.ExecuteMethod 를 이용해서 Sub Routine을 호출하도록 한 후, Sub Routine에서 아래와 같이 메뉴를 실행하도록 처리해야 합니다.

           

          Application.CommandsManager.ExecuteMenuCommand("<name_of_menu_command>")


          위에서, <name_of_menu_command> 에는 실행할 메뉴의 이름을 그대로 이어 쓰는 것으로, 예를 들어 File>Open>Project 메뉴를 실행해야 한다면 "FileOpenProject"로 사용하면 됩니다.