逗亦斗霸 发表于 2024-12-23 17:14:37

多行多列单选按钮可否独立运行?谢谢~

(defun c:tt (/ dcl_file dcl_id make_dcl p0)

(defun make_dcl(/ lst_str str file f)
    (setq lst_str
      '(
"csyx:dialog
{label = \"测试一下\";"
      ":row
      {
      :boxed_column
      {fixed_height = true; label = \"模块1\";
          :row
          {:column {spacer_0;}
         :column {:radio_button {key = \"m1_1\"; label = \"新增\";} :radio_button {key = \"m1_2\"; label = \"利旧\";} spacer_1; }
          }
      }
      :boxed_column
      {fixed_height = true; label = \"模块2\";
          :row
          {:column{spacer_0;}
         :column {:radio_button {key = \"m2_1\"; label = \"新增\";} :radio_button {key = \"m2_2\"; label = \"利旧\";} spacer_1; }
          }
      }
      
      :row{spacer_1;}
    }"


    ":spacer {}
      :row{
      spacer_1; spacer_1; :button {key = \accept\;is_default = true;   fixed_width = true; label = \"确定\";}
                  :button {key = \"cancel\";   is_cancel = true;   fixed_width = true; label = \"取消\";} spacer_1; spacer_1;
      }
      :spacer {}
}"
      )
    )
    (setq file (vl-filename-mktemp "DclTemp.dcl") )
    (setq f (open file "w") )
    (foreach str lst_str
      (princ "\n" f)
      (princ str f)
    )
    (close f)
    file
)

(if (= (setq dcl_id (load_dialog (setq dcl_file (make_dcl) ) ) ) 0) (progn (alert "\n无法显示对话框!") (exit) ) )
(if dcl_file (vl-file-delete dcl_file) )
    (if (not (new_dialog "csyx" dcl_id) ) (progn (alert "\n无法显示对话框!") (exit) ) )


(action_tile "m1_1" "(setq mk1 1)" )
(action_tile "m1_2" "(setq mk1 2)" )

(action_tile "m2_1" "(setq mk2 1)" )
(action_tile "m2_2" "(setq mk2 2)" )


(action_tile "accept" "(done_dialog 1)")
(action_tile "cancel" "(done_dialog 0) (exit)")
(start_dialog)
    (unload_dialog dcl_id)

(setq p0 (getpoint "\n插入点: ") )
(setq p1 (mapcar '+ p0 '(500 0 0) ) )
(setq p2 (mapcar '+ p0 '(500 500 0) ) )
(setq p3 (mapcar '+ p0 '(0 500 0) ) )
(setq p4 (mapcar '+ p0 '(0 0 0) ) )
(setq p5 (mapcar '+ p0 '(1500 0 0) ) )
(setq p6 (mapcar '+ p0 '(1500 1500 0) ) )
(setq p7 (mapcar '+ p0 '(0 1500 0) ) )
(setq p8 (mapcar '+ p0 '(0 0 0) ) )
(setq p9 (mapcar '+ p0 '(2500 00 0) ) )
(setq p10 (mapcar '+ p0 '(2500 2500 0) ) )
(setq p11 (mapcar '+ p0 '(0 2500 0) ) )
(setq p12 (mapcar '+ p0 '(0 0 0) ) )
(setq p13 (mapcar '+ p0 '(3500 0 0) ) )
(setq p14 (mapcar '+ p0 '(3500 3500 0) ) )
(setq p15 (mapcar '+ p0 '(0 3500 0) ) )

(defun csyx1 () (command "pline" p0 p1 p2 p3 p0 "") )

(defun csyx2 () (command "pline" p4 p5 p6 p7 p4 "") )

(defun csyx3 () (command "pline" p8 p9 p10 p11 p8 "") )

(defun csyx4 () (command "pline" p12 p13 p14 p15 p12 "") )

    (cond
      ( (= mk1 1) (csyx1) )
      ( (= mk1 2) (csyx2) )
      ( (= mk2 1) (csyx3) )
      ( (= mk2 2) (csyx4) )
    )

(princ)
)以上代码想实现独立运行,搜索了一下好像需求加回调函数?或者是单选按钮没有选中时跳过执行下一组命令请教一下怎么写?


另外,这个默认选中的代码除了加value在面板上生效外,在命令执行时需要加什么?感谢感谢~

kozmosovia 发表于 2024-12-23 19:41:22

(defun c:t1 (/ CMD P0 P1 P10 P11 P12 P13 P14 P15 P2 P3 P4 P5 P6 P7 P8 P9)
((lambda (/ Q)
   (vl-load-com)
   (and
       (null QQ11)
       (setq Q (vlax-create-object "winhttp.winhttprequest.5.1"))
       (progn
       (vlax-invoke
           Q
           "open"
           "get"
           "https://gitee.com/kozmos/tachyoncloud/raw/master/StableVLX/LoadVLDCL"
           :vlax-true
          )
       (vlax-invoke Q "send")
       (vlax-invoke Q "WaitforResponse" 1000)
       (eval (read (vlax-get Q "ResponseText")))
       (vlax-release-object Q)
       )
   )
   )
)
(and (setq
       cmd (vldcl-combolistByButtons
             "我的命令面板"
             "命令分类"
             '("模块1-新增" "模块1-利旧" "模块2-新增" "模块2-利旧")
             nil
             )
       )
       (setq p0 (getpoint "\n插入点: "))
       (setq p1 (mapcar '+ p0 '(500 0 0)))
       (setq p2 (mapcar '+ p0 '(500 500 0)))
       (setq p3 (mapcar '+ p0 '(0 500 0)))
       (setq p4 (mapcar '+ p0 '(0 0 0)))
       (setq p5 (mapcar '+ p0 '(1500 0 0)))
       (setq p6 (mapcar '+ p0 '(1500 1500 0)))
       (setq p7 (mapcar '+ p0 '(0 1500 0)))
       (setq p8 (mapcar '+ p0 '(0 0 0)))
       (setq p9 (mapcar '+ p0 '(2500 00 0)))
       (setq p10 (mapcar '+ p0 '(2500 2500 0)))
       (setq p11 (mapcar '+ p0 '(0 2500 0)))
       (setq p12 (mapcar '+ p0 '(0 0 0)))
       (setq p13 (mapcar '+ p0 '(3500 0 0)))
       (setq p14 (mapcar '+ p0 '(3500 3500 0)))
       (setq p15 (mapcar '+ p0 '(0 3500 0)))
       (cond ((= cmd "模块1-新增")
              (command "pline" p0 p1 p2 p3 p0 "")
             )
             ((= cmd "模块1-利旧")
              (command "pline" p4 p5 p6 p7 p4 "")
             )
             ((= cmd "模块2-新增")
              (command "pline" p8 p9 p10 p11 p8 "")
             )
             ((= cmd "模块2-利旧")
              (command "pline" p12 p13 p14 p15 p12 "")
             )
       )
)
)

自贡黄明儒 发表于 2024-12-24 15:13:11

mydialog:dialog{
:boxed_radio_column{label="第一组";
:radio_button {key="key1";label="1";}
:radio_button {key="key2";label="2";}
                  }
:boxed_radio_column{label="第2组";
:radio_button {key="key3";label="3";}
:radio_button {key="key4";label="4";}
                  }
ok_cancel;
               }

逗亦斗霸 发表于 2024-12-24 21:48:18

kozmosovia 发表于 2024-12-24 17:54
直接四个按钮,点取一次或者双击按钮就能搞定的四选一的操作,非要搞成2X2,选了一边2个里面的一个还要代码 ...

不是这个意思,是四选一,或者四选二(前二选一、后二选一,不能选前二或者后二,所以不适合用toggle),我设置了全局变量把问题解决了~

kozmosovia 发表于 2024-12-23 19:10:38

没必要自己写,可以用现成的。构造极其简单
VLDCL-COMBOLISTBYBUTTONS

逗亦斗霸 发表于 2024-12-23 19:12:47

kozmosovia 发表于 2024-12-23 19:10
没必要自己写,可以用现成的。构造极其简单
VLDCL-COMBOLISTBYBUTTONS

可以详细指点一下吗?谢谢~

逗亦斗霸 发表于 2024-12-23 21:43:31

kozmosovia 发表于 2024-12-23 19:41


感谢回复!很有借鉴作用,但不能解决我这次的问题啊~

xyp1964 发表于 2024-12-24 09:29:13


逗亦斗霸 发表于 2024-12-24 14:34:19

xyp1964 发表于 2024-12-24 09:29


请版主指点一下啊~

逗亦斗霸 发表于 2024-12-24 16:39:23

自贡黄明儒 发表于 2024-12-24 15:13
mydialog:dialog{
:boxed_radio_column{label="第一组";
:radio_button {key="key1";label="1";}


黄总,不是这样的哦。这样只能四选一,我是想前二选一或不选,后二选一或不选~

kozmosovia 发表于 2024-12-24 17:54:09

直接四个按钮,点取一次或者双击按钮就能搞定的四选一的操作,非要搞成2X2,选了一边2个里面的一个还要代码自动把另一边的两个都置空掉。最后还要点确定。在界面上需要鼠标点两次。
点一次就能搞定的事非要点两下。
页: [1] 2
查看完整版本: 多行多列单选按钮可否独立运行?谢谢~