EDA365电子论坛网

标题: [求助]在Form中,如何获取单选框的选中项是哪一个 [打印本页]

作者: leilei4908    时间: 2020-12-4 12:29
标题: [求助]在Form中,如何获取单选框的选中项是哪一个
本帖最后由 leilei4908 于 2020-12-4 12:31 编辑

        
        fprintf(f "FIELD _ap\n")
        fprintf(f "FLOC 18 7\n")
        fprintf(f "CHECKLIST \"To All Symbol Parts\" \"Placement\"\n")
        fprintf(f "ENDFIELD\n")
        
        fprintf(f "FIELD _pb\n")
        fprintf(f "FLOC 18 7\n")
        fprintf(f "CHECKLIST \"To PlaceBound\" \"Placement\"\n")
        fprintf(f "ENDFIELD\n")
        
        fprintf(f "FIELD _sk\n")
        fprintf(f "FLOC 18 7\n")
        fprintf(f "CHECKLIST \"To SilkScreen\" \"Placement\"\n")
        fprintf(f "ENDFIELD\n")
        
        fprintf(f "FIELD _as\n")
        fprintf(f "FLOC 18 7\n")
        fprintf(f "CHECKLIST \"To Assembly\" \"Placement\"\n")
        fprintf(f "ENDFIELD\n")
        
        fprintf(f "FIELD _dp\n")
        fprintf(f "FLOC 18 9\n")
        fprintf(f "CHECKLIST \"To DipPin\" \"Placement\"\n")
        fprintf(f "ENDFIELD\n")
        
        fprintf(f "FIELD _sp\n")
        fprintf(f "FLOC 18 11\n")
        fprintf(f "CHECKLIST \"To SmdPin\" \"Placement\"\n")
        fprintf(f "ENDFIELD\n")
        
        fprintf(f "FIELD _hs\n")
        fprintf(f "FLOC 18 13\n")
        fprintf(f "CHECKLIST \"To HighSpeed\" \"Placement\"\n")
        fprintf(f "ENDFIELD\n")
        
        fprintf(f "FIELD _pw\n")
        fprintf(f "FLOC 18 15\n")
        fprintf(f "CHECKLIST \"To Power\" \"Placement\"\n")
        fprintf(f "ENDFIELD\n")

部分代码如上
都是根据Placement为关键词的单选项
目前只能用
        cond(
                (axlFormGetField(pmcForm "_ap")
                        pmc_type = "_ap"
                )
                (axlFormGetField(pmcForm "_pb")
                        pmc_type = "_pb"
                )
                (axlFormGetField(pmcForm "_sk")
                        pmc_type == "_sk"
                )
                (axlFormGetField(pmcForm "_as")
                        pmc_type = "_as"
                )
                (axlFormGetField(pmcForm "_dp")
                        pmc_type = "_dp"
                )
                (axlFormGetField(pmcForm "_sp")
                        pmc_type = "_sp"
                )
                (axlFormGetField(pmcForm "_hs")
                        pmc_type = "_hs"
                )
                (axlFormGetField(pmcForm "_pw")
                        pmc_type = "_pw"
                )
        )
判断单选项的结果
是否有什么功能可以直接获取呢

20201204123040.png (25.78 KB, 下载次数: 0)

20201204123040.png

作者: srilri2    时间: 2020-12-4 13:43
js:var sex=$("input[name='sex']:checked").val();
作者: leilei4908    时间: 2020-12-4 13:54
srilri2 发表于 2020-12-4 13:43
js:var sex=$("input[name='sex']:checked").val();

抱歉,我需要的是skill的方式,java在allegro中应该是不能使用的吧

作者: leilei4908    时间: 2020-12-9 17:16
本帖最后由 leilei4908 于 2020-12-9 17:22 编辑
jet2001 发表于 2020-12-9 16:06
我沒用過axlFormGetField(pmcForm "_ap")
你是否改用 a888=axlFormGetField(pmcForm "_ap")
; a888的資料 ...

你针对的是CHECKLIST这个控件吗?能看下你的FORM是怎样创建的吗
看你的代码,应该是 ENUMSET 这个控件吧?这个可以获取到选中的值
我需要的是CHECKLIST的选中项

20201209172140.png (22.44 KB, 下载次数: 1)

20201209172140.png

作者: leilei4908    时间: 2020-12-9 17:19
jet2001 发表于 2020-12-9 16:06
我沒用過axlFormGetField(pmcForm "_ap")
你是否改用 a888=axlFormGetField(pmcForm "_ap")
; a888的資料 ...

CHECKLIST对应的Field,能获取到的 curValue 只有 t 或者 nil
也就是有被选上和没被选上的状态

作者: jet2001    时间: 2020-12-9 17:27
drc.form內容如下:
FILE_TYPE=FORM_DEFN VERSION=2
FORM
FIXED
PORT 46 14
HEADER "Allegro DRC Walker"
POPUP <drc_layer_p>"a""a".
POPUP <drc_type_p>"a""a".
TILE

FIELD drc_layer
FLOC 0 1
ENUMSET 12
POP "drc_layer_p"
ENDFIELD

FIELD drc_type
FLOC 15 1
ENUMSET 29
POP "drc_type_p"
ENDFIELD

FIELD drc_list
FLOC 0 4
LIST "Matching DRCs" 47 5
ENDFIELD

FIELD drc_showobj
FLOC 1 13
CHECKLIST "Report"
ENDFIELD

FIELD drc_zoomsize
FLOC 10 13
INTSLIDEBAR 2 2
MIN 1
MAX 99
ENDFIELD

FIELD drc_next
FLOC 17 13
MENUBUTTON "下一個" 8 3
ENDFIELD

FIELD drc_prev
FLOC 27 13
MENUBUTTON "修正" 8 3
ENDFIELD

FIELD done
FLOC 37 13
MENUBUTTON "離開" 8 3
ENDFIELD

ENDTILE
ENDFORM

作者: jet2001    时间: 2020-12-9 17:30
leilei4908 发表于 2020-12-9 17:19
CHECKLIST对应的Field,能获取到的 curValue 只有 t 或者 nil
也就是有被选上和没被选上的状态

前文不是CHECKLIST ; CHECKLIST是如下
.....
  ("drc_list" _drcNum=(Form_status->curValueInt) (_p2pdisp)
    if(NumDRCs>0 && (_drcType=="Top-Text Angle"||_drcType=="Bot-Text Angle") then
             axlFormSetFieldEditable(_drcForm "drc_prev" 1)
     else    axlFormSetFieldEditable(_drcForm "drc_prev" 0) ) )
  ("drc_next" _drcNum=(add1 _drcNum) (_p2pdisp)
    if(NumDRCs>0 && (_drcType=="Top-Text Angle"||_drcType=="Bot-Text Angle") then
             axlFormSetFieldEditable(_drcForm "drc_prev" 1)
     else    axlFormSetFieldEditable(_drcForm "drc_prev" 0) ) )
.....



作者: jet2001    时间: 2020-12-9 17:37
當我如圖 在 list 選第3個時case( Form_status->curField
會到這裡開始跑 ("drc_list" _drcNum=(Form_status->curValueInt) (_p2pdisp)...

_drcNum抓到的值是2 ; (0 1 2 3 4)

z1.png (17.18 KB, 下载次数: 2)

z1.png

作者: leilei4908    时间: 2020-12-9 17:50
jet2001 发表于 2020-12-9 17:37
當我如圖 在 list 選第3個時case( Form_status->curField
會到這裡開始跑 ("drc_list" _drcNum=(Form_stat ...

抱歉,可能是我描述的不清楚
我针对的是CHECKLIST这个控件,不是LIST
格式是
CHECKLIST "display" ["radioLabel"]
如果radioLable没有定义
就是你这边的Report这个单独的勾选项

如果radioLable有定义
那么相同的radioLable,组成一个单选项

作者: jet2001    时间: 2020-12-9 17:53
"我需要的是CHECKLIST的选中项"
我的作法是放在右上"drc_type" 下拉選項 , 一選好就立刻執行 各選項有各自的skill 在跑
  ("drc_type" _drcType=(Form_status->curValue)
    case( _drcType
         ("Top-Text Angle"   (ttextlst) _drcZoomSize=10)  
         ("Bot-Text Angle"   (btextlst) _drcZoomSize=10)
         ("Top-Text on PAD"  (ttpadlst) _drcZoomSize=6)
         ("Bot-Text on PAD"  (btpadlst) _drcZoomSize=6)
         ("Top-Text on VIA"  (ttvialst) _drcZoomSize=4)
         ("Bot-Text on VIA"  (btvialst) _drcZoomSize=4)
         ("Package to Keepin"  (p2ilst) _drcZoomSize=20)
         ("Package to Keepout" (p2olst) _drcZoomSize=20)
         ("Package to Package" (p2plst) _drcZoomSize=20)
         ("Top-2D on VP"  (tt2dvp) _drcZoomSize=3)

z2.png (16.04 KB, 下载次数: 2)

z2.png

作者: leilei4908    时间: 2020-12-9 18:05
jet2001 发表于 2020-12-9 17:53
"我需要的是CHECKLIST的选中项"
我的作法是放在右上"drc_type" 下拉選項 , 一選好就立刻執行 各選項有各自 ...

把几组 CHECKLIST 控件合并成 ENUMSET 当然是个不错的选择
但 CHECKLIST 能够直观的看到所有的选项,也有不可替代的作用
我目前需要的就是怎么能够获取单选的结果是什么
也就是相同 radioLable 的 CHECKLIST,目前选中的是哪一个
所以请不要推荐我把 CHECKLIST 改成 ENUMSET 控件了

作者: jet2001    时间: 2020-12-10 11:36
早上讀大老寫的rpn的skill , 他的作法和你一樣 也是用另一個參數來設定
pmc_type = "_ap" ....
作者: leilei4908    时间: 2020-12-10 11:40
jet2001 发表于 2020-12-10 11:36
早上讀大老寫的rpn的skill , 他的作法和你一樣 也是用另一個參數來設定
pmc_type = "_ap" ....

所以目前来看,的确是没有更好的方法了
原本以为,根据相同的radioLable,组成的单选项
应该可以根据这个radioLable获取到单选项的结果

作者: jet2001    时间: 2020-12-10 12:49
我去看手上USA CANDENCE 原廠的 SKILL 也都是用另一個參數來設定
作者: leilei4908    时间: 2020-12-10 14:19
jet2001 发表于 2020-12-10 11:36
早上讀大老寫的rpn的skill , 他的作法和你一樣 也是用另一個參數來設定
pmc_type = "_ap" ....

        cond(
                (axlFormGetField(pmcForm "_ap")
                        pmc_type = "_ap"
                )
                (axlFormGetField(pmcForm "_pb")
                        pmc_type = "_pb"
                )
                (axlFormGetField(pmcForm "_sk")
                        pmc_type == "_sk"
                )
                (axlFormGetField(pmcForm "_as")
                        pmc_type = "_as"
                )
                (axlFormGetField(pmcForm "_dp")
                        pmc_type = "_dp"
                )
                (axlFormGetField(pmcForm "_sp")
                        pmc_type = "_sp"
                )
                (axlFormGetField(pmcForm "_hs")
                        pmc_type = "_hs"
                )
                (axlFormGetField(pmcForm "_pw")
                        pmc_type = "_pw"
                )
        )

代码简化下
      fields = list("_ap" "_pb" "_sk" "_as" "_dp" "_sp" "_hs" "_pw")
      foreach(field fields
            when(axlFormGetField(pmcForm field)
                pmc_type = field
            )
      )






欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2