找回密码
 注册
关于网站域名变更的通知
查看: 1234|回复: 27
打印 上一主题 下一主题

Form怎么写?

[复制链接]
  • TA的每日心情
    开心
    2021-9-16 15:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2022-2-20 18:17 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    如题,看了一下参考文件,不太懂,就知道Form可以单独写成一个form文件在程序中调用,也可以嵌入程序。现在我的需求是要一个对话框设置a、b、c三个参数供程序使用,倾向于嵌入程序,大神动动手指头指导一下吧
  • TA的每日心情
    奋斗
    2025-9-24 15:41
  • 签到天数: 86 天

    [LV.6]常住居民II

    推荐
    发表于 2022-2-21 18:45 | 只看该作者
    最简单的就是
    先不看手册。
    第一步,看看别人写的源码。抄过来改改。(越简单的越好)
    第二步,看看cadence自带的form.il,边运行边研究。
    第三步,看help文档,熟悉每一个还不了解的字段代表的含义。

    增加form需要三部分。
    第一,form文件,可以单独一个文件,也可以程序里新建一个文件,然后删掉。
    第二,form的响应函数,也就是说点击form里面的按钮,下拉框,之类的怎么处理。
    第三,主程序里的使用。也分几步,先create form,再display form,最后设置值set form field,以及获取值get form field

    点评

    谢谢这位兄弟~按照这个思路,从简单的入手,单独写了一个非常单一的form,功能只有一个,输入一个参数到主程序中。现在功能是实现了,但是应该还是有比较大的问题的。 1. 在窗体修改了默认值以后,点OK后println(p)  详情 回复 发表于 2022-2-24 16:58
  • TA的每日心情
    开心
    2021-9-16 15:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    推荐
     楼主| 发表于 2022-3-16 22:21 | 只看该作者
    db-_- 发表于 2022-3-16 19:22
    1 如果是选择上面的网络,下面显示数量, 那么axlFormListGetSelCount这部分代码应该放在"nets_selected"下 ...

    应该是我表述不清。Form可能调整,所以单独写的:net_selector.form………………


    FILE_TYPE=FORM_DEFN VERSION=2
    FORM
    FIXED
    PORT 49 50

    HEADER "Nets Selector"
    TILE

    TEXT "Select the nets"
    TLOC 5 1
    ENDTEXT

    FIELD nets_list
    FLOC 5 3
    LIST "" 40 5
    OPTIONS multiselect
    ENDFIELD

    TEXT "Nets selected"
    TLOC 5 13
    ENDTEXT

    FIELD nets_selected
    FLOC 5 15
    LIST "" 40 5
    ENDFIELD

    TEXT Selected:
    TLOC 5 25
    ENDTEXT

    TEXT
    FLOC 23 25
    INFO Cnt 10
    ENDTEXT

    FIELD done
    FLOC 10 28
    MENUBUTTON "Next" 9 3
    ENDFIELD

    FIELD cancel
    FLOC 30 28
    MENUBUTTON "Cancel" 8 3
    ENDFIELD

    ENDTILE
    ENDFORM


    ………………

    FIELD nets_list用于列出所有net供选择,选中的网络出现在FIELD nets_selected中,然后TEXT Selected:后面的空格显示选中的net数量。

    现在我的skill完成了列出net,但是选中net并不会出现在FIELD nets_selected中,更没有显示net数量。另外对应的case里面增加函数,这个不明白
    下面是skill代码:
    ………………

    axlCmdRegister("seglength_check" 'seglength_check)

    defun( seglength_check ()

      net_form=axlFormCreate((gensym) "net_selector.form" '(n inner) 'net_selector_callback t)
      nets=axlDBGetDesign()->nets
      nets_name=list()
      i=0
      while( (i<=length(nets)-1)
      nets_name=cons(nth(i nets)->name nets_name)
      i=i+1
      )

    axlFormSetField(net_form "nets_list" nets_name)     
    axlFormDisplay(net_form)
    )

    defun( net_selector_callback (net_form)
          case(net_form->curField
              ("nets_list"
              net_s=net_form->curField            
              )
              ("nets_selected"
              axlFormSetField(net_form "nets_selected" net_s)

              )
              ("Cnt"
              Num=axlFormListGetSelCount(net_form "nets_selected")
                    sprintf(item "Num = %L" Num)
                    axlFormSetField(net_form "listnet" item)         
              )
              ("done"
               Nets=axlFormGetField(net_form "nets_selected")
               axlFormClose(net_form)           
              )
              ("cancel"
               axlFormClose(net_form)           
              )

          )   
    )

    defun( main ()

        println(Nets)   

    )


    ………………

    我希望点击Next(done)的时候继续运行下面的main函数,输出选中的net名称。
  • TA的每日心情
    奋斗
    2025-9-24 15:41
  • 签到天数: 86 天

    [LV.6]常住居民II

    推荐
    发表于 2022-3-17 18:19 | 只看该作者
    mycoal 发表于 2022-3-16 22:21
    应该是我表述不清。Form可能调整,所以单独写的:net_selector.form………………
    1. axlCmdRegister("seglength_check" 'seglength_check)

    2. defun( seglength_check ()

    3.   net_form=axlFormCreate((gensym) "net_selector.form" '(n inner) 'net_selector_callback t)
    4.   nets=axlDBGetDesign()->nets
    5.   nets_name=list()
    6.   i=0
    7.   while( (i<=length(nets)-1)
    8.           nets_name=cons(nth(i nets)->name nets_name)
    9.           i=i+1
    10.   )

    11. axlFormSetField(net_form "nets_list" nets_name)     
    12. axlFormDisplay(net_form)
    13. )

    14. defun( net_selector_callback (net_form)
    15.       case(net_form->curField
    16.           ("nets_list"
    17.                         ;net_s=net_form->curField   
    18.                                 axlFormListDeleteAll(net_form "nets_selected")
    19.                                 axlFormSetField(net_form "nets_selected"  axlFormListGetSelItems(net_form "nets_list"))
    20.                                  
    21.                                  Num = axlFormListGetSelCount(net_form "nets_list")
    22.                 sprintf(item "Num = %L" Num)
    23.                 axlFormSetField(net_form "Cnt" item)   
    24.           )
    25.           ("nets_selected"
    26.                        
    27.                  

    28.           )
    29.           ("Cnt"
    30.               
    31.           )
    32.           ("done"
    33.            Nets = axlFormGetField(net_form "nets_selected")
    34.                    main()
    35.            axlFormClose(net_form)           
    36.           )
    37.           ("cancel"
    38.            axlFormClose(net_form)           
    39.           )

    40.       )   
    41. )

    42. defun( main ()

    43.     println(Nets)   

    44. )
    复制代码


    点评

    直接用axlFormGetField获取"nets_selected"好像不行,下面这样就可以 ("done" axlFormListSelAll(net_form "nets_selected" t) Nets=axlFormListGetSelItems(net_form "nets_s  详情 回复 发表于 2022-3-18 09:35
    发现还有个问题,选中了网络,nets_selected里也显示了,点Next以后输出的Nets是空的,也就是并没有获取到nets_selected的东西,按理说我这里的Nets是全局变量,应该有内容才对的。  详情 回复 发表于 2022-3-17 21:21
    可以了,是我自己的form路径没设置对才出现那个问题。多谢多谢  详情 回复 发表于 2022-3-17 20:50
    运行报E- *Error* axlFormSetField: argument #1 should be any user-defined (other) type (type template = "otg") - nil 三个axlFormSetField函数没看出来参数有什么不对……  详情 回复 发表于 2022-3-17 20:39
  • TA的每日心情
    奋斗
    2025-9-24 15:41
  • 签到天数: 86 天

    [LV.6]常住居民II

    28#
    发表于 2022-4-13 17:24 | 只看该作者
    mycoal 发表于 2022-4-13 16:51
    改成nil还是一样的。

    那不知道了。看看官方示例是怎么弄的吧。
  • TA的每日心情
    开心
    2021-9-16 15:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    27#
     楼主| 发表于 2022-4-13 16:51 | 只看该作者
    db-_- 发表于 2022-4-13 15:46
    你看看你的axlFormCreate的最后一个参数【g_stringOption】是什么。你可以改成nil试试。

    g_stringOpti ...

    改成nil还是一样的。

    点评

    看不知道了。看看官方示例是怎么弄的把。  详情 回复 发表于 2022-4-13 17:24
  • TA的每日心情
    奋斗
    2025-9-24 15:41
  • 签到天数: 86 天

    [LV.6]常住居民II

    26#
    发表于 2022-4-13 15:46 | 只看该作者
    mycoal 发表于 2022-4-13 15:00
    这样确实是可以的,也就是说这不支持数字类型的list吗?这有点不科学。

    你看看你的axlFormCreate的最后一个参数【g_stringOption】是什么。你可以改成nil试试。

    g_stringOption     If t, the form returns and accepts all values as strings. By default, it returns and accepts values in the format declared in the form file.


    点评

    改成nil还是一样的。  详情 回复 发表于 2022-4-13 16:51
  • TA的每日心情
    开心
    2021-9-16 15:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    25#
     楼主| 发表于 2022-4-13 15:00 | 只看该作者
    db-_- 发表于 2022-4-13 11:31
    试试
    list("1.1" "2" "3" "4")

        这样确实是可以的,也就是说这不支持数字类型的list吗?这有点不科学。

    点评

    你看看你的axlFormCreate的最后一个参数【g_stringOption】是什么。你可以改成nil试试。 g_stringOption If t, the form returns and accepts all values as strings. By default, it returns and accepts va  详情 回复 发表于 2022-4-13 15:46
  • TA的每日心情
    奋斗
    2025-9-24 15:41
  • 签到天数: 86 天

    [LV.6]常住居民II

    24#
    发表于 2022-4-13 11:31 | 只看该作者
    mycoal 发表于 2022-4-13 11:00
    又卡顿了   一个纯数字的list,无法想写入到Field中,请问下是什么问题?
    Field定义:
    FIELD fie ...

    试试
    list("1.1" "2" "3" "4")

    点评

    这样确实是可以的,也就是说这不支持数字类型的list吗?这有点不科学。  详情 回复 发表于 2022-4-13 15:00
  • TA的每日心情
    开心
    2021-9-16 15:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    23#
     楼主| 发表于 2022-4-13 11:00 | 只看该作者
    db-_- 发表于 2022-3-18 10:26
    加油  慢慢会磨练出来的。

    又卡顿了   一个纯数字的list,无法想写入到Field中,请问下是什么问题?
    Field定义:
    FIELD field_name
    FLOC 23 3
    LIST "" 15 5
    OPTIONS multiselect
    ENDFIELD


    list='(1.1 2 3 4)

    用axlFormSetField(user_form "field_name" list),试了一下,如果list的元素是TEXT的话,可以写入,list的元素有数字的话就会中断,这是Field的定义有问题吗?

    点评

    试试 list("1.1" "2" "3" "4")  详情 回复 发表于 2022-4-13 11:31

    该用户从未签到

    22#
    发表于 2022-3-30 20:17 | 只看该作者
    thanks for the info
  • TA的每日心情
    奋斗
    2025-9-24 15:41
  • 签到天数: 86 天

    [LV.6]常住居民II

    21#
    发表于 2022-3-18 10:26 | 只看该作者
    mycoal 发表于 2022-3-18 09:35
    直接用axlFormGetField获取"nets_selected"好像不行,下面这样就可以
    ("done"
               axlFormLis ...

    加油  慢慢会磨练出来的。

    点评

    又卡顿了 一个纯数字的list,无法想写入到Field中,请问下是什么问题? Field定义: FIELD field_name FLOC 23 3 LIST "" 15 5 OPTIONS multiselect ENDFIELD list='(1.1 2 3 4) 用axlFormSet  详情 回复 发表于 2022-4-13 11:00
  • TA的每日心情
    开心
    2021-9-16 15:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    20#
     楼主| 发表于 2022-3-18 09:35 | 只看该作者

    直接用axlFormGetField获取"nets_selected"好像不行,下面这样就可以
    ("done"
               axlFormListSelAll(net_form "nets_selected" t)         
               Nets=axlFormListGetSelItems(net_form "nets_selected")   
               main()
               axlFormClose(net_form)
              )

    或者直接Nets=axlFormListGetSelItems(net_form "nets_list")也能达到目的。
    唉,感觉好难~再次感谢!

    点评

    加油 慢慢会磨练出来的。  详情 回复 发表于 2022-3-18 10:26
  • TA的每日心情
    开心
    2021-9-16 15:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    19#
     楼主| 发表于 2022-3-17 21:27 | 只看该作者
    db-_- 发表于 2022-3-17 21:18
    多用局部变量,要不容易出问题。

    我这里要用全局变量吧?目的就是通过form来获取选中的Nets,要不传递不出来。
  • TA的每日心情
    开心
    2021-9-16 15:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    18#
     楼主| 发表于 2022-3-17 21:21 | 只看该作者

    发现还有个问题,选中了网络,nets_selected里也显示了,点Next以后输出的Nets是空的,也就是并没有获取到nets_selected的东西,按理说我这里的Nets是全局变量,应该有内容才对的。
  • TA的每日心情
    奋斗
    2025-9-24 15:41
  • 签到天数: 86 天

    [LV.6]常住居民II

    17#
    发表于 2022-3-17 21:18 | 只看该作者
    多用局部变量,要不容易出问题。

    点评

    我这里要用全局变量吧?目的就是通过form来获取选中的Nets,要不传递不出来。  详情 回复 发表于 2022-3-17 21:27
  • TA的每日心情
    开心
    2021-9-16 15:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    16#
     楼主| 发表于 2022-3-17 20:50 | 只看该作者

    可以了,是我自己的form路径没设置对才出现那个问题。多谢多谢
  • TA的每日心情
    开心
    2021-9-16 15:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    15#
     楼主| 发表于 2022-3-17 20:39 | 只看该作者

    运行报E- *Error* axlFormSetField: argument #1 should be any user-defined (other) type (type template = "otg") - nil
    三个axlFormSetField函数没看出来参数有什么不对……
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-22 09:17 , Processed in 0.171875 second(s), 29 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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