この掲示板は AutoCADマクロ屋本舗 の掲示板です。

【 注意 】最初に必ず ↓↓ 下記内容 ↓↓ を参照ください。
① マクロが分からない方は、まず 【 マクロ講座 】 を参照ください。
② 質問の前に 【 マクロ使用前の注意事項 】 をお読みください。
③ 質問する時は、新規投稿フォーム下の【 新規投稿時のお願い 】を必ずお読みください。

LAYMRGで最終確認をダイアログ表示
消されちゃった質問に対して、何となく作ってみた。

元々の質問内容(要望)をよく読んでなかったし、
提示されたコードもよく覚えてないから、全く要望とは関係ない動作になっている可能性大。

(defun C:Mrg_Lay ( / Lay1 Lay2)
(setq Lay1 (GetObLayer "1個目(消える画層)の"))
(if Lay1 (setq Lay2 (GetObLayer "2個目(残る画層)の")))
(if Lay2 (if (not (eq Lay1 Lay2)) (Gousei Lay1 Lay2)))
(princ)
)

(defun Gousei (Lay1 Lay2)
(if (Get_YesNo_Msg (strcat "画層[" Lay1 "] (消える)を\n[" Lay2 "] (残る)に合成します。\n処理を実行してもよろしいですか?") "最終確認")
(progn
(command "LAYMRG" "N" Lay1 "" "N" Lay2 "Y")
)
(progn
(princ "\n処理はキャンセルされました。")
)
)
)

(defun GetObLayer (msg / ent entData layerName)
(setq ent (entsel (strcat "\n" msg "オブジェクトを選択してください: ")))
(if ent
(progn
(setq entData (entget (car ent)))
(setq layerName (cdr (assoc 8 entData)))
)
nil
)
)


;;; ====================================================================
;;; ユーザーにYes/Noを確認する汎用関数
;;; 引数: msg (メッセージ文字列), title (ダイアログのタイトル文字列)
;;; 戻り値: 「はい」なら T, 「いいえ」なら nil
;;;popupの数値

;0 「OK」 のみ
;1 「OK」 + 「キャンセル」
;2 「中止」 + 「再試行」 + 「無視」
;3 「はい(Yes)」 + 「いいえ(No)」 + 「キャンセル」
;4 「はい(Yes)」 + 「いいえ(No)」
;5 「再試行」 + 「キャンセル」

;16 アイコン「×」エラー・停止 (Critical)
;32 アイコン「?」問い合わせ (Question)
;48 アイコン「!」警告・注意 (Exclamation)
;64 アイコン「i」情報 (Information)

;256 第2ボタンをデフォルトにする(エンターで確定する際)
;512 第3ボタンをデフォルトにする(エンターで確定する際)

;262144 最前面表示

;戻り値 押されたボタン
;1 「OK」
;2 「キャンセル」
;3 「中止」
;4 「再試行」
;5 「無視」
;6 「はい(Yes)」
;7 「いいえ(No)」
;-1 タイムアウト 秒数指定すると、指定秒数後にダイアログが自動で閉じる。0秒だとずっと閉じない。
; 例えば5秒後ならsecを5にする(vlax-invoke-method wsh 'popup msg sec title bitflag))
; 但し互換CADでは0以外を入れても認識されず、0の挙動になる。
;;; ====================================================================
(defun Get_YesNo_Msg (msg title / wsh res)
(vl-load-com)
(setq res 7)
(setq wsh (vlax-create-object "WScript.Shell"))
;; 4 (Yes/Noボタン) + 48 (警告・注意アイコン「!」) + 262144 (TOPMOST)= 262196 を指定
(setq res (vlax-invoke-method wsh 'popup msg 0 title 262196))
(vlax-release-object wsh)
(princ res)
;; 6であれば T、それ以外(いいえ)は nil を返す
(= res 6)
)
  • Hamu
  • 2026/07/14 (Tue) 11:43:42

返信フォーム






プレビュー (投稿前に内容を確認)