明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1154|回复: 10

[提问] 对话框如何输入字符串并将其转换成变量进行赋值呢

[复制链接]
发表于 2023-4-7 08:26:59 | 显示全部楼层 |阅读模式
20明经币
  大家好,之前一个社区大佬帮忙写了一个对话框代码,我后面的程序都是在此代码的基础上进行对话框编辑的,但是我发现这个对话框有限制,就是只能输入数字,输入字符串(字母或者其他符号等)就不能用了,求大佬帮我改一下下面的代码,让其无论输入数字或者字符串都能赋予值的变量

  1. (defun c:ss (/ d1 d2 pt0 d3)
  2.   (setvar "cmdecho" 0) ;关闭普通命令提示信息
  3.   (setvar "osmode" 0)  ;关闭对象捕捉状态
  4.    (command "._undo" "_begin")
  5.   (setq Keys '("d1" "d2" "d3" ))
  6.   (if (not bhd4)
  7.   (progn
  8.   (setq bhd1 1 bhd2 1 bhd3 150)
  9.   )) ;设变量初值
  10.   
  11.     ;加载DCL对话框
  12.     (setq DcLwjm (make_ZDBH_dcl))      ;生成DCL对话框
  13.     (setq dcl_id (load_dialog DcLwjm)) ;加载DCL对话框

  14.     ;激活DCL画面
  15.     (if (not (new_dialog "自动编号" dcl_id))
  16.         (exit)
  17.     )

  18.     ;控件赋初值
  19.     (mapcar '(lambda(Key Val) (set_tile Key Val))
  20.              Keys
  21.              (list
  22.              (rtos bhd1 2 2)
  23.              (rtos bhd2 2 2)
  24.        (rtos bhd3 2 2)
  25.        )
  26.     )




  27.   
  28.     ;设置d1为焦点
  29.     (mode_tile "d1" 2)

  30.     ;控件相关操作
  31.     (foreach Key Keys
  32.         (action_tile Key "(set (read (strcat "bh" $key)) (atof (get_tile $key)))
  33.                           
  34.                           "
  35.         )
  36.     )
  37.   
  38.     (action_tile "accept" "(done_dialog 1)")

  39.     ;将控制权交给DCL
  40.     (setq do_what (start_dialog))

  41.     ;终止DCL: (done_dialog 0) (done_dialog 1)
  42.     (cond ((= do_what 0)
  43.               (princ "\n单击了取消按钮")
  44.           )
  45.           ((= do_what 1)
  46.               (princ "\n单击了确定按钮")
  47.               ; 这里加入进行相应的处理部分


最佳答案

查看完整内容

用你的套不习惯,用我习惯的重新套了一遍
发表于 2023-4-7 08:27:00 | 显示全部楼层
用你的套不习惯,用我习惯的重新套了一遍

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2023-4-7 09:28:34 | 显示全部楼层
代码不完整,,少了bh4的获取
回复

使用道具 举报

 楼主| 发表于 2023-4-7 09:30:30 | 显示全部楼层
yaojing38 发表于 2023-4-7 09:28
代码不完整,,少了bh4的获取

我知道,BH4只是我用来测试的,可以替换bhd1,bhd2,我现在的疑惑是如果把bhd1改成字符串“1/” "deh-"之类的就会运行出错
回复

使用道具 举报

发表于 2023-4-7 10:38:56 | 显示全部楼层
开头的部分,替换一下试试 ,之后的不动
(defun c:ss (/ d1 d2 pt0 d3)
  (setvar "cmdecho" 0) ;关闭普通命令提示信息
  (setvar "osmode" 0)  ;关闭对象捕捉状态
        (command "._undo" "_begin")
  (setq Keys '("d1" "d2" "d3" ))
  (if (not bhd4)
                (progn
                        (setq bhd1 "1" bhd2 "1" bhd3 "150")
                )) ;设变量初值
  
        ;加载DCL对话框
        (setq DcLwjm (make_ZDBH_dcl))      ;生成DCL对话框
        (setq dcl_id (load_dialog DcLwjm)) ;加载DCL对话框
       
        ;激活DCL画面
        (if (not (new_dialog "自动编号" dcl_id))
                (exit)
        )
       
        ;控件赋初值
        (mapcar
                '(lambda(Key Val) (set_tile Key Val))
                Keys
                (list bhd1 bhd2 bhd3)               
        )
       
       
回复

使用道具 举报

 楼主| 发表于 2023-4-7 11:26:57 | 显示全部楼层
xj6019 发表于 2023-4-7 10:38
开头的部分,替换一下试试 ,之后的不动
(defun c:ss (/ d1 d2 pt0 d3)
  (setvar "cmdecho" 0) ;关闭普 ...

到最后一步还是有问题,显示文字出错,因为我只需要前缀带有字符串,其他都是正常的文字,所以在你的基础上稍微改了一下,最后还是不行大佬有空帮忙看看什么问题,下面是完整代码
  1. (defun make_ZDBH_dcl (/ lst_str str file f)
  2.   (setq lst_str
  3.         (list
  4.          "自动编号:dialog { //定义名字为自动编号的对话框"
  5. "     label= "自动编号";//显示在对话框顶部的标签"
  6.   "     :row{ //引用行"
  7.   "           :edit_box{ //引用编辑框1"
  8.   "               label="编号前缀为: "; //编辑框1的标签"
  9.   "               edit_width=8; //编辑框1的宽度"
  10.   "               key= "d1";//编辑框1的关键字"
  11.   "               mnemonic = "d1";//编辑框1的热键"
  12.   "            }} //编辑框1引用结束"
  13.   "     :row{ //引用行"
  14.   "           :edit_box{ //引用编辑框1"
  15.   "               label="起始数字为: "; //编辑框1的标签"
  16.   "               edit_width=8; //编辑框1的宽度"
  17.   "               key= "d2";//编辑框1的关键字"
  18.   "               mnemonic = "d2";//编辑框1的热键"
  19.   "            }} //编辑框1引用结束"

  20.   "     :row{ //引用行"
  21.   "           :edit_box{ //引用编辑框1"
  22.   "               label="编号大小为:   "; //编辑框1的标签"
  23.   "               edit_width=8; //编辑框1的宽度"
  24.   "               key= "d3";//编辑框1的关键字"
  25.   "            }} //编辑框1引用结束"

  26.              "     ok_cancel;// 引用ok_cancel组合控件"
  27.              "}"
  28.        )
  29.   )
  30.   (setq file (vl-filename-mktemp "DclTemp-ZDBH.dcl"))
  31.   (setq fff (open file "w"))
  32.   (foreach str lst_str
  33.       (write-line str fff)
  34.   )
  35.   (close fff)
  36.   file
  37. )




  38.   (defun c:ss (/ d1 d2 pt0 d3)
  39.   (setvar "cmdecho" 0) ;关闭普通命令提示信息
  40.   (setvar "osmode" 0)  ;关闭对象捕捉状态
  41.         (command "._undo" "_begin")
  42.   (setq Keys '("d1" "d2" "d3" ))
  43.   (if (not bhd4)
  44.                 (progn
  45.                         (setq bhd1 "1/" bhd2 1 bhd3 150)
  46.                 )) ;设变量初值
  47.   
  48.         ;加载DCL对话框
  49.         (setq DcLwjm (make_ZDBH_dcl))      ;生成DCL对话框
  50.         (setq dcl_id (load_dialog DcLwjm)) ;加载DCL对话框
  51.       
  52.         ;激活DCL画面
  53.         (if (not (new_dialog "自动编号" dcl_id))
  54.                 (exit)
  55.         )
  56.       
  57.         ;控件赋初值
  58.         (mapcar
  59.                 '(lambda(Key Val) (set_tile Key Val))
  60.                 Keys
  61.                 (list bhd1
  62.                       (rtos bhd2 2 2)
  63.                       (rtos bhd3 2 2))               
  64.         )




  65.   
  66.     ;设置d1为焦点
  67.     (mode_tile "d1" 2)

  68.     ;控件相关操作
  69.     (foreach Key Keys
  70.         (action_tile Key "(set (read (strcat "bh" $key)) (atof (get_tile $key)))
  71.                           
  72.                           "
  73.         )
  74.     )
  75.   
  76.     (action_tile "accept" "(done_dialog 1)")

  77.     ;将控制权交给DCL
  78.     (setq do_what (start_dialog))

  79.     ;终止DCL: (done_dialog 0) (done_dialog 1)
  80.     (cond ((= do_what 0)
  81.               (princ "\n单击了取消按钮")
  82.           )
  83.           ((= do_what 1)
  84.               (princ "\n单击了确定按钮")
  85.               ; 这里加入进行相应的处理部分








  86.   
  87.   

  88.   (while (< bhd2 9999)
  89.   (progn
  90.     (setq pt0 (getpoint "\n请选择插入点: "))
  91.     (if (null pt0) (exit))
  92.     (setq d2s( rtos bhd2 2 2))
  93.     (command "color" 1)
  94.     (command "text" "m" pt0 bhd3 0 (strcat bhd1  d2s))
  95.     (setq bhd2 (1+ bhd2))
  96.     (command "color" 7)))
  97.   ))
  98.    (setvar "osmode" 16383)  ;打开对象捕捉状态
  99.   (princ) ;静默退出
  100.   (command "._undo" "_end")
  101.   )
回复

使用道具 举报

发表于 2023-4-7 12:04:30 | 显示全部楼层
本帖最后由 yaojing38 于 2023-4-7 12:15 编辑

    ;控件相关操作
    (foreach Key Keys
        (action_tile Key "(set (read (strcat "bh" $key)) (atof (get_tile $key)))
                          
                          "
        )
    )
        ;替换
  (action_tile "d1" "(set (read (strcat "bh" $key)) (read(get_tile $key)))")
        (action_tile "d2" "(set (read (strcat "bh" $key)) (atof (get_tile $key)))")
        (action_tile "d3" "(set (read (strcat "bh" $key)) (atof (get_tile $key)))")
回复

使用道具 举报

 楼主| 发表于 2023-4-7 13:52:29 | 显示全部楼层
xj6019 发表于 2023-4-7 08:27
用你的套不习惯,用我习惯的重新套了一遍

谢谢大佬,学习了
回复

使用道具 举报

 楼主| 发表于 2023-4-7 14:00:16 | 显示全部楼层
yaojing38 发表于 2023-4-7 12:04
;控件相关操作
    (foreach Key Keys
        (action_tile Key "(set (read (strcat "bh" $key)) ( ...

试了,显示参数太多
回复

使用道具 举报

发表于 2024-11-5 16:20:07 | 显示全部楼层
xj6019 发表于 2023-4-7 08:27
用你的套不习惯,用我习惯的重新套了一遍

不好意思,弱弱的问下,能否不结束程序鼠标右键重新显示对话框继续运行?

点评

可以加群聊  发表于 2024-11-5 18:48
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 01:43 , Processed in 0.194264 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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