Cadence Skill 论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 42|回复: 6

[讨论] form的多种代码实现方式

[复制链接]
发表于 5 天前 | 显示全部楼层 |阅读模式
本帖最后由 xieeyawen 于 2025-4-27 20:01 编辑

第一种方法是构建form函数
  1. defun( CreateOblThForm ()
  2.         MainFormFile=axlTempFile()
  3.         p = outfile(MainFormFile "w")
  4.         f_FormBegin(p 35,20,"Create Oblong Thermal - RichardL." "TOOLWINDOW")
  5.         f_Bitmap(p "cot" "cot" 0 0 14 14)
  6.         f_Text(p "Outer diameter(A):",15,0)  f_EditFloat(p "A",29,0,5,5,4)
  7.         f_Text(p "Inner diameter(B):",15,3)  f_EditFloat(p "B",29,3,5,5,4)
  8.         f_Text(p "Oblong length(D):", 15,6)  f_EditFloat(p "D",29,6,5,5,4)
  9.         f_Text(p "Circle spoke(C):",  15,9)  f_EditFloat(p "C",29,9,5,5,4)
  10.         f_Text(p "Oblong spoke(E):",  15,12) f_EditFloat(p "E",29,12,5,5,4)
  11.         f_Group(p "Direction",2,14,32,4)
  12.         f_CheckList(p "H", 4,16,"Horizontal","di")
  13.         f_CheckList(p "V",18,16,"Vertical","di")
  14.         f_Button(p "OK",2,19,10,3)
  15.         f_Button(p "Cancel",20,19,10,3)
  16.         f_FormEnd(p)
  17.         close(p)
  18.         MainFormFile
  19. );func
  20. ;以下为构造的标准化form命令函数
  21. ;f_FormBegin(p w h title form_opt)  TOOLWINDOW / AUTOGREYTEXT / FIXED_FONT / UNIXHGT
  22. defun( f_FormBegin (p w h @optional (form_title "by RichardL.") (form_opt "AUTOGREYTEXT"))
  23.         sprintf(dest,"FILE_TYPE=FORM_DEFN VERSION=2\nFORM %s\nFIXED\nPORT %d %d\nHEADER "%s"\nTILE\n\n",form_opt,w,h,form_title)
  24.         if(p fprintf(p,"%s",dest))
  25.         dest
  26. )
  27. ;f_FormEnd(p flexmode) StandButtons / EdgeGravity / EdgeGravityOne
  28. defun( f_FormEnd (p @optional flexmode)
  29.         if(flexmode        sprintf(dest,"FLEXMODE %s\nENDTILE\nENDFORM\n",flexmode)
  30.                 sprintf(dest,"ENDTILE\nENDFORM\n")
  31.         )
  32.         if(p fprintf(p,"%s",dest))
  33.         dest
  34. )
  35. ;f_CheckList(field x y name group)
  36. defun( f_CheckList (p field x y name @optional (group nil))
  37.         if(group==nil
  38.                 sprintf(dest,"FIELD %s\nFLOC %d %d\nCHECKLIST "%s" \nENDFIELD\n\n",field,x,y,name)
  39.                 sprintf(dest,"FIELD %s\nFLOC %d %d\nCHECKLIST "%s" "%s"\nENDFIELD\n\n",field,x,y,name,group)
  40.         )
  41.         if(p fprintf(p,"%s",dest))
  42.         dest
  43. )
  44. ;f_Group(field x y w h)
  45. defun( f_Group (p field x y w h)
  46.         sprintf(dest,"GROUP "%s"\nFLOC %d %d\nFSIZE %d %d\nENDGROUP\n\n",field,x,y,w,h)
  47.         if(p fprintf(p,"%s",dest))
  48.         dest
  49. )
  50. ;f_Text(field x y)
  51. defun( f_Text (p text x y)
  52.         sprintf(dest,"TEXT "%s"\nFLOC %d %d\nENDTEXT\n\n",text,x,y)
  53.         if(p fprintf(p,"%s",dest))
  54.         dest
  55. )
  56. ;f_EditFloat(field x y iw dw dec)    (iw-input width) (dw-data width)
  57. defun( f_EditFloat (p field x y iw dw dec)
  58.         sprintf(dest,"FIELD %s\nFLOC %d %d\nREALFILLIN %d %d\nDECIMAL %d\nENDFIELD\n\n",field,x,y,iw,dw,dec)
  59.         if(p fprintf(p,"%s",dest))
  60.         dest
  61. )
  62. ;f_Button(x y w h)
  63. defun( f_Button (p name x y w h)        ;close done/ok cancel help print
  64.         sprintf(dest,"FIELD %s\nFLOC %d %d\nMENUBUTTON "%s" %d %d\nENDFIELD\n\n",name,x,y,name,w,h)
  65.         if(p fprintf(p,"%s",dest))
  66.         dest
  67. )
  68. ;f_Bitmap(name x y w h @optional opt)
  69. defun( f_Bitmap (p field name x y w h @optional (opt nil))                ;[RIGHT | CENTER | BORDER | BOLD | UNDERLINE]
  70.         if(opt==nil
  71.         sprintf(dest,"FIELD %s\nthUMBNAIL %s\nFLOC %d %d\nFSIZE %d %d\nENDFIELD\n\n",field,name,x,y,w,h)
  72.         sprintf(dest,"FIELD %s\nTHUMBNAIL %s\nOPTIONS %s\nFLOC %d %d\nFSIZE %d %d\nENDFIELD\n\n",field,name,opt,x,y,w,h)
  73.         )
  74.         if(p fprintf(p,"%s",dest))
  75.         dest
  76. )
  77. ;f_TreeView(field x y w h)
  78. defun( f_TreeView (p field x y w h)
  79.         sprintf(dest,"FIELD %s\nFLOC %d %d\nTREEVIEW %d %d\nENDFIELD\n\n",field,x,y,w,h)
  80.         if(p fprintf(p,"%s",dest))
  81.         dest
  82. )
复制代码


 楼主| 发表于 5 天前 | 显示全部楼层
第二种方式直接调用form文件法。
defaultFormPath =strcat((axlGetVariable "cdsroot") "\\share\\local\\pcb\\forms")
procedure( CSLL_createform()
let((file form)
        file = strcat(defaultFormPath "/CSLL.form")
        CSLL_form =axlFormCreate( (gensym) file '("C" "OUTER") '_CSLL_greeting t)
        CSLL_form
)
)
 楼主| 发表于 5 天前 | 显示全部楼层
第三种和第四种都是常规fprint直接构造法:
procedure(caishenlaile()
prog(()
  pp = outfile("./CSLL.form" "w")  ;输出面板
        fprintf(pp
"
FILE_TYPE=FORM_DEFN VERSION=2\n
FORM TOOLWINDOW\n
FIXED\n
PORT 35 20\n
HEADER \"CSLL:\"\n
TILE\n
FIELD \"Byebye:\"\n
FLOC 20 19\n
MENUBUTTON \"Byebye:\" 10 3\n
ENDFIELD\n
ENDTILE\n
ENDFORM\n")
close(pp)
)
)
 楼主| 发表于 5 天前 | 显示全部楼层
defun( caishenlaile () ;创建面板
let((p)
    p = outfile("./CSLL.form")  ;输出面板
   
    fprintf( FORMFILE "FILE_TYPE=FORM_DEFN VERSION=2\n")         ;面板固定格式
    fprintf( FORMFILE "FORM TOOLWINDOW\n")                                  ;面板固定格式
    fprintf( FORMFILE "FIXED\n")                                 ;面板固定格式
    fprintf( FORMFILE "PORT 35 20\n")                        ;定义面板可视大小
    fprintf( FORMFILE "HEADER \"Cai Shen Lai Le\"\n") ;显示面板标题
    fprintf( FORMFILE "\n")     
    fprintf( FORMFILE "TILE\n")                            ;面板固定格式
   
    fprintf( FORMFILE "TEXT \"CSLL:\"blue_a \n") ;面板显示文字“Select Etch Layer” 并定义显示的颜色 如果去掉blue_a显示的是传统黑色
    fprintf( FORMFILE "TLOC  2 1\n")                          ;文字在面板上显示的X和Y坐标
    fprintf( FORMFILE "ENDTEXT\n\n")                          ;结束此段文字语句   
   
    fprintf( FORMFILE "FIELD Lai_Cai\n")         ;Check按钮
    fprintf( FORMFILE "FLOC 2 19\n")
    fprintf( FORMFILE "MENUBUTTON \"Lai_Cai\" 9 3\n")  ;显示Check 并定义按钮的长度和宽度
    fprintf( FORMFILE "ENDFIELD\n")
   
    fprintf( FORMFILE "FIELD Byebye\n")      ;退出按钮
    fprintf( FORMFILE "FLOC 20 19\n")
    fprintf( FORMFILE "MENUBUTTON \"Byebye\" 10 3\n")  ;显示Exit
    fprintf( FORMFILE "ENDFIELD\n")
   
    fprintf( FORMFILE "\n")
    fprintf( FORMFILE "ENDTILE\n") ;结束TILE
    fprintf( FORMFILE "\n")
    fprintf( FORMFILE "ENDFORM\n")  ;结束FORM
    close(p)                ;关闭FORMFILE
    CSLL_form = axlFormCreate( (gensym) "CSLL.form" '("C" "OUTER") '_CSLL_greeting t)   ;创建窗口 并将程序带到下面c_etch_Callback中
    axlFormDisplay(CSLL_form)       ;显示窗口
   
   
    axlFormColorize( form "blue_a" 'text 'blue) ;定义面板显示的文字用蓝色 根据个人习惯可以更改
    axlFormColorize( form "blue_b" 'text 'blue)
    axlFormColorize( form "blue_c" 'text 'blue)
    axlFormColorize( form "blue_d" 'text 'red)
    deleteFile( "CSLL.form")     ;删除面板文件
   
);defun
 楼主| 发表于 5 天前 | 显示全部楼层
好像附上的代码总有点问题,第一种方法,需要的下载这个构造热风焊盘的源代码

本帖子中包含更多资源

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

x
发表于 4 天前 | 显示全部楼层
感谢,学习一下,大佬问下,下拉式菜单,CASE要怎么写?
 楼主| 发表于 4 天前 | 显示全部楼层
\Cadence\SPB_17.4\share\pcb\examples\skill

\Cadence\SPB_17.4\share\pcb\examples\form
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-2 11:38 , Processed in 0.155922 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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