| 更新的版本 VLDCL的设计思路:
 =================
 每个DCL 控件都有定义特定的性质,所有这些特性的具体数据保存在一个全局变量中,VLDCL 的程序
 会扫描整个变量数据表,根据不同控件的不同的特性来处理数据,用户对对话框的操作所造成的变量改变
 也在全局变量数据表中保存。对话框关闭后用户可以从数据表中抽取所需数据进行下一步的运算。
 通过这样的方法,用户不再需要为每个控件设定初始化的函数和关联的操作函数,整个程序的编制可
 以在很大程度上得到简化。用户对程序的维护被转成对数据表的维护,在管理和理解上将会更有力。
 控件特性的数据表采用类似AutoCAD DXF 代码表的形式,所有控件统一拥有的特性为代码0 和-1。
 0:代表控件的类型,必须是系统内定的类型之一。如"edit_box" "list" "button"等。
 -1:代表控件所属的对话框名称,如果没有对话的嵌套,此特性可以不设定。
 总体上来说,一个控件最多可以再有三个特性,分别记录为1,2,3。同一代码,不同控件有不同的具
 体意义。
 
 
 全局变量:
 *DCLID*          : 当前load_dialog ID
 *DCL-DATA*       : 控件特性数据表
 *DCL-DONEDIALOG* : done_dialog ID及相应函数对应表
 *DIALOG*         : 嵌套对话框层次表
 *DCL-OKCANCEL*   : 嵌套对话框用,点取不同对话框的OK/CANCEL执行函数对应表
 
 
 总体数据表*DCL-DATA*格式为
 '((key1 (-1 . Data-1)(0 . Data0)(1 . Data1)(2 . Data2)(3 . Data3)(4 . Data4))
 (key2 (-1 . Data-1)(0 . Data0)(1 . Data1)(2 . Data2)(3 . Data3)(4 . Data4))
 ......
 )
 
 其他预定义的设定:
 ==================
 在数据的传递上,采用了保存在"ACAD??.CFG"中[AppData]段的方法,保存的数据有两个:
 对话框文件(DCL):"AppData/VLAE/DCL-File"
 当  前 对 话 框:"AppData/VLAE/DCl-Dialog"
 
 
 =============================================================================================
 DCL 控件名:edit_box
 VLDCL DXF0:edit_box
 VLDCL DXF1:缺省/当前值
 VLDCL DXF2:数据类型,实数":REALn";整数":INTn";字符串无。实数和整数中的"n" 的的定义如下:
 n=1:小于零
 n=2:等于零
 n=4:大于零
 n支持逻辑加。
 =============================================================================================
 
 =============================================================================================
 DCL 控件名:toggle
 VLDCL DXF0:toggle
 VLDCL DXF1:缺省/ 当前值;只能为0 或1 。否则自动定义为0 。
 VLDCL DXF3:DXF1为0 时需要变灰的控件的列表。
 =============================================================================================
 
 =============================================================================================
 DCL 控件名:radio_button / radio_row / radio_column / boxed_radio_row / boxed_radio_column
 VLDCL DXF0:radio
 VLDCL DXF1:缺省/ 当前值;必须是DXF2列表中的一个,否则自动取DXF2列表中第一个。
 VLDCL DXF2:同组所有radio_button的Key值列表。
 VLDCL DXF3:选定特定Key时需要变灰的控件的列表。格式为一个表的列表。
 子表格式中第一个为选定的radio_button的Key值,后面为选定后需要变灰的控件的列表。
 =============================================================================================
 
 =============================================================================================
 DCL 控件名:button
 VLDCL DXF0:button
 VLDCL DXF1:Done_dialog ID值,如果对话框不关闭(嵌套对话框),为任意负整数
 暂时关闭对话框(用户交互),为正整数。
 整个程序中的Done_dialog ID正整数不可有重复!
 VLDCL DXF2:Done_Dialog后继函数,不支持变量的传递,建议定义成为一个没有参数的子函数,再在子函
 数定义中执行所有的需要参数传递。
 =============================================================================================
 
 =============================================================================================
 DCL 控件名:image / image_button
 VLDCL DXF0:image
 VLDCL DXF1:Done_dialog ID值,如果对话框不关闭(嵌套对话框),为任意负整数
 暂时关闭对话框(用户交互),为正整数。
 整个程序中的Done_dialog ID正整数不可有重复!
 VLDCL DXF2:Done_Dialog后继函数,不支持变量的传递,建议定义成为一个没有参数的子函数,再在子函
 数定义中执行所有的需要参数传递。
 =============================================================================================
 
 =============================================================================================
 DCL 控件名:list / popup_list
 VLDCL DXF0:list
 VLDCL DXF1:缺省/ 当前值;必须是小于DXF2列表长度的整数,否则自动取0。
 VLDCL DXF2:需要在列表控件中显示的所有值的列表
 VLDCL DXF3:选定特定列表内容时需要变灰的控件的列表。格式为一个表的列表。
 子表格式中第一个为选定的列表内容值,后面为选定后需要变灰的控件的列表。
 =============================================================================================
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-init
 ;;;  函数说明:装载对话框,准备初始化
 ;;;  参 数 1 :[字符串] DCL文件名
 ;;;  参 数 2 :[字符串] DCL文件中定义的需要打开的对话框名称
 ;;;  返 回 值:[正整数] load_dialog ID值,全局变量*DCLID*
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-get-value
 ;;;  函数说明:从*DCL-DATA*中读取指定key的指定DXF代码值
 ;;;  参 数 1 :[字符串] 控件key值
 ;;;  参 数 2 :[整  数] DXF代码值
 ;;;  返 回 值:[ ANY  ] 保存在*DCL-DATA*中的的特定值
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-put-value
 ;;;  函数说明:向*DCL-DATA*中保存指定key的指定DXF代码值
 ;;;  参 数 1 :[字符串] 控件key值
 ;;;  参 数 2 :[整  数] DXF代码值
 ;;;  参 数 3 :[ ANY  ] 相应DXF代码值的保存值
 ;;;  返 回 值:[ ANY  ] 更新后的*DCL-DATA*
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-action
 ;;;  函数说明:执行指定控件的缺省操控函数
 ;;;  参 数 1 :[字符串] 控件key值
 ;;;  返 回 值:[ ANY  ] 无
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-editbox-real
 ;;;  函数说明:在edit_box中执行实数输入的操控函数
 ;;;  参 数 1 :[字符串] 控件key值
 ;;;  参 数 2 :[字符串] 当前控件内保存的数据值
 ;;;  参 数 3 :[字符串] 控件实数类型标志
 ;;;  返 回 值:[ ANY  ] 如果[参数2]合法有效,更新*DCL-DATA*,否则显示*DCL-DATA*中保存的数据
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-editbox-int
 ;;;  函数说明:在edit_box中执行整数输入的操控函数
 ;;;  参 数 1 :[字符串] 控件key值
 ;;;  参 数 2 :[字符串] 当前控件内保存的数据值
 ;;;  参 数 3 :[字符串] 控件整数类型标志
 ;;;  返 回 值:[ ANY  ] 如果[参数2]合法有效,更新*DCL-DATA*,否则显示*DCL-DATA*中保存的数据
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-editbox-string
 ;;;  函数说明:在edit_box中执行字符串输入的操控函数
 ;;;  参 数 1 :[字符串] 控件key值
 ;;;  参 数 2 :[字符串] 当前控件内保存的数据值
 ;;;  返 回 值:[ ANY  ] 更新*DCL-DATA*
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-toggle
 ;;;  函数说明:toggle的标准操控函数
 ;;;  参 数 1 :[字符串] 控件key值
 ;;;  参 数 2 :[字符串] 控件当前值
 ;;;  返 回 值:[ ANY  ] 更新*DCL-DATA*,如果有变灰控件的定义,执行相应控件的变灰。
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-radio
 ;;;  函数说明:radio_button控件的标准操控函数
 ;;;  参 数 1 :[字符串] 上级<boxed_>radio_column/row控件key值
 ;;;  参 数 2 :[字符串] 控件key值
 ;;;  返 回 值:[ ANY  ] 更新*DCL-DATA*,如果有变灰控件的定义,执行相应控件的变灰。
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-radioaction
 ;;;  函数说明:检查并运行radio_button父级控件的标准操控函数
 ;;;  参 数 1 :[字符串] 上级<boxed_>radio_column/row控件key值
 ;;;  参 数 2 :[字符串] radio_button控件key值
 ;;;  返 回 值:[ ANY  ] 更新*DCL-DATA*,如果有变灰控件的定义,执行相应控件的变灰。
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-graytiles
 ;;;  函数说明:执行指定控件的变灰操作
 ;;;  参 数 1 :[字符串] 控件key值
 ;;;  参 数 2 :[字符串] 控件当前值
 ;;;  返 回 值:[ ANY  ] 如果有变灰控件的定义,执行相应控件的变灰。
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-list
 ;;;  函数说明:list_box,popup_list控件的标准操控函数
 ;;;  参 数 1 :[字符串] 控件key值
 ;;;  参 数 2 :[字符串] 控件当前值
 ;;;  返 回 值:[ ANY  ] 更新*DCL-DATA*,如果有变灰控件的定义,执行相应控件的变灰。
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-slider
 ;;;  函数说明:slider控件的标准操控函数
 ;;;  参 数 1 :[字符串] 控件key值
 ;;;  参 数 2 :[字符串] 控件当前值
 ;;;  返 回 值:[ ANY  ] 更新*DCL-DATA*,如果有变灰控件的定义,执行相应控件的变灰。
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-text
 ;;;  函数说明:text,error,text_part控件的标准操控函数
 ;;;  参 数 1 :[字符串] 控件key值
 ;;;  参 数 2 :[字符串] 控件当前值
 ;;;  返 回 值:[ ANY  ] 更新*DCL-DATA*,如果有变灰控件的定义,执行相应控件的变灰。
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-settile
 ;;;  函数说明:读取*DCL-DATA*并设定相应的控件
 ;;;  返 回 值:[ ANY  ] 无
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-donedialog
 ;;;  函数说明:对话框的done_dialog操控函数
 ;;;  参 数 1 :[字符串] 对话框名称
 ;;;  参 数 2 :[字符串] 当前done_dialog值
 ;;;  返 回 值:[ ANY  ] 无
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-subdialog
 ;;;  函数说明:点取指定控件,进入嵌套对话框的操控函数
 ;;;  参 数 1 :[字符串] 控件key值
 ;;;  参 数 2 :[字符串] 嵌套的下一级对话框名称
 ;;;  返 回 值:[ ANY  ] 嵌套的下一级对话框打开并自动初始化
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-module
 ;;;  函数说明:VLDCL主模块函数
 ;;;  返 回 值:[ ANY  ] 对话框自动出现并初始化
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-image-fill-color
 ;;;  函数说明:在image,image_button中填充指定ACI颜色
 ;;;  参 数 1 :[字符串] 控件Key值
 ;;;  参 数 2 :[字符串] ACI颜色整数值
 ;;;  返 回 值:[ ANY  ] 无
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  公用函数:vldcl-image-fill-slide
 ;;;  函数说明:在image,image_button中显示指定的幻灯片
 ;;;  参 数 1 :[字符串] 控件Key值
 ;;;  参 数 2 :[字符串] 幻灯片文件名或在幻灯片库中幻灯名
 ;;;  返 回 值:[ ANY  ] 无
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;  模板程序:c:vldcl-template
 ;;;  函数说明:VLDCL主模块函数
 ;;;  返 回 值:[ ANY  ] 对话框自动出现并初始化
 ;;;            [ NIL  ]
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
  
(defun c:vldcl-template        (/
                         *DCL-OKCANCEL*
                         *DCL-DATA*
                         *DIALOG*
                         DCLFile
                         Dialog
                        )
  (setq        *DCL-OKCANCEL*
                       (list
                         (list "SubDialog1"
                               (cons 1 "(if PressOKInSubDialog(PressOKInSubDialog))")
                         )
                       )
        *DCL-DATA*     (list
                         (cons "help" (list (cons 0 "button") (cons 1 -2)))
                         (cons "Key1"
                               (list (cons -1 "SubDialog1")
                                     (cons 0 "edit_box")
                                     (cons 1 "0.0")
                                     (cons 2 ":REAL4")
                               )
                         )
                       )
        DCLFile               "Enter DCLFile name HERE!"
        Dialog               "Fill Start Dialog Name"
  )
  (setcfg "AppData/VLAE/DCL-File" DCLFile)
  (setcfg "AppData/VLAE/DCL-Dialog" Dialog)
  (vlisp-export-symbol '*DCL-DATA*)
  (vldcl-module)
)
 |