C#ATIA

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

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

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

「Cat_Macro_Menu_Model.bas」の宣言セクション部に幾つか定数を
設けています。お好みで変更してください。

'Cat_Macro_Menu_Model.bas
'using-'KCL0.0.12'
'タグを追記したモジュールをプロジェクトに追加するだけで
'自動的にボタンを追加します

Const FormTitle = "Macro"

'----- メニューの仕様 お好みで ---------------------------------------

'メニューの表示方法
'True-モーダレス表示  False-モーダル表示
Private Const MENU_SHOW_TYPE = True

'メニューを閉じるタイミング
'True-フォームのXボタンを押して閉じます False-ボタンクリック後閉じます
Private Const MENU_HIDE_TYPE = True

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

・「MENU_SHOW_TYPE」
  メニューの表示で、モーダレスかモーダルかをBoolean型で切り替えられます。

・「MENU_HIDE_TYPE」
  メニュー終了タイミングですが、Upしたデータのコメント間違えていました・・。
  正しくは上記の状態で、Boolean型で切り替えられます。
  ボタンクリック後に終了させるか、表示しっぱなしかです。

  実質、「モーダレス + 表示しっぱなし」 か 「モーダル + クリック後終了」
  に、なるのだろうと思います。

・「GROUP_NUMBER_CAPTION」
  マルチページの分類と表示させる文字になります。
  挿入する標準モジュールの {Gp}タグは、こちらの番号にない場合は
  ボタンが表示されません。


続いて、フォームコードの「Cat_Macro_Menu_View.frm」の宣言セクション部です。
フォームのレイアウト等はこちらの定数で、若干調整が可能です。
(環境によってはボタンの文字が途切れる等あるかもしれないため・・・))

'Cat_Macro_Menu_View.frm
'メニューのUIです。

'フォーム
Private FrmMargin As Variant '上,下,左,右のボタン配置のマージン
Private Const ADJUST_F_W = 13 'フォームの左右の調整幅
Private Const ADJUST_F_H = 30 'フォームの上下の調整幅

'マルチページ
Private Const ADJUST_M_W = 5 'マルチページの左右の調整幅
Private Const ADJUST_M_H = 18 'マルチページの上下の調整幅

'ボタン
Private Const BTN_W = 70 'ボタンの幅-フォームの最低幅以下にすると余白が増える
Private Const BTN_H = 20 'ボタン1個の高さ

・・・

各マルチページに該当するボタンがない場合は、ページ自体が作成されません。
又、各ページに配置されるボタンの順番は、モジュール名でソートして表示させています。
好みの順番で表示させたい場合は・・・・モジュール名を工夫してください。
(良いアイデアが思いつきませんでした)

あと何か有ったかなぁ? マクロ用のメニューなんて今更だし。


念の為、このままではOffice製品では機能しないです。

プロジェクト名・パスの取得方法は、imihitoさんが
こちらのコメント欄に記載して頂いてます。
実行中のプロジェクト名とパス取得する - C#ATIA

ボタン押した際の各マクロの実行方法は、こちらの
「Application.Run」の方法で可能だろうと思います。
外部のマクロを実行する2 - C#ATIA


正規表現もまともに使ったの初めてでしたし、まさか自分が
CallByNameを使うコードを書く日が来るとは思っていませんでしたよ。