找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1843|回复: 5

[求助] DCL对话框内容为空时,怎么写?

[复制链接]

已领礼包: 2个

财富等级: 恭喜发财

发表于 2015-5-28 10:00:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
初次学习写DCL对话框,学写一个符号插入工具,遇到了几个问题:
1、符号比例那里我想要打开对话框就有初始值,我设置为当前标注比例,但只能比例是1时可以,当前比例为**时,就死了
2、对话框中每个内容都设置了默认值,如果未设置值时,lsp立面怎么写,我使用了赋值为“0”没用,赋值为nil也没用
3、比例那里能不能**只输入数字,输入**值弹出非法对话框并继续返回当前对话框进行修改;
以下为源码:
lmfh.DCL
  1. lmfh : dialog {
  2.      label = "立面符号插入工具——by  凯 凯";
  3.      : boxed_column {
  4.        : row {
  5.         : edit_box {
  6.               label = "索引页码: ";
  7.               key = "syym_sc";
  8.               edit_width = 12;
  9.               edit_limit =12;
  10.               fixed_width = true;
  11.             }
  12.           }
  13.        : row {
  14.         : edit_box {
  15.               label = "索引号: ";
  16.               key = "syh_sc";
  17.               edit_width = 12;
  18.               edit_limit =12;
  19.               fixed_width = true;
  20.             }
  21.           }
  22.        : row {
  23.         : edit_box {
  24.               label = "符号比 例:";
  25.               key = "bl_sc";
  26.               edit_width = 12;
  27.               edit_limit =12;
  28.               fixed_width = true;
  29.             }
  30.           }
  31. }
  32.     : row {
  33.       alignment=centered;
  34.       fixed_width=true;
  35.       : button {
  36.                       label = "确定";
  37.                       key = "ins_ok";
  38.                       width = 8;
  39.        }
  40.        : spacer { width =2;}
  41.         cancel_button;
  42.     }
  43. }
lisp文件

  1. (defun YL_begin ()
  2. (vl-load-com)
  3. (setq oderr *error*) ;;保存原来的*error*
  4. (setq *error* YL_err) ;;将*error*用自己的错误处理函数替代
  5. (setq odosm (getvar "osmode")) ;;记录当前捕捉方式
  6. (setq odlay (getvar "clayer")) ;;记录当前层
  7. (setq odbpm (getvar "blipmode")) ;;记录当前控制点标记是否可见
  8. (setq odzin (getvar "dimzin")) ;;记录主单位值消零处理方式
  9. (setq odcmd (getvar "cmdecho")) ;;记录命令行回显方式
  10. (setq n2 (getvar "DIMSCALE"))
  11. (setvar "cmdecho" 0) ;;设置命令行不回显
  12. (setvar "blipmode" 0) ;;不显示控制点标记
  13. (setvar "OSMODE" 0);;关闭对象捕捉方式
  14. (setvar "dimzin" 8) ;;对主单位值后续零作消零处理,因为DIMZIN 对 AutoLISP rtos 和 angtos 函数执行实数向字符串转换操作有影响。
  15. (setvar "ORTHOMODE" 1)
  16. (setvar "INSUNITS" 4)
  17. (setvar "INSUNITSDEFTARGET" 4)
  18. )

  19. ;;*****************************************************************************
  20. (defun YL_end ()
  21. (setvar "osmode" odosm)
  22. (setvar "blipmode" odbpm)
  23. (setvar "dimzin" odzin) ;;恢复主单位值消零处理方式
  24. (command "layer" "s" odlay "")
  25. (setvar "cmdecho" odcmd)
  26. (setq *error* oderr) ;;恢复原来的*error*
  27. (princ)
  28. )

  29. ;;*****************************************************************************
  30. ;;YL_err
  31. ;;功 能:错误处理函数。
  32. (defun YL_err (msg)
  33. (princ (strcat "\n错误:" msg "\n")) ;;打印错误原因
  34. (YL_end) ;;调用函数YL_end恢复程序开始前的设置
  35. (setq *error* oderr) ;;恢复原来的*error*
  36. (princ)
  37. )

  38. (defun Set_layer ()
  39. (vl-load-com)
  40. (setq fh_layer "-符号标注")
  41. (if (=(tblobjname "LAYER" fh_layer) nil)
  42. (progn
  43. (entmake (list
  44. '(0 . "LAYER")
  45. '(100 . "AcDbSymbolTableRecord")
  46. '(100 . "AcDbLayerTableRecord")
  47. '(6 . "CONTINUOUS") ;线型
  48. '(62 . 3) ;颜色
  49. '(70 . 0) ;图层状态
  50. (cons 2 fh_layer) ;图层名
  51. )
  52. )
  53. )
  54. );建图层
  55. )

  56. ;;;立面符号插入命令,作者:凯凯
  57. (defun c:test (/ lst ptt1 pt1 n1 n2 n8 n2 keyk keyp fh_layer)
  58. (command  "ATTDIA" 0)
  59. (YL_begin)
  60. (dcl_lmfh)
  61. (YL_end) ;
  62. (princ)
  63. )

  64. (defun dcl_lmfh ()
  65. (setq dcl_id (load_dialog "lmfh"))
  66. (new_dialog "lmfh" dcl_id)

  67. (if (= (get_tile "bl_sc") nil);;;;;;;这里意思是内容为空时,使用了nil没用
  68.     (set_tile "bl_sc" (rtos n2));;;;;;;;;;这里设置初始值为当前标注值,但貌似当前标注比例为1时可以,但为别的时就错误死了
  69.   )
  70. (set_tile "syym_sc" "-");;;设置引页码为-
  71. (set_tile "syh_sc" "1") ;;;设置索引号1
  72. (action_tile "ins_ok" "(ok_lmfh) (done_dialog 1) ")
  73. (setq dd (start_dialog)) (UNLOAD_DIALOG dcl_id)
  74. (if (= dd 1)
  75.             (progn
  76.            (setq pt1 (getpoint "\n指定立面符号插入点:"))
  77.            (if (= pt1 nil)
  78.                (setq pt1 (getpoint "\n*错误*,请指定立面符号插入点或按ESC键结束命令:"))
  79.             )
  80.           (if (not (tblsearch "block" "立面图号")) ;;判断是否存在"立面图号"图块,无则创建。
  81.                (command "INSERT" "klimianp" "0.0" 1 1 0)
  82.            )
  83.           (Set_layer)
  84.           (command "layer" "s" fh_layer "")
  85.           (command "INSERT" "立面图号" pt1 n1 n1 "" keyk keyp)
  86.          )
  87.      )
  88. )

  89. (defun ok_lmfh ()
  90. (setq n1 (get_tile "bl_sc"));;;当前标注比例
  91. (if (= n1 "0") ;;;;;;;;这里意思是内容为空时,使用了0没用
  92.    (setq n1 n2)
  93. )
  94. (setq keyk (get_tile "syym_sc")) ;;;;;请输入索引页码,如D-01,D-02,D-03.
  95. (if (= keyk "0") ;;;;;;;;这里意思是内容为空时,使用了0没用
  96.    (setq keyk "-")
  97. )
  98. (setq keyp (get_tile "syh_sc")) ;;;;; 请输入索引号,如1,2,3... A,B,C...<1>:
  99. (if (= keyp nil) ;;;;;;;;;;;;这里意思是内容为空时,使用了nil没用
  100.    (setq keyp 1)
  101. )
  102. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 859个

财富等级: 财运亨通

发表于 2015-5-28 12:58:14 来自手机 | 显示全部楼层
"" 空字符        
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 10398个

财富等级: 富甲天下

发表于 2015-5-28 13:30:51 | 显示全部楼层

  1. (defun YL_begin ()
  2. (vl-load-com)
  3. (setq oderr *error*) ;;保存原来的*error*
  4. (setq *error* YL_err) ;;将*error*用自己的错误处理函数替代
  5. (setq odosm (getvar "osmode")) ;;记录当前捕捉方式
  6. (setq odlay (getvar "clayer")) ;;记录当前层
  7. (setq odbpm (getvar "blipmode")) ;;记录当前控制点标记是否可见
  8. (setq odzin (getvar "dimzin")) ;;记录主单位值消零处理方式
  9. (setq odcmd (getvar "cmdecho")) ;;记录命令行回显方式
  10. (setq n2 (getvar "DIMSCALE"))
  11. (setvar "cmdecho" 0) ;;设置命令行不回显
  12. (setvar "blipmode" 0) ;;不显示控制点标记
  13. (setvar "OSMODE" 0);;关闭对象捕捉方式
  14. (setvar "dimzin" 8) ;;对主单位值后续零作消零处理,因为DIMZIN 对 AutoLISP rtos 和 angtos 函数执行实数向字符串转换操作有影响。
  15. (setvar "ORTHOMODE" 1)
  16. (setvar "INSUNITS" 4)
  17. (setvar "INSUNITSDEFTARGET" 4)
  18. )
  19. ;;*****************************************************************************
  20. (defun YL_end ()
  21. (setvar "osmode" odosm)
  22. (setvar "blipmode" odbpm)
  23. (setvar "dimzin" odzin) ;;恢复主单位值消零处理方式
  24. (command "layer" "s" odlay "")
  25. (setvar "cmdecho" odcmd)
  26. (setq *error* oderr) ;;恢复原来的*error*
  27. (princ)
  28. )
  29. ;;*****************************************************************************
  30. ;;YL_err
  31. ;;功 能:错误处理函数。
  32. (defun YL_err (msg)
  33. (princ (strcat "\n错误:" msg "\n")) ;;打印错误原因
  34. (YL_end) ;;调用函数YL_end恢复程序开始前的设置
  35. (setq *error* oderr) ;;恢复原来的*error*
  36. (princ)
  37. )
  38. (defun Set_layer ()
  39. (vl-load-com)
  40. (setq fh_layer "-符号标注")
  41. (if (=(tblobjname "LAYER" fh_layer) nil)
  42. (progn
  43. (entmake (list
  44. '(0 . "LAYER")
  45. '(100 . "AcDbSymbolTableRecord")
  46. '(100 . "AcDbLayerTableRecord")
  47. '(6 . "CONTINUOUS") ;线型
  48. '(62 . 3) ;颜色
  49. '(70 . 0) ;图层状态
  50. (cons 2 fh_layer) ;图层名
  51. )
  52. )
  53. )
  54. );建图层
  55. )
  56. ;;;立面符号插入命令,作者:凯凯
  57. (defun c:test (/ lst ptt1 pt1 n1 n2 n8 n2 keyk keyp fh_layer)
  58. (command  "ATTDIA" 0)
  59. (YL_begin)
  60. (dcl_lmfh)
  61. (YL_end) ;
  62. (princ)
  63. )
  64. (defun dcl_lmfh ()
  65. (setq dcl_id (load_dialog "lmfh"))
  66. (new_dialog "lmfh" dcl_id)
  67. (if (= (get_tile "bl_sc") "");;;;;;;这里意思是内容为空时,使用了nil没用
  68.   (set_tile "bl_sc" (rtos n2 2));;;;;;;;;;这里设置初始值为当前标注值,但貌似当前标注比例为1时可以,但为别的时就错误死了
  69. )
  70. (set_tile "syym_sc" "-");;;设置引页码为-
  71. (set_tile "syh_sc" "1") ;;;设置索引号1
  72. (action_tile "ins_ok" "(ok_lmfh) (done_dialog 1) ")
  73. (setq dd (start_dialog))
  74. (unload_dialog dcl_id)
  75. (if (= dd 1) (progn
  76.   (setq pt1 (getpoint "\n指定立面符号插入点:"))
  77.   (if (= pt1 nil)
  78.    (setq pt1 (getpoint "\n*错误*,请指定立面符号插入点或按ESC键结束命令:"))
  79.   )
  80.   (if (not (tblsearch "block" "立面图号")) ;;判断是否存在"立面图号"图块,无则创建。
  81.    (command "INSERT" "klimianp" "0.0" 1 1 0)
  82.   )
  83.   (Set_layer)
  84.   (command "layer" "s" fh_layer "")
  85.   (command "INSERT" "立面图号" pt1 n1 n1 "" keyk keyp)
  86. ))
  87. )
  88. (defun ok_lmfh ()
  89. (setq n1 (get_tile "bl_sc"));;;当前标注比例
  90. (if (= n1 "") ;;;;;;;;这里意思是内容为空时,使用了0没用
  91.    (setq n1 n2)
  92. )
  93. (setq keyk (get_tile "syym_sc")) ;;;;;请输入索引页码,如D-01,D-02,D-03.
  94. (if (= keyk "") ;;;;;;;;这里意思是内容为空时,使用了0没用
  95.   (setq keyk "-")
  96. )
  97. (setq keyp (get_tile "syh_sc")) ;;;;; 请输入索引号,如1,2,3... A,B,C...<1>:
  98. (if (= keyp "") ;;;;;;;;;;;;这里意思是内容为空时,使用了nil没用
  99.   (setq keyp 1)
  100. )
  101. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2015-5-28 14:54:21 | 显示全部楼层
比例那里能不能只输入数字,输入非数值时弹出非法对话框并继续返回当前对话框进行修改
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2015-5-28 20:51:11 | 显示全部楼层
yfywk 发表于 2015-5-28 14:54
比例那里能不能只输入数字,输入非数值时弹出非法对话框并继续返回当前对话框进行修改

http://bbs.xdcad.net/thread-676321-1-5.html
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2015-6-1 13:10:04 | 显示全部楼层
还是不太懂,需要另外写一个错误的对话框吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 11:47 , Processed in 0.172342 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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