明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 906|回复: 5

[提问] 第一次学习写对话框,有些问题需要帮助!

[复制链接]
发表于 2015-6-1 13:19:13 | 显示全部楼层 |阅读模式

初次学习写DCL对话框,学写一个符号插入工具,遇到了几个问题:
1、索引页码和索引图号第一次打开对话框赋值后,下来每次打开怎样保持先一次的值?
2、比例那里能不能只输入数字,输入其他值弹出非法对话框并继续返回当前对话框进行修改;
以下为源码:
lmfh.DCL
  1. lmfh : dialog {
  2.      label = "立面符号插入工具——by  凯 凯";
  3.        : row {   
  4.        : boxed_column {
  5.         : edit_box {
  6.               label = "索引页码:";
  7.               key = "syym_sc";
  8.               edit_width = 15;
  9.               edit_limit =15;
  10.               fixed_width = true;
  11.             }
  12.         : edit_box {
  13.               label = "索引图号:";
  14.               key = "syh_sc";
  15.               edit_width = 15;
  16.               edit_limit =15;
  17.               fixed_width = true;
  18.             }
  19.         : edit_box {
  20.               label = "当前比例:";
  21.               key = "bl_sc";
  22.               edit_width = 15;
  23.               edit_limit =15;
  24.               fixed_width = true;
  25.             }
  26.           }
  27.      : boxed_column {
  28.          :image {
  29.               key = "lmimage";
  30.               width = 15;
  31.               height = 7;
  32.               fixed_width = true;
  33.               fixed_height = true;
  34.               color = -2;
  35.              allow_accept=true;
  36.               }
  37.          }
  38.       }
  39.     : row {
  40.       alignment=centered;
  41.       fixed_width=true;
  42.       : button {
  43.                       label = "确定";
  44.                       key = "ins_ok";
  45.                       width = 8;
  46.        }
  47.        : spacer { width =2;}
  48.         cancel_button;
  49.     }
  50. }
lisp文件
  1. ;;;立面符号插入命令,作者:凯凯
  2. (defun c:s1q (/ lst ptt1 pt1 n1 n2 n8 n2 keyk keyp fh_layer)
  3. (command "undo" "be")
  4. (command  "ATTDIA" 0)
  5. (dcl_lmfh)
  6. (command "undo" "e")
  7. (princ)
  8. )

  9. (defun dcl_lmfh ()
  10. (setq dcl_id (load_dialog "lmfh"))
  11. (new_dialog "lmfh" dcl_id)
  12. (setq zs_err 1)
  13. (set_tile "bl_sc" (rtos (getvar "DIMSCALE")))
  14. (set_tile "syym_sc" "索引页码");;;设置引页码为-
  15. (set_tile "syh_sc" "索引号") ;;;设置索引号1
  16. (setq key "lmimage")
  17. (setq px (dimx_tile key))
  18. (setq py (dimy_tile key))
  19. (start_image key)
  20. (fill_image 0 0 px py -2)
  21. (slide_image 0 0 px py "lmfh")
  22. (action_tile "ins_ok" "(ok_lmfh) (done_dialog 1) ")
  23. (setq dd (start_dialog)) (UNLOAD_DIALOG dcl_id)
  24. (if (= dd 1)
  25.             (progn
  26.            (setq pt1 (getpoint "\n指定立面符号插入点:"))
  27.            (if (= pt1 nil)
  28.                (setq pt1 (getpoint "\n*错误*,请指定立面符号插入点或按ESC键结束命令:"))
  29.             )
  30.           (if (not (tblsearch "block" "立面图号")) ;;判断是否存在"立面图号"图块,无则创建。
  31.                (command "INSERT" "klimianp" "0.0" 1 1 0)
  32.            )
  33.           (command "layer" "s" fh_layer "")
  34.         (if (= err 1)
  35.               (princ "立面图号未插入")
  36.           (command "INSERT" "立面图号" pt1 n1 n1 "" keyk keyp))
  37.          )
  38.      )
  39. )



  40. (defun ok_lmfh ()
  41. (setq n1 (get_tile "bl_sc"));;;当前标注比例
  42. (if (= n1 "")
  43.   (setq n1 n2)
  44.   (setq n1 n1)
  45. )
  46. (setq keyk (get_tile "syym_sc")) ;;;;;请输入索引页码,如D-01,D-02,D-03.
  47. (if (= keyk "")
  48.    (setq keyk "索引页码")
  49. )
  50. (setq keyp (get_tile "syh_sc")) ;;;;; 请输入索引号,如1,2,3... A,B,C...<1>:
  51. (if (= keyp "")
  52.    (setq keyp "索引号")
  53. )
  54. )
发表于 2015-6-1 17:34:41 来自手机 | 显示全部楼层
使用一个全局参数记忆你的选择
也可以采用外部文件或setcfg等方式
dcl中文本控件功能比较弱
必须另加判断以及格式转换的代码
 楼主| 发表于 2015-6-3 17:14:17 | 显示全部楼层
2、比例那里能不能只输入数字,输入其他值弹出非法对话框并继续返回当前对话框进行修改;继续问
发表于 2015-6-3 21:20:41 | 显示全部楼层
文本控件只接受文字
并不会自动转换成你需要的格式
所以你必须进行转换
转换前必须校验输入的字符串
是否符合你的需要

并不需要在错误输入时弹出错误对话框
这会让你的程序显得不是那么友好
可以设置一个text_part控件
数值错误时显示错误提示
同时也可以临时禁止accept
直到输入正确的数值

(action_tile "bl_sc" "(比例校验 $value)")

(defun 比例校验(v)
    ;1.是否数字字符串
    ;2.是否正整数
    ;3.是否....
   (.........)
   (if ok
      (progn
          (mode_title "accept" 0)
          (set_tile "警告" "")
          (setq n1 v)
      )
      (progn
          (mode_title "accept" 1)
          (set_tile "警告" "输入错误,必须为正整数")
          (setq n1 nil)
      )
)
发表于 2015-6-4 08:44:46 | 显示全部楼层
  1. lmfh:dialog{
  2. label="立面符号插入工具——by 凯 凯";
  3. :row{  
  4.   :boxed_column{
  5.    :edit_box{
  6.     label="索引页码:";
  7.     key="syym_sc";
  8.     edit_width=15;
  9.     edit_limit=15;
  10.     fixed_width=true;
  11.    }
  12.    :edit_box{
  13.     label="索引图号:";
  14.     key="syh_sc";
  15.     edit_width=15;
  16.     edit_limit=15;
  17.     fixed_width=true;
  18.    }
  19.    :edit_box{
  20.     label="当前比例:";
  21.     key="bl_sc";
  22.     edit_width=15;
  23.     edit_limit=15;
  24.     fixed_width=true;
  25.    }
  26.   }
  27.   :boxed_column{
  28.    :image{
  29.     key="lmimage";
  30.     width=15;
  31.     height=7;
  32.     fixed_width=true;
  33.     fixed_height=true;
  34.     color=-2;
  35.     allow_accept=true;
  36.    }
  37.   }
  38. }
  39. ok_cancel;
  40. }
  1. ;;;立面符号插入命令,作者:凯凯
  2. (defun c:s1q (/ lst ptt1 pt1 n1 n2 n8 n2 keyk keyp fh_layer)
  3. (command "undo" "be")
  4. (command  "ATTDIA" 0)
  5. (dcl_lmfh)
  6. (command "undo" "e")
  7. (princ)
  8. )
  9. (defun dcl_lmfh ()
  10. (if (> (setq dcl_id (load_dialog "lmfh")) 0) (progn
  11.   (if (new_dialog "lmfh" dcl_id) (progn
  12.    (setq key "lmimage")
  13.    (setq px (dimx_tile key))
  14.    (setq py (dimy_tile key))
  15.    (start_image key)
  16.    (fill_image 0 0 px py -2)
  17.    (slide_image 0 0 px py "lmfh")
  18.    (end_image)
  19.    (setq zs_err 1)
  20.    (set_tile "bl_sc" (rtos (getvar "DIMSCALE")))
  21.    (if (and (= (type keyk) 'STR) (> (strlen keyk) 0))
  22.     (set_tile "syym_sc" keyk)
  23.     (set_tile "syym_sc" "索引页码") ;;;设置索引页码1
  24.    )
  25.    (if (and (= (type keyp) 'STR) (> (strlen keyp) 0))
  26.     (set_tile "syh_sc" keyp)
  27.     (set_tile "syh_sc" "索引号") ;;;设置索引号1
  28.    )
  29.    (action_tile "bl_sc" "(testbl)")
  30.    (action_tile "cancel" "(done_dialog 0)")
  31.    (action_tile "accept" "(ok_lmfh) (done_dialog 1)")
  32.    (setq dd (start_dialog))
  33.   )
  34.    (princ "\n无法显示对话框!")
  35.   )
  36.   (unload_dialog dcl_id)
  37. )
  38.   (princ "\n无法加载对话框!")
  39. )
  40. (if (= dd 1) (progn
  41.   (while (= (setq pt1 (getpoint "\n指定立面符号插入点:")) nil)
  42.    (princ "\n*错误*,请指定立面符号插入点或按ESC键结束命令:")
  43.   )
  44.   (if (not (tblsearch "block" "立面图号")) ;;判断是否存在"立面图号"图块,无则创建。
  45.    (command "INSERT" "klimianp" "0.0" 1 1 0)
  46.   )
  47.   (command "layer" "s" fh_layer "")
  48.   (if (= err 1)
  49.    (princ "立面图号未插入")
  50.    (command "INSERT" "立面图号" pt1 n1 n1 "" keyk keyp)
  51.   )
  52. ))
  53. )
  54. (defun testbl ()
  55. (setq n1 (get_tile "bl_sc"))
  56. (if (= (rtos n1 2) 0) (set_tile "bl_sc" (rtos (getvar "DIMSCALE") 2)))
  57. )
  58. (defun ok_lmfh ()
  59. (setq n1 (get_tile "bl_sc"));;;当前标注比例
  60. (if (= n1 "") (setq n1 n2))
  61. (setq keyk (get_tile "syym_sc")) ;;;;;请输入索引页码,如D-01,D-02,D-03.
  62. (if (= keyk "") (setq keyk "索引页码"))
  63. (setq keyp (get_tile "syh_sc")) ;;;;; 请输入索引号,如1,2,3... A,B,C...<1>:
  64. (if (= keyp "") (setq keyp "索引号"))
  65. )
 楼主| 发表于 2015-6-4 13:05:06 | 显示全部楼层
谢谢!问题已经解决!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-21 23:35 , Processed in 0.177092 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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