明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 819|回复: 8

[提问] 请教 dcl list_boxl列表关联sld

[复制链接]
发表于 2022-2-11 13:32 | 显示全部楼层 |阅读模式
  1. ;;里面s_t变量有变化.sld没有跟着变化
  2. (defun c:tt
  3.        (/ )
  4.           ; 初始化变量、标准大径表和标准长度表
  5.   (setq  sdt 2
  6.   s_t "0"
  7.   )
  8.             ;;定义初始化主对话框函数
  9.   (if (< (setq id (load_dialog "c:\\12-19.dcl")) 0)
  10.     (exit)
  11.   )          ;装入对话框文件
  12.   (initdlg1)        ;初始化主对话框
  13.            ;while循环结束
  14.   (unload_dialog id)      ;卸载对话框文件
  15.   
  16.   (princ)
  17. )

  18. ;定义绘制螺钉的函数
  19.   (defun initdlg1 ()
  20.    
  21.     (if  (not (new_dialog "main_dlg" id))
  22.       (exit)
  23.     )

  24.    ; (setq ss (get_tile "s_type"))
  25.    
  26.     ;(action_tile "s_type" "(f_stype )")  ;; 定义螺钉种类列表的动作
  27.    
  28.     (cond( (eq s_t '"0")
  29.     (f_img "screw_0" "d:\\example\\sld\\12-19-scr0") ;;sld      初始化图像按钮上  (defun f_img (key sld)  ;定义初始化图像函数
  30.       )
  31.     ( (eq s_t '"1") (f_img "screw_0" "66"));;sld        (defun f_img (key sld)  ;定义初始化图像函数
  32.      ( (eq s_t '"2")(f_img "screw_0" "77"));;sld
  33.      ( (eq s_t '"3")(alert"ii"));;sld
  34.    )
  35.     ;;-------------------------------------------------------------------------------------------------------------------
  36.       ;;;定义图像按钮的动作是确定螺钉的种类并且选中螺钉种类表的相应行
  37.     (action_tile
  38.       "screw_0"
  39.       "(setq s_t \"0\")(set_tile \"s_type\" \"0\")"
  40.     )
  41.    
  42.     ;;;============================================
  43.     (action_tile "s_type" "(f_stype )")  ;; 定义螺钉种类列表的动作
  44.     (action_tile "accept" "(done_dialog 2)") ;; 定义继续按钮的动作
  45.     (action_tile "cancel" "(done_dialog 0)") ;; 定义退出按钮的动作
  46.     (mode_tile "screw_0" 2)    ;;聚焦在图像按钮"screw_0"上
  47.     (set_tile "s_type" "0")    ;;设置螺钉种类表的第一行为被选中状态
  48.     (setq sdt (start_dialog))
  49.   )
  50. (defun f_stype ();定义螺钉种类列表的动作函数
  51.     (setq s_t (get_tile "s_type"))  ;将获取的螺钉种类赋给s_t
  52.     (setq img_key (strcat "screw_" "0";-----------------------------"0"  锁定第一个sld----------------------
  53.         ;s_t
  54.         )) ;拼接图像按钮的关键字
  55.     (mode_tile img_key 2)    ;设置相应的图像按钮为聚焦状态
  56.   )         
  57.         
  58.   (defun f_img (key sld)  ;定义初始化图像函数
  59.     (start_image key)
  60.    
  61.     (slide_image 0 0 (dimx_tile key) (dimy_tile key) sld)
  62.     (end_image)
  63.   )          ;定义获取AutoCAD标准颜色函数
  64.             ;定义初始化颜色图像按钮数
  65.             
  66.   
  67.             ;定义获取所有控件当前数据的函数
  68.          
  69. ;;===================================================
  70. ;

  71. //主对话框的名字是main_dlg
  72. main_dlg:dialog{
  73. label="确定螺钉种类:";
  74. :row{ //第1行开始,该行有1个加框列和1个列表
  75. :boxed_column{ //加框列开始,该列有2行,每行有2个图像按钮
  76. label="选择螺钉种类:";
  77. :row{ //加框列内第1行开始,该行有2个图像按钮
  78. :image_button{ //图像按钮1
  79. color=-2;
  80. width=15;
  81. aspect_ratio=0.66;
  82. key="screw_0";}

  83. }//加框列内第1行结束
  84. }//加框列内第2行和加框列结束
  85. :list_box{label = "螺钉种类"; //列表开始
  86. list="GB/T 65-2000\nGB/T 68-2000\nGB/T 5780-2000\nGB/T 70.1-2000";//初值
  87. key = "s_type";
  88. width=15;
  89. fixed_width=true;}//列表结束
  90. } //第1行结束
  91. :row{ //第2行开始,该行有2个按钮和2个间隔
  92. spacer_1; //第1个间隔
  93. :button{label="继续";
  94. key="accept";
  95. is_default=true;
  96. fixed_width=true;} //"继续"按钮
  97. :button{label="退出";
  98. key="cancel";
  99. fixed_width=true;} //"退出"按钮
  100. spacer_1; //第2个间隔
  101. }//第2行结束,以上2个按钮的关键字只能是"accept"和"cancel"。
  102. } //"main_dlg"主对话框定义结束

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-2-11 16:23 | 显示全部楼层
本帖最后由 wzg356 于 2022-2-11 16:27 编辑

完整的 ,自己补功能

(defun c:tt5 ( / kk)
        (setq kk(getsld))
        (cond
                ((= kk "0")(alert "功能0"))
                ((= kk "1")(alert "功能1"))
                ((= kk "2")(alert "功能2"))
                ((= kk "3")(alert "功能3"))(t nil)
        )
)
(defun getsld (/  lst_str str file f f_stype dcl_id dd kk)
        (setq lst_str '(
                "test:dialog {"
                ":row {"
                "   :list_box {key = \"key1\" ;label = \"种类\"; width=15; list=\"GB/T 65-2000\\\nGB/T 68-2000\\\nGB/T 5780-2000\\\nGB/T 70.1-2000\";fixed_width=true;}"
                "   :image {key = \"key2\" ;width=20;fixed_width=true;fixed_height=true;aspect_ratio =0.6;}"
                "}"
                "ok_cancel;"
                "}"
                )
        )
        (defun f_stype (num / sldlst)
                (setq sldlst(list "GB/T 65-2000" "GB/T 68-2000" "GB/T 5780-2000" "GB/T 70.1-2000"))
                ;表元素-幻灯片名,格式须符合函数(slide_image ........)中sldname要求
                (start_image "key2");控件image的key
                (fill_image 0 0 (dimx_tile "key2")  (dimy_tile "key2") 255);底色
                ;(slide_image 0 0 (dimx_tile "key2") (dimy_tile "key2") (nth num sldlst));有幻灯片把注释取消
                (end_image)
                (set_tile "key2" (nth num sldlst));有幻灯片注释这一句
            )            
        (setq file (vl-filename-mktemp "DclTemp.dcl"))
        (setq f (open file "w"))
        (foreach str lst_str        (princ "\n" f)(princ str f))
        (close f)   
        (new_dialog "test" (setq dcl_id (load_dialog  file)))
        (set_tile "key1" "0");初始化控件list_box
        (f_stype 0)
        (action_tile "key1" "(f_stype (atoi $value))")
        (action_tile "accept" "(setq kk(get_tile \"key1\"))(done_dialog 1)")
        (setq dd (start_dialog))
        (unload_dialog dcl_id)
        (vl-file-delete file);删除临时dcl文件      
        kk
)

评分

参与人数 1明经币 +1 收起 理由
434939575 + 1 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2022-2-11 14:32 | 显示全部楼层
感觉这应是LISP中控制
发表于 2022-2-11 15:02 | 显示全部楼层
本帖最后由 wzg356 于 2022-2-11 15:12 编辑

参考以下修改看看

(set_tile "s_type" "0");初始化控件list_box
(f_stype 0);初始化控件image
(action_tile "s_type" "(f_stype (atoi $value))")
;list_box点击动作,切换image的幻灯片
;f_stype修改为
(defun f_stype (num / sldlst)
        (setq sldlst(list "GB/T 65-2000" "GB/T 68-2000" "GB/T 5780-2000" "GB/T 70.1-2000"))
        ;表元素-幻灯片名,格式须符合函数(slide_image ........)中sldname要求
        (start_image "screw_0");控件image的key
        (fill_image 0 0 (dimx_tile "screw_0")  (dimy_tile "screw_0") 255);底色,可以换        ;之前的幻灯片清掉
        (slide_image 0 0 (dimx_tile "screw_0") (dimy_tile "screw_0") (nth num sldlst))
       ;载入新的幻灯片
        (end_image)        
)

 楼主| 发表于 2022-2-11 15:29 | 显示全部楼层
ynhh 发表于 2022-2-11 14:32
感觉这应是LISP中控制

嗯,对他们连接不会,
 楼主| 发表于 2022-2-11 15:32 | 显示全部楼层
wzg356 发表于 2022-2-11 15:02
参考以下修改看看

(set_tile "s_type" "0");初始化控件list_box

谢谢,我的点选右边列表,s_t这个变量有变化,"0" "1""2""3"   eq这里感觉没起作用
 楼主| 发表于 2022-2-11 16:36 | 显示全部楼层
wzg356 发表于 2022-2-11 16:23
完整的 ,自己补功能

(defun c:tt5 ( / kk)

十分感谢。
发表于 2022-2-11 16:52 | 显示全部楼层
如果种类不多,直接用多个image_button好些,点击图片直接执行动作,减少点击确定
 楼主| 发表于 2022-2-11 17:33 | 显示全部楼层
wzg356 发表于 2022-2-11 16:52
如果种类不多,直接用多个image_button好些,点击图片直接执行动作,减少点击确定

这个图片数也没确定,我希望点击列表,对应显示这种方式
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-20 19:07 , Processed in 0.644168 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表