首页 理论教育AutoCAD2014中文版入门至精通

AutoCAD2014中文版入门至精通

【摘要】:在设计对话框中,对于列表框/下拉框,虽然可以设置它的初始值,但是如果需要动态修改下拉框内的值的话,那么只能够用AutoLISP进行动态生成数据。首先来看一下与列表框/下拉框相关的一些AutoLISP函数。在对话框设计当中,所有的列表框/下拉框处理,都是由这三个函数来完成的。通过调用endlist函数结束表的处理。图15-38 改变列表框中的值4.在已存在的列表中增加新的值。

在设计对话框中,对于列表框/下拉框,虽然可以设置它的初始值,但是如果需要动态修改下拉框内的值的话,那么只能够用AutoLISP进行动态生成数据。

首先来看一下与列表框/下拉框相关的一些AutoLISP函数。

1.start_list。

格式:

978-7-111-45924-8-Chapter15-169.jpg

用start_list函数开始对话框中的一个列表框或一个打开式列表控件的处理。

key变元是一个指定对话框控件的字符串。key变元是大小写敏感的。operation是一个整型值,它的含义见表15-8。

除非start_list函数调用开始的是一个改变表的内容的操作(这时operation变元的值指定为1),否则index变元就会被忽略。如果调用start_list函数是为了改变所选择的表的内容(即operation变元的值为1),所提供的index变元就指出了随后调用add_list函数要改变的表项。index变元的取值从零开始。如果您没有指定operation变元,那么隐含的operation的取值为3(生成新表);如果您指定了operation而没有指定index,那么,index取隐含值0。

表15-8 start_list函数所用的列表框代码

978-7-111-45924-8-Chapter15-170.jpg

随后所调用的add_list函数将影响由start_list函数启动的表,直到应用程序调用end_list函数。

2.add_list。

格式:

978-7-111-45924-8-Chapter15-171.jpg

add_list用户在现行激活的对话框的表中增加一个字符串,或者修改其中的一个字符串。

在使用add_list函数之前,必须用start_list函数打开和初始化一个表,根据start_list函数调用中指定的参数operation的不同,即:

978-7-111-45924-8-Chapter15-172.jpg

978-7-111-45924-8-Chapter15-173.jpg

add_list函数调用中的string变元,要么被加到现行表中,要么替换掉现行表中的一个表项。

3.end_list。

格式:

978-7-111-45924-8-Chapter15-174.jpg

end_list函数用来结束现行激活对话框的表的处理。

该函数是start_list函数的配套函数。它关闭由start_list函数所打开的表控件。在start_list函数调用之后一定要调用end_list函数。

在对话框设计当中,所有的列表框/下拉框处理,都是由这三个函数来完成的。

978-7-111-45924-8-Chapter15-175.jpg

通过使用上述三个函数的调用序列,可以在列表框和打开列表框中显示一个表。一旦一个表被生成之后,就可以修改它。对表的修改存在三种可能的操作。每一种操作都是通过start_list函数的operation变量来指定的。

(1)创建新列表。

operation变量值:3

这是为了生成一个新列表。生成新列表的操作是隐含操作。

在调用start_list函数之后,就能重复调用add_list函数。每调用一次add_list函数就往列表中增加一个新项。通过调用endlist函数结束表的处理。

例如:

978-7-111-45924-8-Chapter15-176.jpg

可以来看一个例子。先用DCL来设计一个对话框,包含有初始值,代码如下:

978-7-111-45924-8-Chapter15-177.jpg

可以看到,在上面给列表框“keylistbox”赋了初值“1\n2\n3\n4\n5\n6\n7”,我们先通过预览功能,查看所设计的对话框,如图15-36所示。

编辑LSP文件。(www.chuimin.cn)

;主程序

978-7-111-45924-8-Chapter15-178.jpg

通过主程序运行,可以发现列表框的内容已经不是“1\n2\n3\n4\n5\n6\n7”了,而变成了("a""b""c""d""e""f"),如图15-37所示。

978-7-111-45924-8-Chapter15-179.jpg

图15-36 列表框显示1

978-7-111-45924-8-Chapter15-180.jpg

图15-37 列表框显示2

(2)改变已存在的列表中的值。

operation变量值:1

这种情况是为了改变表中的一项。

使用时,除了需要指定operation变量值以外,还要指定需要改变项的index值,即其在列表中的位置。

比如上一个例子,初始化值是“1\n2\n3\n4\n5\n6\n7”,现在希望将第4个值(也就是数字4)改变一下,变成“Item Changed”。

那么可以通过operatioin的1操作来完成这项功能。

978-7-111-45924-8-Chapter15-181.jpg

;注意这里,使用了operatioin的1操作,后面接的是

;被操作项的序列号。

;需要注意的是autolisp是从0开始算的。

978-7-111-45924-8-Chapter15-182.jpg

;在这里进行修改

978-7-111-45924-8-Chapter15-183.jpg

从上面的代码可以看到,采用start_list的operatioin的1操作,并且指定了被操作数的序号,即3,从零开始算,也就是“4”这个字符。

978-7-111-45924-8-Chapter15-184.jpg

以上这条语句将字符“Item Changed!”替换掉原有的字符“4”。可以来看一下程序运行的结果,如图15-38所示。

978-7-111-45924-8-Chapter15-185.jpg

图15-38 改变列表框中的值

4.在已存在的列表中增加新的值。

operation变量值:2

如果想在列表中增添新的项,可以使用operation的2操作。

首先,调用start_list函数,指定2操作。

978-7-111-45924-8-Chapter15-186.jpg

然后,用addlist函数加入一个新项。

978-7-111-45924-8-Chapter15-187.jpg

最后调用(endlist)函数即可。

如果列表框支持多个选择,应用程序就必须对值串中的多个值分步取出,并分别进行转换。下面给出的MultiLIST函数返回的一个表,就包含了用户从源displist中所选择的那些表项。在本例中,显示表displist作为全局变量被维持。

MKLIST函数要求用列表框的$value来调用。

978-7-111-45924-8-Chapter15-188.jpg

上述所有样例都在单选情况下工作。