Cadence Skill 论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 209|回复: 6

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

[复制链接]
发表于 2025-4-27 19:38:59 | 显示全部楼层 |阅读模式
本帖最后由 xieeyawen 于 2025-5-22 11:27 编辑

第一种方法是构建form函数
  1. defun( caishenlaile3 ()
  2.     form_CAI = axlFormCreate( (gensym) CreatecaishenForm() '("C" "inner") '_CSLL_greeting t)   ;创建窗口
  3.     axlFormColorize( form_CAI "color_a" 'text 'black) ;定义面板显示的文字颜色
  4.     axlFormColorize( form_CAI "color_b" 'text 'white)
  5.     axlFormColorize( form_CAI "color_c" 'text 'red)
  6.     axlFormColorize( form_CAI "color_d" 'background 'green)
  7.     axlFormColorize( form_CAI "color_e" 'background 'yellow)
  8.     axlFormColorize( form_CAI "color_f" 'text 'blue)
  9.     axlFormDisplay(form_CAI)       ;显示窗口
  10.   )

  11. defun( CreatecaishenForm ()
  12.         CSLL_FormFile=axlTempFile();临时文件夹
  13.         p = outfile(CSLL_FormFile "w");打开临时文件夹,打开临时port
  14.         caishenlailemain() ;调用财神主函数,获得函数里的变量值
  15.         f_FormBegin(p 110,90,"Cai Shen Lai Le" "TOOLWINDOW")
  16.         f_Bitmap(p "CSLL" "CSLL" 1 21 20 20)
  17.         f_Bitmap(p "CSLL_1" "CSLL" 85 21 20 20)
  18.         f_Bitmap(p "CSLL0" "CSLL0" 1 1 20 20)
  19.         f_Bitmap(p "CSLL1" "CSLL1" 24 1 20 20)
  20.         f_Bitmap(p "CSLL2" "CSLL2" 85 1 20 20)
  21.         f_Bitmap(p "CSLL3" "CSLL3" 1 43 20 20)
  22.         f_Bitmap(p "CSLL4" "CSLL4" 27 43 20 20)
  23.         f_Bitmap(p "CSLL5" "CSLL5" 46 43 20 20)
  24.         f_Bitmap(p "CSLL6" "CSLL6" 64 43 20 20)
  25.         f_Bitmap(p "CSLL7" "CSLL7" 85 43 20 20)
  26.         f_TextC(p greeting_Date "color_d" 40 20 30 4 "bold  border center")
  27.         f_TextC(p greeting1 "color_e" 40 26 30 4 "bold  border center")
  28.         f_TextC(p greeting_Time "color_f" 40 32 30 4 "bold  border center")
  29.         f_TextC(p greeting2 "color_c" 40 38 30 4 "bold underline border center")       
  30.         ;f_TextC(p greeting_Date "color_d" 40 20 30 4 "bold  border center")
  31.         ;f_TextC(p greeting1 "color_e" 40 26 30 4 "bold  border center")
  32.         ;f_TextC(p greeting_Time "color_f" 40 32 30 4 "bold  border center")
  33.         ;f_TextC(p greeting2 "color_c" 40 38 30 4 "bold underline border center")       
  34.         f_Button(p "WaBao","Wa_Bao",15,70,10,3)
  35.         f_Button(p "LaiCai","Lai_Cai",45,70,10,3)
  36.         f_Button(p "ByeBye","Bye_Bye",75,70,10,3)
  37.         f_FormEnd(p "EdgeGravityOne")
  38.         close(p)
  39.         CSLL_FormFile;不加这一句虽然form能建立,但是form运行不了,因为form是个临时文件,不是个form文件。必须要返回CSLL_FormFile值。
  40. );func


  41. ;以下为构造的标准化form命令函数
  42. ;f_FormBegin(p w h title form_opt)  TOOLWINDOW / AUTOGREYTEXT / FIXED_FONT / UNIXHGT
  43. defun( f_FormBegin (p w h @optional (form_title "by RichardL.") (form_opt "AUTOGREYTEXT"))
  44.         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)
  45.         if(p fprintf(p,"%s",dest))
  46.         dest
  47. )
  48. ;f_FormEnd(p flexmode) StandButtons / EdgeGravity / EdgeGravityOne
  49. defun( f_FormEnd (p @optional flexmode)
  50.         if(flexmode        sprintf(dest,"FLEXMODE %s\nENDTILE\nENDFORM\n",flexmode)
  51.                 sprintf(dest,"ENDTILE\nENDFORM\n")
  52.         )
  53.         if(p fprintf(p,"%s",dest))
  54.         dest
  55. )
  56. ;f_CheckList(field x y name group)
  57. defun( f_CheckList (p field x y name @optional (group nil))
  58.         if(group==nil
  59.                 sprintf(dest,"FIELD %s\nFLOC %d %d\nCHECKLIST "%s" \nENDFIELD\n\n",field,x,y,name)
  60.                 sprintf(dest,"FIELD %s\nFLOC %d %d\nCHECKLIST "%s" "%s"\nENDFIELD\n\n",field,x,y,name,group)
  61.         )
  62.         if(p fprintf(p,"%s",dest))
  63.         dest
  64. )
  65. ;f_Group(field x y w h)
  66. defun( f_Group (p field x y w h)
  67.         sprintf(dest,"GROUP "%s"\nFLOC %d %d\nFSIZE %d %d\nENDGROUP\n\n",field,x,y,w,h)
  68.         if(p fprintf(p,"%s",dest))
  69.         dest
  70. )

  71. ;f_Text(field text x y w h @optional opt)
  72. defun( f_Text (p text x y w h @optional (opt nil))
  73.   if(opt==nil
  74.         sprintf(dest,"TEXT "%s"\nTLOC %d %d\nFSIZE %d %d\nENDTEXT\n\n",text,x,y,w,h)
  75.         sprintf(dest,"TEXT "%s"\nTLOC %d %d\nOPTIONS %s\nFSIZE %d %d\nENDTEXT\n\n",text,x,y,opt,w,h)
  76.         )
  77.         if(p fprintf(p,"%s",dest))
  78.         dest
  79. )

  80. ;f_Text(field text color x y w h @optional opt)
  81. defun( f_TextC (p text color x y w h @optional (opt nil))
  82.   if(opt==nil
  83.         sprintf(dest,"TEXT "%s" %s \nTLOC %d %d\nFSIZE %d %d\nENDTEXT\n\n",text,color,x,y,w,h)
  84.         sprintf(dest,"TEXT "%s" %s \nTLOC %d %d\nOPTIONS %s\nFSIZE %d %d\nENDTEXT\n\n",text,color,x,y,opt,w,h)
  85.         )
  86.         if(p fprintf(p,"%s",dest))
  87.         dest
  88. )

  89. ;f_EditFloat(field x y iw dw dec)    (iw-input width) (dw-data width)
  90. defun( f_EditFloat (p field x y iw dw dec)
  91.         sprintf(dest,"FIELD %s\nFLOC %d %d\nREALFILLIN %d %d\nDECIMAL %d\nENDFIELD\n\n",field,x,y,iw,dw,dec)
  92.         if(p fprintf(p,"%s",dest))
  93.         dest
  94. )
  95. ;f_Button(x y w h)
  96. defun( f_Button (p field name x y w h)        ;close done/ok cancel help print
  97.         sprintf(dest,"FIELD %s\nFLOC %d %d\nMENUBUTTON "%s" %d %d\nENDFIELD\n\n",field,x,y,name,w,h)
  98.         if(p fprintf(p,"%s",dest))
  99.         dest
  100. )
  101. ;f_Bitmap(name x y w h @optional opt)
  102. defun( f_Bitmap (p field name x y w h @optional (opt nil))                ;[RIGHT | CENTER | BORDER | BOLD | UNDERLINE]
  103.         if(opt==nil
  104.         sprintf(dest,"FIELD %s\nthUMBNAIL %s\nFLOC %d %d\nFSIZE %d %d\nENDFIELD\n\n",field,name,x,y,w,h)
  105.         sprintf(dest,"FIELD %s\nTHUMBNAIL %s\nOPTIONS %s\nFLOC %d %d\nFSIZE %d %d\nENDFIELD\n\n",field,name,opt,x,y,w,h)
  106.         )
  107.         if(p fprintf(p,"%s",dest))
  108.         dest
  109. )
  110. ;f_TreeView(field x y w h)
  111. defun( f_TreeView (p field x y w h)
  112.         sprintf(dest,"FIELD %s\nFLOC %d %d\nTREEVIEW %d %d\nENDFIELD\n\n",field,x,y,w,h)
  113.         if(p fprintf(p,"%s",dest))
  114.         dest
  115. )
  116.   
  117. defun(_CSLL_greeting (form_CAI)
  118.         case(form_CAI->curField
  119.                 ("WaBao" _WaBao());挖宝弹窗显示
  120.                 ("LaiCai" _laicai());来财弹窗显示
  121.                 ("ByeBye" axlFormClose(form_CAI));弹窗显示
  122.         );case
  123.         caishenlailemain ()
  124.         )
  125.        
  126. defun(_WaBao ()
  127. let((Bao wabao)
  128.                 (axlSetFindFilter ?enabled (list "noall" "invisible" "nets") ?onButtons (list "nets"))
  129.                 l_greeting_nets=axlGetSelSet(axlAddSelectAll())
  130.                 axlClearSelSet()
  131.                 Bao=0
  132.                 foreach(greeting_nets l_greeting_nets Bao=Bao+(greeting_nets~>unconnected))
  133.     sprintf(wabao "^_^ \277\363\311\275\273\271\312\243\317\302 %d \277\351\275\360\327\251,\n\265\367\325\373\327\313\312\306\243\254\307\341\313\311\304\303\317\302!" Bao)
  134.    
  135.     axlUIConfirm(wabao);弹窗显示
  136.     )       
  137.         );defun
复制代码

 楼主| 发表于 2025-4-27 19:40:15 | 显示全部楼层
第二种方式直接调用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
)
)
 楼主| 发表于 2025-4-27 19:41:02 | 显示全部楼层

第三种和第四种都是常规fprint直接构造法

本帖最后由 xieeyawen 于 2025-5-22 11:25 编辑
  1.   p = outfile("./CSLL.form" "w")  
  2.         sprintf(dest,
  3. "       
  4. FILE_TYPE=FORM_DEFN VERSION=2\n
  5. FORM TOOLWINDOW\n
  6. FIXED\n
  7. PORT 110 90\n
  8. HEADER "Cai Shen Lai Le"\n
  9. \n
  10. TILE\n
  11. FIELD CSLL\n
  12. THUMBNAIL "CSLL"\n
  13. FLOC 1 21\n
  14. FSIZE 20 20\n
  15. ENDFIELD\n
  16. FIELD CSLL_1\n
  17. THUMBNAIL "CSLL"\n
  18. FLOC 85 21\n
  19. FSIZE 20 20\n
  20. ENDFIELD\n
  21. FIELD CSLL0\n
  22. THUMBNAIL "CSLL0"\n
  23. FLOC 1 1\n
  24. FSIZE 20 20\n
  25. ENDFIELD\n
  26. FIELD CSLL1\n
  27. THUMBNAIL "CSLL1"\n
  28. FLOC 24 1\n
  29. FSIZE 58 20\n
  30. ENDFIELD\n
  31. FIELD CSLL2\n
  32. THUMBNAIL "CSLL2"\n
  33. FLOC 85 1\n
  34. FSIZE 20 20\n
  35. ENDFIELD\n
  36. FIELD CSLL3\n
  37. THUMBNAIL "CSLL3"\n
  38. FLOC 1 43\n
  39. FSIZE 20 20\n
  40. ENDFIELD\n
  41. FIELD CSLL4\n
  42. THUMBNAIL "CSLL4"\n
  43. FLOC 27 43\n
  44. FSIZE 20 20\n
  45. ENDFIELD\n
  46. FIELD CSLL6\n
  47. THUMBNAIL "CSLL6"\n
  48. FLOC 46 43\n
  49. FSIZE 20 20\n
  50. ENDFIELD\n
  51. FIELD CSLL5\n
  52. THUMBNAIL "CSLL5"\n
  53. FLOC 64 43\n
  54. FSIZE 20 20\n
  55. ENDFIELD\n
  56. FIELD CSLL7\n
  57. THUMBNAIL "CSLL7"\n
  58. FLOC 85 43\n
  59. FSIZE 20 20\n
  60. ENDFIELD\n
  61. TEXT "%s" color_d\n
  62. TLOC  40 20\n
  63. OPTIONS bold  border center\n
  64. FSIZE 30 4\n
  65. ENDTEXT\n
  66. \n
  67. TEXT "%s" color_e\n
  68. TLOC  40 26\n
  69. OPTIONS bold  border center\n
  70. FSIZE 30 4\n
  71. ENDTEXT\n

  72. TEXT "%s" color_f\n
  73. TLOC  40 32\n
  74. OPTIONS bold  border center\n
  75. FSIZE 30 4\n
  76. ENDTEXT\n
  77. \n
  78. TEXT "%s" color_c\n
  79. TLOC  40 38\n
  80. OPTIONS bold underline border center\n
  81. FSIZE 30 4\n
  82. ENDTEXT\n
  83. \n
  84. FIELD WaBao\n
  85. FLOC 15 70\n
  86. MENUBUTTON "Wa_Bao" 10 3\n
  87. ENDFIELD\n
  88. FIELD LaiCai\n
  89. FLOC 45 70\n
  90. MENUBUTTON "Lai_Cai" 10 3\n
  91. ENDFIELD\n
  92. FIELD ByeBye\n
  93. FLOC 75 70\n
  94. MENUBUTTON "Bye_Bye" 10 3\n
  95. ENDFIELD\n
  96. FLEXMODE EdgeGravityOne\n
  97. \n
  98. ENDTILE\n
  99. \n
  100. ENDFORM\n
  101. ",greeting_Date,greeting1,greeting_Time,greeting2)
  102.         if(p fprintf(p,"%s",dest))
  103.     close(p)                ;关闭p
  104.     form_CAI = axlFormCreate( (gensym) "CSLL.form" '("C" "inner") '_CSLL_greeting t)   ;创建窗口,调用程序_CSLL_greeting
  105.     axlFormColorize( form_CAI "color_c" 'text 'red)
  106.     axlFormColorize( form_CAI "color_d" 'background 'green)
  107.     axlFormColorize( form_CAI "color_e" 'background 'yellow)
  108.     axlFormColorize( form_CAI "color_f" 'text 'blue)
  109.     axlFormDisplay(form_CAI)       ;显示窗口
  110.     deleteFile("CSLL.form")     ;删除面板文件
  111. );end let   
  112. );defun

  113. defun(_CSLL_greeting (form_CAI)
  114.         case(form_CAI->curField
  115.                 ("WaBao" _WaBao());挖宝弹窗显示
  116.                 ("LaiCai" _laicai());来财弹窗显示
  117.                 ("ByeBye" axlFormClose(form_CAI));弹窗显示
  118.         );case
  119.         )
复制代码

 楼主| 发表于 2025-4-27 19:41:39 | 显示全部楼层

常规fprintf

本帖最后由 xieeyawen 于 2025-5-22 11:24 编辑
  1. p = outfile("./CSLL.form")  ;输出面板

  2.     fprintf( p "FILE_TYPE=FORM_DEFN VERSION=2\n")         ;面板固定格式
  3.     fprintf( p "FORM TOOLWINDOW\n")                       ;面板固定格式
  4.     fprintf( p "FIXED\n")                                 ;面板固定格式
  5.     fprintf( p "PORT 110 90\n")                        ;定义面板可视大小
  6.     fprintf( p "HEADER "Cai Shen Lai Le"\n") ;显示面板标题
  7.     fprintf( p "\n")     
  8.     fprintf( p "TILE\n")                            ;面板固定格式
  9.    
  10.     fprintf( p "FIELD CSLL\n")
  11.     fprintf( p "THUMBNAIL "CSLL"\n")  ;显示图片
  12.     fprintf( p "FLOC 1 21\n")    ;图片位置
  13.     fprintf( p "FSIZE 20 20\n")  ;图片长度和宽度
  14.     fprintf( p "ENDFIELD\n")
  15.    
  16.     fprintf( p "FIELD CSLL_1\n")
  17.     fprintf( p "THUMBNAIL "CSLL"\n") ;显示图片
  18.     fprintf( p "FLOC 85 21\n")  ;图片位置
  19.     fprintf( p "FSIZE 20 20\n")  ;图片长度和宽度
  20.     fprintf( p "ENDFIELD\n")
  21.    
  22.     fprintf( p "FIELD CSLL0\n")
  23.     fprintf( p "THUMBNAIL "CSLL0"\n") ;显示图片
  24.     fprintf( p "FLOC 1 1\n")  ;图片位置
  25.     fprintf( p "FSIZE 20 20\n")  ;图片长度和宽度
  26.     fprintf( p "ENDFIELD\n")

  27.     fprintf( p "FIELD CSLL1\n")  
  28.     fprintf( p "THUMBNAIL "CSLL1"\n") ;显示图片
  29.     fprintf( p "FLOC 24 1\n")  ;图片位置
  30.     fprintf( p "FSIZE 58 20\n")  ;图片长度和宽度
  31.     fprintf( p "ENDFIELD\n")
  32.            
  33.     fprintf( p "FIELD CSLL2\n")
  34.     fprintf( p "THUMBNAIL "CSLL2"\n") ;显示图片
  35.     fprintf( p "FLOC 85 1\n")  ;图片位置
  36.     fprintf( p "FSIZE 20 20\n")  ;图片长度和宽度
  37.     fprintf( p "ENDFIELD\n")
  38.    
  39.     fprintf( p "FIELD CSLL3\n")  
  40.     fprintf( p "THUMBNAIL "CSLL3"\n") ;显示图片
  41.     fprintf( p "FLOC 1 43\n")  ;图片位置
  42.     fprintf( p "FSIZE 20 20\n")  ;图片长度和宽度
  43.     fprintf( p "ENDFIELD\n")
  44.    
  45.     fprintf( p "FIELD CSLL4\n")
  46.     fprintf( p "THUMBNAIL "CSLL4"\n") ;显示图片
  47.     fprintf( p "FLOC 27 43\n")  ;图片位置
  48.     fprintf( p "FSIZE 20 20\n")  ;图片长度和宽度
  49.     fprintf( p "ENDFIELD\n")
  50.    
  51.     fprintf( p "FIELD CSLL6\n")
  52.     fprintf( p "THUMBNAIL "CSLL6"\n") ;显示图片
  53.     fprintf( p "FLOC 46 43\n")  ;图片位置
  54.     fprintf( p "FSIZE 20 20\n")  ;图片长度和宽度
  55.     fprintf( p "ENDFIELD\n")
  56.    
  57.     fprintf( p "FIELD CSLL5\n")
  58.     fprintf( p "THUMBNAIL "CSLL5"\n") ;显示图片
  59.     fprintf( p "FLOC 64 43\n")  ;图片位置
  60.     fprintf( p "FSIZE 20 20\n")  ;图片长度和宽度
  61.     fprintf( p "ENDFIELD\n")
  62.    
  63.     fprintf( p "FIELD CSLL7\n")
  64.     fprintf( p "THUMBNAIL "CSLL7"\n") ;显示图片
  65.     fprintf( p "FLOC 85 43\n")  ;图片位置
  66.     fprintf( p "FSIZE 20 20\n")  ;图片长度和宽度
  67.     fprintf( p "ENDFIELD\n")   
  68.    
  69.     sprintf( dest1,"TEXT "%s" color_d \nTLOC  40 20\nOPTIONS bold  border center\nFSIZE 30 4\nENDTEXT\n\n",greeting_Date)
  70.     ;OPTIONS bold underline border center依次是让text的文字加粗、边框、居中
  71.     fprintf( p,"%s",dest1)  
  72.    
  73.     sprintf( dest2,"TEXT "%s" color_e \nTLOC  40 26\nOPTIONS bold  border center\nFSIZE 30 4\nENDTEXT\n\n",greeting1)
  74.     ;OPTIONS bold underline border center依次是让text的文字加粗、边框、居中
  75.     fprintf( p,"%s",dest2)
  76.    
  77.     sprintf( dest3,"TEXT "%s" color_f \nTLOC  40 32\nOPTIONS bold  border center\nFSIZE 30 4\nENDTEXT\n\n",greeting_Time)
  78.     ;OPTIONS bold underline border center依次是让text的文字加粗、边框、居中
  79.     fprintf( p,"%s",dest3)
  80.    
  81.     sprintf( dest4,"TEXT "%s" color_c \nTLOC  40 38\nOPTIONS bold underline border center\nFSIZE 30 4\nENDTEXT\n\n",greeting2)
  82.     ;OPTIONS bold underline border center依次是让text的文字加粗、下划线、边框、居中
  83.     fprintf( p,"%s",dest4)  
  84.       
  85.     fprintf( p "FIELD WaBao\n")         ;挖宝按钮
  86.     fprintf( p "FLOC 15 70\n")
  87.     fprintf( p "MENUBUTTON "Wa_Bao" 10 3\n")  ;显示Check 并定义按钮的长度和宽度
  88.     fprintf( p "ENDFIELD\n")
  89.    
  90.     fprintf( p "FIELD LaiCai\n")         ;来财按钮
  91.     fprintf( p "FLOC 45 70\n")
  92.     fprintf( p "MENUBUTTON "Lai_Cai" 10 3\n")  ;显示Check 并定义按钮的长度和宽度
  93.     fprintf( p "ENDFIELD\n")
  94.    
  95.     fprintf( p "FIELD ByeBye\n")      ;退出按钮
  96.     fprintf( p "FLOC 75 70\n")
  97.     fprintf( p "MENUBUTTON "Bye_Bye" 10 3\n")  ;显示Exit
  98.     fprintf( p "ENDFIELD\n")
  99.    
  100.     fprintf( p "FLEXMODE EdgeGravityOne\n");EdgeGravity,EdgeGravityOne,StandButtons共三种模式,可以任意调整form的尺寸
  101.     fprintf( p "\n")
  102.     fprintf( p "ENDTILE\n") ;结束TILE
  103.     fprintf( p "\n")
  104.     fprintf( p "ENDFORM\n")  ;结束FORM
  105.     close(p)                ;关闭p
  106.     form_CAI = axlFormCreate( (gensym) "CSLL.form" '("C" "inner") '_CSLL_greeting t)   ;创建窗口,调用程序_CSLL_greeting
  107.     ;axlFormColorize( form_CAI "color_a" 'text 'black) ;定义面板显示的文字颜色
  108.     ;axlFormColorize( form_CAI "color_b" 'text 'white)
  109.     axlFormColorize( form_CAI "color_c" 'text 'red)
  110.     axlFormColorize( form_CAI "color_d" 'background 'green)
  111.     axlFormColorize( form_CAI "color_e" 'background 'yellow)
  112.     axlFormColorize( form_CAI "color_f" 'text 'blue)
  113.     ;axlFormColorize( form_CAI "color_g" 'background 'button);button-grey

  114.     axlFormDisplay(form_CAI)       ;显示窗口
  115.     deleteFile("CSLL.form")     ;删除面板文件
  116. );end let   
  117. );defun
复制代码

 楼主| 发表于 2025-4-27 20:03:45 | 显示全部楼层
好像附上的代码总有点问题,第一种方法,需要的下载这个构造热风焊盘的源代码

本帖子中包含更多资源

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

x
发表于 2025-4-28 08:38:46 | 显示全部楼层
感谢,学习一下,大佬问下,下拉式菜单,CASE要怎么写?
 楼主| 发表于 2025-4-28 14:40:43 | 显示全部楼层
\Cadence\SPB_17.4\share\pcb\examples\skill

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

本版积分规则

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

GMT+8, 2025-6-1 18:42 , Processed in 0.136659 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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