明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 774|回复: 3

[提问] popup_list的值如何反馈到lisp中,并下次使用默认选择的值

[复制链接]
发表于 2023-4-29 18:19:42 | 显示全部楼层 |阅读模式
30明经币
我想知道如何将dcl对话框中的popup_list的key值转换到lisp函数中,并且下一次使用该命令是会重复上一次选择的key值,如下列代码所示,在DCL中的d5如何反馈到lisp中的c3d5,并下一次使用该命令时对话框显示上一次使用该命令时显示的值



  1. (defun c:c3e(/  p1 p2 p3 p4 p5 p6 p7 p8 e1 p9 d5 d6 d7 d8 d9 o0s pt1 i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12 i13 i14 i15 i16 i17 i18 i19) ;直管一键展开绘制
  2.   (setvar "cmdecho" 0) ;关闭普通命令提示信息
  3.   (setvar "osmode" 0)  ;关闭对象捕捉状态
  4.    (command "._undo" "_begin")
  5.         (defun make-dclCS  (/ lst_str str file f );;面板的界面显示dcl
  6.                 (setq lst_str
  7.                         '(
  8.                                  "矩形直管口字型展开程序:dialog"
  9.                                  "{ // start dcl"
  10.                                  "label = "矩形直管口字型展开程序";"
  11.                                  ":row{"
  12.                                  ":boxed_column{"
  13.                                  ":edit_box{label="直管序号为(个):";key="d1"; edit_width=10;}"
  14.                                  ":edit_box{label="直管长度为(mm):";key="d2"; edit_width=10;}"
  15.                                  ":edit_box{label="直管宽度为(mm):";key="d3"; edit_width=10;}"
  16.                                    ":edit_box{label="直管高度为(mm):";key="d4"; edit_width=10;}"                                
  17.                                  ":popup_list{label="板材厚度为(mm):";key="d5";list="1.5t\\n0.8t\\n1.0t\\n1.2t\\n2.0t\\n3.0t"; edit_width=10;}"
  18.                                  "} "
  19.                                  ":image{width=30;height=4;key="img1"; color=-16;}} "
  20.                                  ":row{"":button{label="确定(&Q)";key="accept";
  21.                                  is_default=true;height=2;}"        ":button{label="取消(&C)";key="cancel";is_cancel=true;height=2;}"":button{label="帮助(&H)";key="help";is_cancel=true;height=2;}" "}"
  22.                           
  23.                                  "fixed_width=true;"
  24.                                  "alignment=left;"
  25.                                  "} // end dll" ;结尾
  26.                          )                     
  27.                 )
  28.                 (setq file (vl-filename-mktemp "DclTemp.dcl"))
  29.                 (setq f (open file "w"))
  30.                 (foreach str lst_str
  31.                         (princ "\n" f)
  32.                         (princ str f)
  33.                 )
  34.                 (close f)
  35.                 ;;返回
  36.                 file
  37.         )
  38.         ;;---------开始写面板调用函数
  39.   (defun getdata2() ;获取当前dcl界面里面控件key的当前值,并保存为全局变量,这里需要保存值的变量名字(JH bhd2 JR)尽量起的复杂一点,否则会引起全局变量冲突
  40.     (setq c3d1  (atof(get_tile "d1")))
  41.     (setq c3d2  (atof(get_tile "d2")))
  42.     (setq c3d3  (atof(get_tile "d3")))
  43.     (setq c3d4  (atof(get_tile "d4")))
  44.     (setq c3d5  (atof(get_tile "d5")))
  45.         )
  46.     (if (not c3d1)
  47.    (progn (setq c3d1 1) ;判断变量是否存在并且为字符串,如果不是则进行初始化定义
  48.           (setq c3d2 500);判断变量是否存在并且为字符串,如果不是则进行初始化定义
  49.           (setq c3d3 500);判断变量是否存在并且为字符串,如果不是则进行初始化定义
  50.           (setq c3d4 2697);判断变量是否存在并且为字符串,如果不是则进行初始化定义
  51.           ));判断变量是否存在并且为字符串,如果不是则进行初始化定义

  52.   
  53.   
  54.   (if (= (setq dcl_id (load_dialog (setq Dcl_File(make-dclCS)))) 0)(progn(alert "\n无法显示对话框!")(exit)))
  55.         (if Dcl_File(vl-file-delete Dcl_File));加载后删除DCL文件
  56.   (if(not (new_dialog "矩形直管口字型展开程序" dcl_id))(progn(alert "\n无法显示对话框!")(exit)))

  57.           (start_image "img1")
  58.           (setq max_x (dimx_tile "img1"))
  59.           (setq max_y (dimy_tile "img1"))
  60.           (slide_image 0 0 max_x max_y "D:/插件/sld/1.sld")
  61.           (end_image);显示图形对话框
  62.           (mode_tile "d1" 2);设置d1为焦点
  63.   
  64.   (set_tile "d1" (rtos c3d1 2 2)) ;将对应key的全局变量传递给控件,以便显示界面的时候直接显示上次记忆的控件key值
  65.   (set_tile "d2" (rtos c3d2 2 2));将对应key的全局变量传递给控件
  66.   (set_tile "d3" (rtos c3d3 2 2));将对应key的全局变量传递给控件
  67.   (set_tile "d4" (rtos c3d4 2 2));将对应key的全局变量传递给控件


  68.   
  69.   (action_tile "accept" "(getdata2)(done_dialog 1)") ;当按下确认按钮的时候保存控件值,然后退出界面,并执行对于功能函数
  70.   (action_tile "cancel" "(getdata2)(done_dialog 0)") ;当按下取消按钮的时候保存控件值,然后退出界面
  71.   (action_tile "help" "(getdata2)(done_dialog 2)")
  72.   (setq re (start_dialog))
  73.   (unload_dialog dcl_id)
  74.      (cond ((= re 0)
  75. (setq dss (get_tile "d5"))             
  76.               (princ dss)
  77.           )
  78.            ((= re 2)
  79.             
  80.               (ALERT
  81.       "\n 1ccccccc"      
  82.        )
  83.             
  84.           )
  85.           ((= re 1)
  86.           (princ "\n单击了确定按钮"))))



最佳答案

查看完整内容

你的意思是 讓 每個 輸入項及選單 有記憶功能 ? 改好了,請參考看看!
发表于 2023-4-29 18:19:43 | 显示全部楼层
本帖最后由 lee50310 于 2023-4-30 13:51 编辑

你的意思是 讓 每個 輸入項及選單 有記憶功能 ?

改好了,請參考看看!

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2023-4-30 08:27:04 | 显示全部楼层
(set_tile "d5" (rtos c3d5 2 2))
回复

使用道具 举报

发表于 2023-4-30 10:18:42 | 显示全部楼层
(START_LIST "LAY1")
    (MAPCAR 'ADD_LIST LAYL)
    (END_LIST)
    (set_tile "LAY1" (RTOS (vl-position LAY LAYL) 2 0))

这是我对图层popup_list的赋值,key是LAY1,list是图纸的图层列表。如果不对popup_list进行赋值,会自动选择字符串“0”,即图层列表中第一项作为默认值。如果想赋值上次的选择,你取得list中上次值的序号,用vl-position函数,然后把这个int转换成字符串,赋值给popup_list的key。(set_tile "LAY1" (RTOS (vl-position LAY LAYL) 2 0)),取得上次图层设定值在图层列表中序号,然后。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 16:31 , Processed in 0.172046 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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