C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

手抜きマクロ起動用メニュー2

こちらの続きです。
手抜きマクロ起動用メニュー1 - C#ATIA

CATVBAプロジェクトにマクロのモジュールを追加するだけで、
メニューボタンを自動的に追加します。

但し、追加するモジュールにボタンとなる情報を追記する
必要が有り、以下 [タグ] と表記して説明します。


〇ファイルの構成
同一のプロジェクト内に以下のファイルをD&Dで追加してください。

・Cat_Macro_Menu_Model.bas
・Cat_Macro_Menu_View.frm
・Cat_Macro_Menu_View.frx
・Button_Evt.cls
・KCL.bas

f:id:kandennti:20171017152458p:plain
ツールバーに登録する、通常のマクロのメニューから起動する際は
「Cat_Macro_Menu_Model.bas」の「CATMain」を指定してください。

〇タグ記載位置
タグは各モジュールの宣言セクション(先頭部分)に記載する必要が有ります。
f:id:kandennti:20171017152335p:plain
こちらで説明されている宣言セクションになります。
Office TANAKA - VBAの変数[変数の適用範囲]

特に注意が必要なのは、上記の赤矢印のラインより上に記載する
と言うことです。
このような状態(ラインがない状態)ではタグを認識する事が
出来ない為メニューにボタンが表示されません。
f:id:kandennti:20171017152345p:plain

こちらの様に出来るだけ [Option Explicit] を宣言し、
その上にタグを記載する事をオススメします。
f:id:kandennti:20171017152427p:plain


〇タグフォーマット
タグのフォーマットは
{ キーワード : 値 }
の状態になっている必要が有ります。("{" ":" "}" は半角です)
Upしたサンプルでは1行に1タグになっていますが。

'{GP:1}{BackColor:12648447}
Option Explicit

Sub CATMain()
    MsgBox "hoge"
End Sub

の様に一行に複数のタグを記載しても大丈夫です。
※タグのキーワードは半角文字で大・小文字は問いません


〇タグ内容
タグは自動生成するボタンの情報を記載する必要が有ります。
{Gp} : グループの略称でボタン作成する際は必須です。
   値はLong型で指定してください。

   メニュー内のどのタブにボタンを作成するかを示しています。
   Upしたファイルの「Cat_Macro_Menu_Model.bas」の宣言セクション部
   の「GROUP_NUMBER_CAPTION」定数部分の数値と一致させる
   必要が有ります。

'vba CATIA V5用 マクロ起動(テヌキ)メニュー Ver0.0.1  by Kantoku
'Cat_Macro_Menu_Model.bas
'using-'KCL0.0.12'

・・・

'メニューのマルチページの設定
'変更する際は
'{ タグのグループ番号 : ページのタイトル文字 }
'の状態にして下さい
Private Const GROUP_NUMBER_CAPTION = _
            "{ 1 : Part }" & _
            "{11 : Assy }" & _
            "{21 : Draw }" & _
            "{51 : Other }"
・・・

   現状では、1-Part 11-Assy 21-Draw 51-Other
   の設定になっているので、任意の数値を記載してください。
   
   逆にライブラリのようなモジュールファイルの場合、ボタンを作成したくない
   はずです。{Gp}タグを記載しない事でメニューに表示させない事に
   なります。

{Ep} : エントリーポイントの略称で任意の設定で、値は文字列型です。
   各モジュールのエントリーポイント(実行されるプロシージャ名)を指定
   しますが、省力時は「CATMain」になります。

   Upしている「sample_IsExists_LeftAxis.bas」では
   「CATMain」が無く、以下の状態になっています。

'vba sample_IsExists_LeftAxis_ver0.0.1  using-'KCL0.0.12'  by Kantoku
'Part内の左手座標系の有無チェック

'{Gp:1}
'{Ep:LeftHand}
'{Caption:LeftHandAxis}
'{ControlTipText:Part内の左手座標系の有無チェック}
'{BackColor:33023}
Option Explicit

Sub LeftHand()
    'ドキュメントのチェック
    If Not CanExecute("PartDocument") Then Exit Sub
・・・

   {Ep:LeftHand}となっており、ボタンを押した際
   「LeftHand()」が実行されるようになっています。

   {Ep}タグで指定されたプロシージャが見つからない場合は
   自動的に「CATMain」を探しますが、両方見つからない場合は
   ボタンが作成されません。

   制限としてチェックがちょっと甘く「Private Sub」や「Function」
   となっているプロシージャは指定しないで下さい。

   又、引数付きのプロシージャも指定しないで下さい。

他は全てでは有りませんが、CommandButtonオブジェクトのプロパティを
指定する事が可能です。制限はこちらです。
・レイアウトを維持する為これらのキーワードを指定しても
 無視されます。
「Top」「Left」「Height」「Width」

・プロパティの値がオブジェクトとなっているものは指定されても
 無視されます。
「Font」「MouseIcon」「Picture」

・プロパティの値が定数となっている場合、定数ではなく
 数値で指定する必要があります。(後に説明します)

{Caption} : ボタンに表示される文字で、値は文字列型です。
   何のマクロのボタンかわからなくなるため設定を推奨します。

{ControlTipText:} : ボタン上にマウスカーソルを持っていく
   ことでに表示される文字で、値は文字列型です。
   何のマクロのボタンかわからなくなるため設定を推奨します。

{BackColor}:ボタンの色で、値はLong型です。
   通常プロパティでは、[&H000000FF&]のような状態で
   表示されていますが、値部分にそのまま入力しても
   色は反映されません。
f:id:kandennti:20171017152557p:plain
   イミディエイトウインドウで「?」(又はprint)で表示させると
   Long型の値が返って来ますので、この値を設定してください。

?&H000000FF&
 255 

   又、定数を指定いるプロパティに関しても同様の方法で
   Long型で設定してください。
   ・・・正直に書くと、試していませんが。



タグについてグダグダ記載しましたが、見た目。機能を
度外視すれば

'{Gp:1}

さえ追記すれば、メニューにボタンが表示されるようになります。

フォーム側の説明は次回に