Cadence Skill 论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 22476|回复: 13

[原创] FORM中列表框(LIST)的使用详解

[复制链接]
发表于 2014-11-21 22:28:40 | 显示全部楼层 |阅读模式
LIST列表框可使用户方便的选择某项或同时选择多项。LIST中包含了多个选项清单。
其显示效果如下:
LIST.png

在FORM中,LIST定义下FIELD字段部分,通过关键词LIST定义,方法如下:
LIST基本结构如下:

  1. FIELD label
  2. FLOC x y
  3. LIST "" w h
  4. list_options
  5. ENDFIELD
复制代码

例如:

  1. FIELD listTest             ;定义FIELD字段
  2. FLOC 1 3                    ;定义FIELD坐标位置
  3. LIST "" 18 6              ;定义LIST列表框
  4. ENDFIELD                 ;结束FIELD
复制代码

说明:
LIST基本结构为LIST "" w h , 其中LIST后面的双引号必须保留,请双引号中间无任何字符,w表示的是LIST的宽度,h表示的是LIST的高度,当LIST中选项过多或过长时,LIST会自动显示水平或垂直滚动条,不需要手动设置。
list可选项list_options可设置LIST中个项如何排序,当设置为OPTIONS sort时,会自动以数字、字母增序排列,比如最开始的图片,当设置为SORT时显示效果看下图,注意其中的区别:
LIST01.png


list_options还可设置为ALPHANUMSORT、PRETTYPRINT。其中的区别此处就不多说了,可以自己去测试下。

LIST默认是只能选择单项的,如果需要选择多项,可在上面说的OPTIONS后面加关键词 multiselect实现多选。例如OPTIONS PRETTYPRINT multiselect

下面介绍下skill中常用的LIST操作AXL函数:
axlFormListOptions 用于设置是否双击进行选择,LIST默认的是单击选择。
axlFormListDeleteAll 用于删除LIST中所有的LIST项
axlFormListSelect 用于选择LIST中某一个LIST项
axlFormListGetItem 用于获取指定索引的LIST项,比如获取排在第三个的LIST项。
axlFormListAddItem 用于向LIST中添加指定的项
axlFormListDeleteItem 用于向LIST中删除指定的项
axlFormListGetSelCount 用于获取LIST中选择个数,仅在LIST设置为多选的情况下有效。
axlFormListGetSelItems 用于获取LIST中选择的项,仅在LIST设置为多选的情况下有效。
axlFormListSelAll 选中LIST中所有的项,仅在LIST设置为多选的情况下有效。


更多关于LIST的操作,可回复本贴进行讨论。。。

本列的详细代码如下:
FORM文件:
  1. FILE_TYPE=FORM_DEFN VERSION=2      
  2. FORM                                                        
  3. FIXED                                                      
  4. PORT 20 4                                             
  5. HEADER "FORM LIST TEST"               

  6. TILE  
  7.                                  
  8. TEXT "LIST列表框测试"        
  9. TLOC 1 1                        
  10. ENDTEXT                                

  11. FIELD listTest
  12. FLOC 1 3
  13. LIST "" 18 6
  14. OPTIONS PRETTYPRINT multiselect
  15. ENDFIELD

  16. ENDTILE                           
  17. ENDFORM
复制代码

SKILL文件:
  1. defun( formtest ()
  2.         ;axlFormTest("./ListForm.form")
  3.         form = axlFormCreate((gensym) "./ListForm.form" nil nil t)
  4.         axlFormDisplay(form)
  5.         layer = axlGetParam("paramLayerGroup:ETCH")->groupmembers
  6.         axlFormListAddItem(form "listTest" layer -1)
  7. );end defun
复制代码



发表于 2014-11-22 09:30:35 | 显示全部楼层
沙发舒服,感谢楼主~
发表于 2014-11-28 11:24:27 | 显示全部楼层
感谢楼主,赞一个!
发表于 2015-1-21 12:30:56 | 显示全部楼层
学习咯  感谢楼主
发表于 2015-2-4 15:12:49 | 显示全部楼层
楼主你好,小生正在慢慢学习FORM和list,感谢楼主的知识分享

我尝试把form源码保存为ListForm.form  然后skill 源码添加form的路径,加载后运行,提示  

E- *Error* axlFormDisplay: argument #1 should be any user-defined (other) type (type template = "o") - nil

请教下进一步调试的思路应该是怎么样的呢?

 楼主| 发表于 2015-2-4 17:15:53 | 显示全部楼层
Dio 发表于 2015-2-4 15:12
楼主你好,小生正在慢慢学习FORM和list,感谢楼主的知识分享

我尝试把form源码保存为ListForm.form  然 ...

出现这种问题一般都是form文件格式有错误。
你可以先使用axlFormTest测试Form是否能够正常显示。
发表于 2015-2-4 17:29:49 | 显示全部楼层
vivienluo 发表于 2015-2-4 17:15
出现这种问题一般都是form文件格式有错误。
你可以先使用axlFormTest测试Form是否能够正常显示。

是的,form里面多了个乱码,不过后来正常调入form之后list框是空白,看来.il的一些语句我还要看下
发表于 2015-2-7 22:39:32 | 显示全部楼层
学习了,讲的很详细。
发表于 2018-1-6 14:20:07 | 显示全部楼层
有获取list里所有内容的函数?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|网站地图|Cadence Skill 论坛 ( 蜀ICP备13024417号 )

GMT+8, 2024-12-26 14:20 , Processed in 0.153382 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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