飞诗请进,求关于list_box单击打开收拢的效果代码~
本帖最后由 77077 于 2014-6-27 11:04 编辑自己动手解决了,虽然代码很长很乱~~~
从文本文件中读取的数据格式如下;("性质代码" "用地性质" "容积率" "建筑密度" "绿地率" "建筑限高" "机动车位比" "自行车位比" "内容说明")
("H" "建设用地" "" "" "" "" "" "" "包括城乡居民点建设用地、区域交通设施用地、区域公用设施用地、特殊用地、采矿用地及其他建设用地等用地界线")
("H1" "城乡居民点建设用地" "" "" "" "" "" "" "城市、镇、乡、村庄建设用地界线")
("H11" "城市建设" "" "" "" "" "" "" "城市内的居住用地、公共管理与公共服务设施用地、商业服务业设施用地、工业用地、物流仓储用地、道路与交通设施用地、公用设施用地、绿地与广场用地界线")
("R" "居住用地" "1.1" "32" "35" "12" "1.0" "1.0" "住宅和相应服务设施的用地界线")
("R1" "一类居住用地" "" "" "" "" "" "" "设施齐全、环境良好,以低层住宅为主的用地界线,包括别墅区、独立式花园住宅、四合院等")
("R11" "住宅" "1.1" "32" "40" "12" "1.5" "1.0" "住宅建筑用地及其附属道路、停车场、小游园等用地界线")
("R12" "服务设施" "" "" "" "" "" "" "居住小区及小区级以下的文化、体育、商业、卫生服务、养老助残、公用设施等用地界线,不包括中小学用地和幼托用地")
("R2" "二类居住用地" "" "" "" "" "" "" "设施较齐全、环境良好,以多、中、高层住宅为主的用地界线")
("R21" "住宅" "" "" "" "" "" "" "住宅建筑用地(含保障性住宅用地)及其附属道路、停车场、小游园等用地界线")
("R22" "服务设施" "" "" "" "" "" "" "居住小区及小区级以下的文化、体育、商业、卫生服务、养老助残、公用设施等用地界线,不包括中小学用地和幼托用地")
("R3" "三类居住用地" "" "" "" "" "" "" "设施较欠缺、环境较差,以需要加以改造的简陋住宅为主的用地,包括危房、棚户区、临时住宅等用地")
("R31" "住宅" "" "" "" "" "" "" "住宅建筑用地及其附属道路、停车场、小游园等用地界线")
("R32" "服务设施" "" "" "" "" "" "" "居住小区及小区级以下的文化、体育、商业、卫生服务、养老助残、公用设施等用地界线,不包括中小学用地")
("R5" "城中村居住用地" "" "" "" "" "" "" "城中村居住用地")
("RC" "混合用地" "" "" "" "" "" "" "居住与公共设施混合用地") 收起来的效果
打开的效果
也请教这个问题 列表里有一项是标志代表状态(展开或收拢),读取状态,插入或删除子表。 本帖最后由 77077 于 2014-6-23 22:34 编辑
;填充表项到list_box
(defun fill_list_box (key lst)
(start_list key) (mapcar 'add_list lst) (end_list)
)
;分别取出表中第N项,组成新表
(defun lst_n_lst (n lst)
(mapcar '(lambda(x) (nth n x)) lst)
)慢慢研究中……
原理如四楼所说的。其实就是表操作,最终含有子项的表再填充到列表框里。
本帖最后由 77077 于 2014-6-25 16:34 编辑
后来自己想了一下,可能这种方式更好判断:
(= (strlen (car x)) 1)就是大类
(= (strlen (car x)) 2)就是中类
(= (strlen (car x)) 3)就是小类(setq lst '(
("A" "分类一")
("A1" "中类一")
("A11" "子类一")
("A12" "子类一")
("A2" "分类一")
("A21" "分类一")
("A22" "分类一")
("A23" "分类一")
("A3" "分类一")
("A31" "分类一")
("A32" "分类一")
("A33" "分类一")
("A4" "分类一")
("A41" "分类一")
("A42" "分类一")
("A43" "分类一")
("A44" "分类一")
("B" "分类二")
("B1" "分类二")
("B11" "分类二")
("B12" "分类二")
("B2" "分类二")
("B21" "分类二")
("B22" "分类二")
("B23" "分类二")
("B3" "分类二")
("B31" "分类二")
("B32" "分类二")
("B33" "分类二")
("B4" "分类二")
("B41" "分类二")
("B42" "分类二")
("B43" "分类二")
("B44" "分类二")
("C" "分类三")
("C1" "分类三")
("C11" "分类三")
("C12" "分类三")
("C2" "分类三")
("C21" "分类三")
("C22" "分类三")
("C23" "分类三")
("C3" "分类三")
("C31" "分类三")
("C32" "分类三")
("C33" "分类三")
("C4" "分类三")
("C41" "分类三")
("C42" "分类三")
("C43" "分类三")
("C44" "分类三")
("D" "分类四")
("D1" "分类四")
("D11" "分类四")
("D12" "分类四")
("D2" "分类四")
("D21" "分类四")
("D22" "分类四")
("D23" "分类四")
("D3" "分类四")
("D31" "分类四")
("D32" "分类四")
("D33" "分类四")
("D4" "分类四")
("D41" "分类四")
("D42" "分类四")
("D43" "分类四")
("D44" "分类四")
)
);setq(setq boxlst (vl-remove-if '(lambda (x) (/= (strlen (car x)) 1)) lst);取出大类组成boxlst
boxlst (mapcar '(lambda(x) (strcat "+" (car x) (cadr x))) boxlst);组成新表boxlst
) (setq lstn (vl-remove-if '(lambda (x) (/= (strlen (car x)) 2)) lst);取出所有中类组成lstn,即字符长度为2的项目
lstn (vl-remove-if '(lambda (x) (/= (substr (car x) 1 1) (substr a1 1 1))) lstn);取出对应的中类,即首字为A的项目
lstn (mapcar '(lambda(x) (strcat "++" (car x) (cadr x))) lstn);组成准备填入列表框的表lstn
) 本帖最后由 77077 于 2014-6-23 23:39 编辑
这个是本论坛找到的函数,硬是没理解。Insnth函数里面套用Insnth?;插入元素va到L表的第n位
;示例: (Insnth 0 2 '(1 2 3 4 5 6))返回 (1 2 0 3 4 5 6)
(defun Insnth (va n L)
(if (= n 0)
(cons va L)
(cons (car L) (insnth va (1- n) (cdr L)))
)
) 留个脚印,一 为什么不能改列表项了呢?"+"变成"-"之后,再点击不会变"+"了~~~(defun c:TT()
(setq dcl_id (load_dialog (make-dcl))) (new_dialog "YD" dcl_id)
(setq llist '("+line1" "+line2" "+line3"))
(fill_list_box "key1" llist);填充表项
(action_tile "key1" "(key1)")
(start_dialog)(unload_dialog dcl_id)
(princ)
)
(defun fill_list_box (key lst)
(start_list key)
(mapcar 'add_list lst)
(end_list)
)
(defun key1 ()
(setq n (atoi(get_tile "key1"))
str (nth n llist)
)
(if (= (substr str 1 1) "+")
(progn
(start_list "key1" 1 n)
(add_list (strcat "-" (substr str 2)))
(end_list)
)
(progn
(start_list "key1" 1 n)
(add_list (strcat "+" (substr str 2)))
(end_list)
)
)
)