EDA365电子工程师网

标题: 十天学会Skill之第五天 [打印本页]

作者: deargds    时间: 2010-3-8 11:45
标题: 十天学会Skill之第五天
十天学会Skill之第五天
By deargds
https://www.eda365.com
学习目的:了解Skill与Allegro交互接口,创建一个简单的窗体实例。

一,了解Skill中常用的一些交互函数

axlUIYesNo("Are you ready?");弹出YES NO选择框
axlUIYesNoCancel("Are you ready?");弹出YES NO CANCEL三态选择框
以上函数会根据用户所选结果返回一个值,我们可以判断这个返回值来进行相关的操作。

[attach]25371[/attach]

axlUIMultipleChoice("Pick a choice" list("a" "b" "c"));多项选择

[attach]25372[/attach]

axlUIPrompt( "Enter Your name" "Cat" ) ;提示用户输入内容并返回
axlUIConfirm( "Hello" );弹出提示框
[attach]25373[/attach]

以上两个函数组合一下执行
axlUIConfirm(axlUIPrompt( "Enter Your name" "Cat" ))

axlMeterCreate;创建进度条,需与其它函数配合使用
axlMeterUpdate
axlMeterDestroy


创建进度条示例:
defun(test ()
        axlMeterCreate("test", "", t);创建进度条
        for(n 1 4
                sleep(1);延迟1秒
                axlMeterUpdate(n*25 "test");更新进度
        )
        axlMeterDestroy();关闭进度条
)
[attach]25374[/attach]

弹出NET选择框
axlUIDataBrowse('NET '(RETRIEVE_NAME) "test" t)
建议查看下axlUIDataBrowse函数的详细说明

二,创建程序交互窗口

Skill的窗体是通过对应的form文件来进行描述的,每个不同的窗体对应不同的FORM文件,里面包括了窗体的属性,每个控件的位置,大小,相关的属性等描述。
FORM文件内容示例:

FILE_TYPE=FORM_DEFN VERSION=2
FORM
FIXED
PORT 42 5
HEADER "Progress Meter"

TILE

TEXT
TLOC 1 3
INFO progressText 40
ENDTEXT

FIELD bar
FLOC 1 1
PROGRESS 41 3
ENDFIELD

ENDTILE

ENDFORM

SKILL内置了一些WIN32控件,如按钮,文本框,单选,复选,列表,树状列表,下拉列表,进度条等,
在FORM文件中,每个控件都有自己的FIELD名称,可以通过FIELD来访问该控件以获取和设置控件的值。

在编写好Form文件后,可以通过axlFormTest()函数来进行测试,
例如axlFormTest("C://Cadence//SPB_15.7//share//pcb//text//forms//createsplitplane.form")

实际的Skill程序中为了方便,通常都会使用动态生成Form文件的方法来创建窗体,结合前面了解过的文件输入输出端口,比较容易实现。

示例如下:
[attach]25375[/attach]
defun( test ()
        f = "/test.form"; 定义test.form文件
        p = outfile(f "w")
        fprintf(p "FILE_TYPE=FORM_DEFN VERSION=2\n")
        fprintf(p "FORM\n")
        fprintf(p "FIXED\n")
        fprintf(p "PORT 22 8\n")
        fprintf(p "HEADER \"TEST\"\n")
        fprintf(p "TILE\n")
        fprintf(p,"FIELD tip\n\n");开始写入文本框定义
        fprintf(p,"FLOC 1 1\n");定义坐标位置
        fprintf(p,"STRFILLIN 15 40\n");控件尺寸
        fprintf(p,"ENDFIELD\n\n")
        fprintf(p "FIELD pop\n");开始写入按钮POP定义
        fprintf(p "FLOC 1 4\n")
        fprintf(p "MENUBUTTON \"Pop\" 8 3\n")
        fprintf(p "ENDFIELD\n")
        fprintf(p "FIELD close\n");开始写入按钮EXIT定义
        fprintf(p "FLOC 10 4\n")
        fprintf(p "MENUBUTTON \"Exit\" 8 3\n")
        fprintf(p "ENDFIELD\n")
        fprintf(p "ENDTILE\n")
        fprintf(p "ENDFORM\n")
        close(p);test.form文件写入结束
        
        h = axlFormCreate((gensym) f nil 'test_call t);调用axlFormCreate函数根据test.form文件创建窗体,并关联窗体回调函数test_call
        axlFormDisplay(h);显示窗体
)

defun( test_call (h)
        case( h -> curField ;获取当前窗体激活的控件
                ("pop"
                        axlUIConfirm(axlFormGetField(h "tip"));获取FIELD为tip的控件内容,并弹出
                )
                ("close"
                        axlFormClose(h);关闭窗体
                        deleteFile(f);删除生成的FORM文件
                )
        )
)

在回调函数中经常用到的函数及属性
axlFormSetField;设置控件值
axlFormGetField;获取控件值
axlFormSetFieldEditable;禁用/允许控件
axlFormSetFieldVisible;隐藏/显示控件
formHandle -> curField;返回窗体当前活动的控件。
formHandle -> curValue;返回窗体当前活动控件的值,类型与FORM文件中所定义类型一致,也可以通过axlFormCreate定义为string类型。


另外在帮助文件X:\Cadence\SPB_15.7\share\pcb\examples\skill\form\basic目录下有非常详细的FORM文件示例,可以参考一下。

作者: xin_yu    时间: 2010-3-8 12:14
谢谢LZ的慷慨分享
作者: mifener    时间: 2010-3-8 20:40
謝謝樓主,寫得很好!
鑒定了我學下去的信心!
作者: jinshan010    时间: 2010-4-12 17:39
楼主辛苦了,关注中!支持一下
作者: happybai    时间: 2010-4-13 21:51
收益匪浅啊
作者: happybai    时间: 2010-4-14 09:22
期待第六天
作者: 03155001    时间: 2010-4-20 17:23
很好,谢谢
作者: 0922537716    时间: 2010-4-22 13:47
很好。正在学了。顶起来,
作者: ggzzc    时间: 2010-5-1 08:55
谢谢。
作者: mifener    时间: 2010-5-21 12:22
顶啊,不过后面几天呢?
作者: 网上邻居    时间: 2010-5-22 21:53
楼主后面何时在更新啊,泪流期待。。
作者: abcdefghigk    时间: 2010-7-14 13:57
好东西,期待楼主的更新!
作者: xileito    时间: 2010-9-10 09:07
好东西,期待楼主的更新!
作者: cqnorman    时间: 2011-1-23 20:44
顶!
作者: kilova    时间: 2011-4-15 10:55
学习中
作者: cccccc32    时间: 2011-4-15 10:59
谢谢楼主! 刚好要学一下,很好的资料!
作者: 290921341    时间: 2011-4-15 14:03
不错
作者: Mako    时间: 2011-11-26 16:17
楼主,为什么从第六天以后就没有了呢?作为初学者,我很期待啊!我的分很少,也没资格给你评价,但很希望你能把十天的都发给我kang9016@foxmail.com  万分感激!
作者: streetflower    时间: 2011-11-27 12:21
谢谢分享
作者: xiexl893    时间: 2012-2-11 14:24
楼主,太宝贵的资料了,第六天以后的为什么都没有啊?
作者: 随心所语    时间: 2012-10-19 09:21
期待后续更新,感谢楼主
作者: hzhz20054758    时间: 2012-11-8 15:46
大神,第六天怎么就不更了啊,好期待啊,正在学习中~受益匪浅,
希望得到指点{:soso_e154:}
作者: hhgjLcd    时间: 2012-11-23 10:14
新手谢谢楼主了!
作者: kay    时间: 2012-12-17 16:22
谢谢 再次学skill
作者: endeda    时间: 2012-12-24 10:53
期待後續的學習能繼續發行
作者: fengyu6117    时间: 2012-12-29 13:52
没时间学习啊

作者: lyh289114980    时间: 2013-8-21 17:27
版主outfile(filename "w") filename 是相对路径怎么办啊?
作者: kkman2000    时间: 2015-8-22 20:15
支持支持支持  非常感謝
作者: 20120429    时间: 2015-8-24 10:35

作者: dengbaba    时间: 2016-3-23 09:46
谢谢楼主
作者: Yaphets    时间: 2018-2-1 17:25
多谢版主




欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/) Powered by Discuz! X3.2