- UID
- 21907
- 积分
- 235
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-12-25
- 最后登录
- 1970-1-1
|
发表于 2006-5-17 13:04:22
|
显示全部楼层
也不知你说的"隐藏"具体何指.这编的这个程序你看看能不能有点帮助
;;;--------------------------------------------------------
;;;函数: c:lookat
;;;--------------------------------------------------------
;;;来源: 作者: 何俊
;;;编制时间:2006.5.16
;;;功能: 统计用记选择的多段线的总长度
;;;语法: lookat
;;;参数 无
;;;返回值: 无
;;;备注 : 本函数系为友人陈宏编制.
;;;--------------------------------------------------------
(DEFUN C:LOOKAT (/)
;;(COMMAND "_.undo" "_begin")
;;调入ActiveX支持
(VL-LOAD-COM)
;;设置 "控制是否对主单位值作消零处理",以保证形如12.500转换为字符串后为“12.500”而不是“12.5”
(SETVAR "dimzin" 0)
;;该变量用于为下面的WHILE循环提供判断条件
(SETQ %resv 2)
;;本变量用于存储DCL对话框在屏幕上显示的位置
(SETQ #showpt '(650 150))
;;;----------------------------------------------------
;;;准备调用DCL
;;;-------------------------------------
;;调入对话框
(WHILE (= %resv 2)
(SETQ dcl_id (LOAD_DIALOG "LOOKAT"))
(IF (< dcl_id 0)
(EXIT)
) ;_ 结束if
(NEW_DIALOG "LOOKPolyLen" dcl_id "" #showpt)
;;设置各控件初始值
;;向列表框添加内容,有两个条件,1,%SHOW 的值为1时,2,#LIST(用于存储多段线各段的长度)
(IF (AND (= %show 1) (/= #LIST1 nil))
(PROGN
;;开始添加
(START_LIST "list1")
(MAPCAR 'ADD_LIST #LIST1)
(END_LIST)
;;结束添加
;;设置显示条数的文本编辑框的值
(SET_TILE "text-num" (ITOA %REP))
;;设置显示总长的文本编辑框的值
(SET_TILE "text-len" (RTOS !ALL-LEN 2 4))
) ;_ 结束progn
) ;_ 结束if
;;设置动作
;;当在列表框中单击时发生
(ACTION_TILE "list1" "(LOOKAT:Hilight $value)")
;;当按下“选择”按钮时发生
(ACTION_TILE "bu_select" "(setq %show 1)(DONE_DIALOG 2)")
;;当按下“确定”时发生
(ACTION_TILE "accept" "(setq %show 0)(DONE_DIALOG 1)")
;;当按下“放弃”时发生
(ACTION_TILE "cancel" "(setq %show 0)(DONE_DIALOG 0)")
;;显示并将控制权交对话框
(SETQ %resv (START_DIALOG))
;;当返回值为2时说明用户点击了“选择”按钮,调用子函数
;;需要特别说明的是“选择”按钮是一个retirement_button,不同于一般的button
;;其作用是暂时隐藏对话框
(IF (= %resv 2)
(lookat:select)
) ;_ 结束if
) ;_ 结束while
;;结束对话框
(UNLOAD_DIALOG dcl_id)
;;(COMMAND "_.undo" "_end")
) ;_ 结束DEFUN
;;;--------------------------------------------------------
;;;函数: lookat:select
;;;--------------------------------------------------------
;;;来源: 作者: 何俊
;;;编制时间:2006.5.16
;;;功能: 取出用户选择所有多段线长度,生成总长度,列表框
;;; 内容
;;;语法: lookat:select
;;;参数 无
;;;返回值: 无
;;;备注 : 本函数供c:LOOKAT函数调用.
;;;--------------------------------------------------------
(DEFUN lookat:select () ;(/ ss1 e-name1 obj1 %REP %ID !LEN #LIST1)
(SETQ %ID 0)
(SETQ #LIST1 NIL)
(SETQ !ALL-LEN 0.0)
;;提示用户选择多段
(SETQ ss1 (SSGET '((0 . "LWPOLYLINE,LINE"))))
(IF ss1
(PROGN
(SETQ %REP (SSLENGTH SS1))
(REPEAT %REP
;;取图元名
(SETQ E-NAME1 (SSNAME SS1 %ID))
;;(redraw E-NAME1 4)
;;将图元转换为Activex对象
(SETQ OBJ1 (VLAX-ENAME->VLA-OBJECT E-Name1))
;;取总长度
(SETQ !LEN (VLA-GET-LENGTH OBJ1))
;;累积总长度
(SETQ !ALL-LEN (+ !ALL-LEN !LEN))
;;组合在列表框内显示的字符串
(SETQ
#LIST1
(APPEND
#LIST1
(LIST (STRCAT (ITOA (+ %ID 1)) " ..." (RTOS !LEN 2 3))
) ;_ 结束LIST
) ;_ 结束APPEND
) ;_ 结束SETQ
(SETQ %ID (+ %ID 1))
) ;_ 结束REPEAT
) ;_ 结束progn
;;如果用户未做选择,则赋%SHOW为0,所有的控件将不会被赋值,显示为空白
(SETQ %show 0)
) ;_ 结束if
) ;_ 结束defun
;;;--------------------------------------------------------
;;;函数: lookat:Hilight
;;;--------------------------------------------------------
;;;来源: 作者: 何俊
;;;编制时间:2006.5.16
;;;功能: 亮显/取消亮显用户在列表框内点击的项目相对应的
;;; 多段线
;;;语法: lookat:Hilight $ID
;;;参数 $ID....用户所点击列表框项目索引值
;;;返回值: 无
;;;备注 : 本函数供c:LOOKAT函数调用.
;;;--------------------------------------------------------
(DEFUN lookat:Hilight ($ID)
(IF e-name2
(REDRAW e-name2 4)
) ;_ 结束if
(SETQ e-name2 (SSNAME ss1 (ATOI $ID)))
(REDRAW e-name2 3)
(PRINC)
) ;_ 结束defun
;;;;;**************************************************************************
;;下面是DCL文件的代码
dcl_settings : default_dcl_settings { audit_level = 3; }
LOOKPolyLen : dialog {
label = "查看多段线长度";
: boxed_column {
label = "多段线长度列表";
: list_box {
key = "list1";
//list = "1234,erqer";
width = 20;
height = 20;
}
: column {
: row {
: edit_box {
label = "共选中多段线 ";
key = "text-num";
edit_width = 6;
}
: text {
label = "条";
}
}
: edit_box {
label = "总长度";
key = "text-len";
edit_width = 20;
}
}
}
:row {
:retirement_button
{label = "选择..";key = "bu_select";}
ok_cancel;
}
} |
|