明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3769|回复: 9

dcl中的下拉列表框中数据怎么在lisp中读出来

[复制链接]
发表于 2011-10-14 17:35:15 | 显示全部楼层 |阅读模式
1.dcl中的下拉列表框
:popup_list{
            label="选择绘图类型     ";
            key="mylist";
            edit_width=20;
            list ="桌子\n椅子\n茶几\n门\n窗户";
                  }
具体的在lisp程序中该如何确定你选择的是哪一个,并且将它调用出来
2.比如说我要画出桌子,就是当我选择桌子这个选项之后是
(setq u (nt h (atoi (get_tile "mylist")) '(桌子 椅子 茶几 门 窗户)))
是么?可是我用(princ u)命令行出来的是桌子
请教一下,实在是不明白,下拉框到底该怎么对应到具体的值上?
发表于 2011-10-14 18:40:41 | 显示全部楼层
(atoi (get_tile "mylist")) 不就是你想要的值么?如果选了桌子就是0,选了门就是3。
(setq u (nth (atoi (get_tile "mylist")) '(桌子 椅子 茶几 门 窗户))) 是把'(桌子 椅子 茶几 门 窗户)这个列表里第(atoi (get_tile "mylist"))个元素赋值给u,你选的是桌子,得到的当然是桌子。
 楼主| 发表于 2011-10-14 20:42:38 | 显示全部楼层
那如果选择了桌子,u值到底是等于“桌子”这个字符串还是指代0这个整数呢?
请教了,刚入门

点评

u=桌子 (get_tile "mylist") = "0" (atoi "0") = 0 (nth 0 '(桌子 椅子 茶几 门 窗户)) = 桌子 从列表框中只能得出序号,根据序号在字符串中提取相应的内容 你得好好看看基础的东西   发表于 2011-10-14 22:29
 楼主| 发表于 2011-10-14 21:11:17 | 显示全部楼层
(defun c:jzlt(/ dcl_id )
        (setq dcl_id (load_dialog "jzlt.dcl"))
        (if (not (new_dialog "jzlt" dcl_id)) (exit))
          (if (= xbl nil) (setq xbl 1.0))
          (if (= ybl nil) (setq ybl 1.0))
            (set_tile "xbl" (rtos xbl))
            (set_tile "ybl" (rtos ybl))
   
            (pbxs u)
              (action_tile "xbl" "(setq xbl (atof $value))")
              (action_tile "ybl" "(setq ybl (atof $value))")
            
              (action_tile "accept" " (getlist)(done_dialog)")
              (action_tile "cancel" "(exit)(done_dialog)")
      

               (start_dialog)

        (unload_dialog dcl_id)
     


  (cond ((= u "桌子") (command "-insert" "zhuozi" pause xbl ybl))
        ((= u "窗户") (command "-insert" "chuanghu" pause xbl ybl))
        ((= u "床") (command "-insert" "chuang" pause xbl ybl))
        
           )




  )
(defun show(kimage sld / x y)
       (setq x (dimx_tile kimage))
       (setq y (dimy_tile kimage))
       (start_image kimage)
       (fill_image 0 0 x y -2)
       (slide_image 0 0  x y sld)
       (end_image)
)
(defun getlist ()
  (setq u (nth (atoi (get_tile "mylist")) '(桌子 窗户 床)))
  
)
(defun pbxs(u)
  (cond ((= u "桌子") (show "kimage" "zhuozi"))
        ((= u "窗户") (show "kimage" "chuanghu"))
        ((= u "床") (show "kimage" "chuang"))
        
           )
)
 楼主| 发表于 2011-10-14 21:11:50 | 显示全部楼层
谁能指教一下,不明白。。。。。。。
发表于 2011-10-14 22:03:10 | 显示全部楼层
明茉菲嫣 发表于 2011-10-14 20:42
那如果选择了桌子,u值到底是等于“桌子”这个字符串还是指代0这个整数呢?
请教了,刚入门

u的值取决于你给它的赋值。
你的语句不是有(setq u ...)么?
 楼主| 发表于 2011-10-14 22:17:00 | 显示全部楼层
可是我现在使用
(setq u  (get_tile "mylist"))
然后我用(princ u)检验,无论我选择列表中的哪一个,命令行始终都显示o,也就是第一个索引,这是为什么?

点评

没有(action_tile "mylist" "(setq u $value)")这一句,u也就不会有任何变化  发表于 2011-10-14 22:33
 楼主| 发表于 2011-10-14 22:39:33 | 显示全部楼层
谢谢各位的帮忙,解决了。。。。
vormittag 和cabinsummer ,非常感谢你们
发表于 2013-7-28 17:52:01 | 显示全部楼层
看来楼上的指教,又学了点,谢谢
发表于 2021-4-5 00:14:27 来自手机 | 显示全部楼层
收藏学习了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-16 23:58 , Processed in 0.190482 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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