明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2228|回复: 1

通过设定变量表,就可以实现对话框编程了。

[复制链接]
发表于 2004-2-11 11:21:00 | 显示全部楼层 |阅读模式
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 :[字符串] 上级radio_column/row控件key值
;;; 参 数 2 :[字符串] 控件key值
;;; 返 回 值:[ ANY ] 更新*DCL-DATA*,如果有变灰控件的定义,执行相应控件的变灰。
;;; [ NIL ]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 公用函数:vldcl-radioaction
;;; 函数说明:检查并运行radio_button父级控件的标准操控函数
;;; 参 数 1 :[字符串] 上级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 ]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2004-2-11 11:29:00 | 显示全部楼层
不错!


比较适合一个公司内部编程规范化,不过要想全民规范化还比较困难
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-27 14:39 , Processed in 0.193271 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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