form的多种代码实现方式
本帖最后由 xieeyawen 于 2025-5-22 11:27 编辑第一种方法是构建form函数
defun( caishenlaile3 ()
form_CAI = axlFormCreate( (gensym) CreatecaishenForm() '("C" "inner") '_CSLL_greeting t) ;创建窗口
axlFormColorize( form_CAI "color_a" 'text 'black) ;定义面板显示的文字颜色
axlFormColorize( form_CAI "color_b" 'text 'white)
axlFormColorize( form_CAI "color_c" 'text 'red)
axlFormColorize( form_CAI "color_d" 'background 'green)
axlFormColorize( form_CAI "color_e" 'background 'yellow)
axlFormColorize( form_CAI "color_f" 'text 'blue)
axlFormDisplay(form_CAI) ;显示窗口
)
defun( CreatecaishenForm ()
CSLL_FormFile=axlTempFile();临时文件夹
p = outfile(CSLL_FormFile "w");打开临时文件夹,打开临时port
caishenlailemain() ;调用财神主函数,获得函数里的变量值
f_FormBegin(p 110,90,"Cai Shen Lai Le" "TOOLWINDOW")
f_Bitmap(p "CSLL" "CSLL" 1 21 20 20)
f_Bitmap(p "CSLL_1" "CSLL" 85 21 20 20)
f_Bitmap(p "CSLL0" "CSLL0" 1 1 20 20)
f_Bitmap(p "CSLL1" "CSLL1" 24 1 20 20)
f_Bitmap(p "CSLL2" "CSLL2" 85 1 20 20)
f_Bitmap(p "CSLL3" "CSLL3" 1 43 20 20)
f_Bitmap(p "CSLL4" "CSLL4" 27 43 20 20)
f_Bitmap(p "CSLL5" "CSLL5" 46 43 20 20)
f_Bitmap(p "CSLL6" "CSLL6" 64 43 20 20)
f_Bitmap(p "CSLL7" "CSLL7" 85 43 20 20)
f_TextC(p greeting_Date "color_d" 40 20 30 4 "boldborder center")
f_TextC(p greeting1 "color_e" 40 26 30 4 "boldborder center")
f_TextC(p greeting_Time "color_f" 40 32 30 4 "boldborder center")
f_TextC(p greeting2 "color_c" 40 38 30 4 "bold underline border center")
;f_TextC(p greeting_Date "color_d" 40 20 30 4 "boldborder center")
;f_TextC(p greeting1 "color_e" 40 26 30 4 "boldborder center")
;f_TextC(p greeting_Time "color_f" 40 32 30 4 "boldborder center")
;f_TextC(p greeting2 "color_c" 40 38 30 4 "bold underline border center")
f_Button(p "WaBao","Wa_Bao",15,70,10,3)
f_Button(p "LaiCai","Lai_Cai",45,70,10,3)
f_Button(p "ByeBye","Bye_Bye",75,70,10,3)
f_FormEnd(p "EdgeGravityOne")
close(p)
CSLL_FormFile;不加这一句虽然form能建立,但是form运行不了,因为form是个临时文件,不是个form文件。必须要返回CSLL_FormFile值。
);func
;以下为构造的标准化form命令函数
;f_FormBegin(p w h title form_opt)TOOLWINDOW / AUTOGREYTEXT / FIXED_FONT / UNIXHGT
defun( f_FormBegin (p w h @optional (form_title "by RichardL.") (form_opt "AUTOGREYTEXT"))
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)
if(p fprintf(p,"%s",dest))
dest
)
;f_FormEnd(p flexmode) StandButtons / EdgeGravity / EdgeGravityOne
defun( f_FormEnd (p @optional flexmode)
if(flexmode sprintf(dest,"FLEXMODE %s\nENDTILE\nENDFORM\n",flexmode)
sprintf(dest,"ENDTILE\nENDFORM\n")
)
if(p fprintf(p,"%s",dest))
dest
)
;f_CheckList(field x y name group)
defun( f_CheckList (p field x y name @optional (group nil))
if(group==nil
sprintf(dest,"FIELD %s\nFLOC %d %d\nCHECKLIST \"%s\" \nENDFIELD\n\n",field,x,y,name)
sprintf(dest,"FIELD %s\nFLOC %d %d\nCHECKLIST \"%s\" \"%s\"\nENDFIELD\n\n",field,x,y,name,group)
)
if(p fprintf(p,"%s",dest))
dest
)
;f_Group(field x y w h)
defun( f_Group (p field x y w h)
sprintf(dest,"GROUP \"%s\"\nFLOC %d %d\nFSIZE %d %d\nENDGROUP\n\n",field,x,y,w,h)
if(p fprintf(p,"%s",dest))
dest
)
;f_Text(field text x y w h @optional opt)
defun( f_Text (p text x y w h @optional (opt nil))
if(opt==nil
sprintf(dest,"TEXT \"%s\"\nTLOC %d %d\nFSIZE %d %d\nENDTEXT\n\n",text,x,y,w,h)
sprintf(dest,"TEXT \"%s\"\nTLOC %d %d\nOPTIONS %s\nFSIZE %d %d\nENDTEXT\n\n",text,x,y,opt,w,h)
)
if(p fprintf(p,"%s",dest))
dest
)
;f_Text(field text color x y w h @optional opt)
defun( f_TextC (p text color x y w h @optional (opt nil))
if(opt==nil
sprintf(dest,"TEXT \"%s\" %s \nTLOC %d %d\nFSIZE %d %d\nENDTEXT\n\n",text,color,x,y,w,h)
sprintf(dest,"TEXT \"%s\" %s \nTLOC %d %d\nOPTIONS %s\nFSIZE %d %d\nENDTEXT\n\n",text,color,x,y,opt,w,h)
)
if(p fprintf(p,"%s",dest))
dest
)
;f_EditFloat(field x y iw dw dec) (iw-input width) (dw-data width)
defun( f_EditFloat (p field x y iw dw dec)
sprintf(dest,"FIELD %s\nFLOC %d %d\nREALFILLIN %d %d\nDECIMAL %d\nENDFIELD\n\n",field,x,y,iw,dw,dec)
if(p fprintf(p,"%s",dest))
dest
)
;f_Button(x y w h)
defun( f_Button (p field name x y w h) ;close done/ok cancel help print
sprintf(dest,"FIELD %s\nFLOC %d %d\nMENUBUTTON \"%s\" %d %d\nENDFIELD\n\n",field,x,y,name,w,h)
if(p fprintf(p,"%s",dest))
dest
)
;f_Bitmap(name x y w h @optional opt)
defun( f_Bitmap (p field name x y w h @optional (opt nil)) ;
if(opt==nil
sprintf(dest,"FIELD %s\nTHUMBNAIL %s\nFLOC %d %d\nFSIZE %d %d\nENDFIELD\n\n",field,name,x,y,w,h)
sprintf(dest,"FIELD %s\nTHUMBNAIL %s\nOPTIONS %s\nFLOC %d %d\nFSIZE %d %d\nENDFIELD\n\n",field,name,opt,x,y,w,h)
)
if(p fprintf(p,"%s",dest))
dest
)
;f_TreeView(field x y w h)
defun( f_TreeView (p field x y w h)
sprintf(dest,"FIELD %s\nFLOC %d %d\nTREEVIEW %d %d\nENDFIELD\n\n",field,x,y,w,h)
if(p fprintf(p,"%s",dest))
dest
)
defun(_CSLL_greeting (form_CAI)
case(form_CAI->curField
("WaBao" _WaBao());挖宝弹窗显示
("LaiCai" _laicai());来财弹窗显示
("ByeBye" axlFormClose(form_CAI));弹窗显示
);case
caishenlailemain ()
)
defun(_WaBao ()
let((Bao wabao)
(axlSetFindFilter ?enabled (list "noall" "invisible" "nets") ?onButtons (list "nets"))
l_greeting_nets=axlGetSelSet(axlAddSelectAll())
axlClearSelSet()
Bao=0
foreach(greeting_nets l_greeting_nets Bao=Bao+(greeting_nets~>unconnected))
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)
axlUIConfirm(wabao);弹窗显示
)
);defun
第二种方式直接调用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
)
)
第三种和第四种都是常规fprint直接构造法
本帖最后由 xieeyawen 于 2025-5-22 11:25 编辑p = outfile("./CSLL.form" "w")
sprintf(dest,
"
FILE_TYPE=FORM_DEFN VERSION=2\n
FORM TOOLWINDOW\n
FIXED\n
PORT 110 90\n
HEADER \"Cai Shen Lai Le\"\n
\n
TILE\n
FIELD CSLL\n
THUMBNAIL \"CSLL\"\n
FLOC 1 21\n
FSIZE 20 20\n
ENDFIELD\n
FIELD CSLL_1\n
THUMBNAIL \"CSLL\"\n
FLOC 85 21\n
FSIZE 20 20\n
ENDFIELD\n
FIELD CSLL0\n
THUMBNAIL \"CSLL0\"\n
FLOC 1 1\n
FSIZE 20 20\n
ENDFIELD\n
FIELD CSLL1\n
THUMBNAIL \"CSLL1\"\n
FLOC 24 1\n
FSIZE 58 20\n
ENDFIELD\n
FIELD CSLL2\n
THUMBNAIL \"CSLL2\"\n
FLOC 85 1\n
FSIZE 20 20\n
ENDFIELD\n
FIELD CSLL3\n
THUMBNAIL \"CSLL3\"\n
FLOC 1 43\n
FSIZE 20 20\n
ENDFIELD\n
FIELD CSLL4\n
THUMBNAIL \"CSLL4\"\n
FLOC 27 43\n
FSIZE 20 20\n
ENDFIELD\n
FIELD CSLL6\n
THUMBNAIL \"CSLL6\"\n
FLOC 46 43\n
FSIZE 20 20\n
ENDFIELD\n
FIELD CSLL5\n
THUMBNAIL \"CSLL5\"\n
FLOC 64 43\n
FSIZE 20 20\n
ENDFIELD\n
FIELD CSLL7\n
THUMBNAIL \"CSLL7\"\n
FLOC 85 43\n
FSIZE 20 20\n
ENDFIELD\n
TEXT \"%s\" color_d\n
TLOC40 20\n
OPTIONS boldborder center\n
FSIZE 30 4\n
ENDTEXT\n
\n
TEXT \"%s\" color_e\n
TLOC40 26\n
OPTIONS boldborder center\n
FSIZE 30 4\n
ENDTEXT\n
TEXT \"%s\" color_f\n
TLOC40 32\n
OPTIONS boldborder center\n
FSIZE 30 4\n
ENDTEXT\n
\n
TEXT \"%s\" color_c\n
TLOC40 38\n
OPTIONS bold underline border center\n
FSIZE 30 4\n
ENDTEXT\n
\n
FIELD WaBao\n
FLOC 15 70\n
MENUBUTTON \"Wa_Bao\" 10 3\n
ENDFIELD\n
FIELD LaiCai\n
FLOC 45 70\n
MENUBUTTON \"Lai_Cai\" 10 3\n
ENDFIELD\n
FIELD ByeBye\n
FLOC 75 70\n
MENUBUTTON \"Bye_Bye\" 10 3\n
ENDFIELD\n
FLEXMODE EdgeGravityOne\n
\n
ENDTILE\n
\n
ENDFORM\n
",greeting_Date,greeting1,greeting_Time,greeting2)
if(p fprintf(p,"%s",dest))
close(p) ;关闭p
form_CAI = axlFormCreate( (gensym) "CSLL.form" '("C" "inner") '_CSLL_greeting t) ;创建窗口,调用程序_CSLL_greeting
axlFormColorize( form_CAI "color_c" 'text 'red)
axlFormColorize( form_CAI "color_d" 'background 'green)
axlFormColorize( form_CAI "color_e" 'background 'yellow)
axlFormColorize( form_CAI "color_f" 'text 'blue)
axlFormDisplay(form_CAI) ;显示窗口
deleteFile("CSLL.form") ;删除面板文件
);end let
);defun
defun(_CSLL_greeting (form_CAI)
case(form_CAI->curField
("WaBao" _WaBao());挖宝弹窗显示
("LaiCai" _laicai());来财弹窗显示
("ByeBye" axlFormClose(form_CAI));弹窗显示
);case
)
常规fprintf
本帖最后由 xieeyawen 于 2025-5-22 11:24 编辑p = outfile("./CSLL.form");输出面板
fprintf( p "FILE_TYPE=FORM_DEFN VERSION=2\n") ;面板固定格式
fprintf( p "FORM TOOLWINDOW\n") ;面板固定格式
fprintf( p "FIXED\n") ;面板固定格式
fprintf( p "PORT 110 90\n") ;定义面板可视大小
fprintf( p "HEADER \"Cai Shen Lai Le\"\n") ;显示面板标题
fprintf( p "\n")
fprintf( p "TILE\n") ;面板固定格式
fprintf( p "FIELD CSLL\n")
fprintf( p "THUMBNAIL \"CSLL\"\n");显示图片
fprintf( p "FLOC 1 21\n") ;图片位置
fprintf( p "FSIZE 20 20\n");图片长度和宽度
fprintf( p "ENDFIELD\n")
fprintf( p "FIELD CSLL_1\n")
fprintf( p "THUMBNAIL \"CSLL\"\n") ;显示图片
fprintf( p "FLOC 85 21\n");图片位置
fprintf( p "FSIZE 20 20\n");图片长度和宽度
fprintf( p "ENDFIELD\n")
fprintf( p "FIELD CSLL0\n")
fprintf( p "THUMBNAIL \"CSLL0\"\n") ;显示图片
fprintf( p "FLOC 1 1\n");图片位置
fprintf( p "FSIZE 20 20\n");图片长度和宽度
fprintf( p "ENDFIELD\n")
fprintf( p "FIELD CSLL1\n")
fprintf( p "THUMBNAIL \"CSLL1\"\n") ;显示图片
fprintf( p "FLOC 24 1\n");图片位置
fprintf( p "FSIZE 58 20\n");图片长度和宽度
fprintf( p "ENDFIELD\n")
fprintf( p "FIELD CSLL2\n")
fprintf( p "THUMBNAIL \"CSLL2\"\n") ;显示图片
fprintf( p "FLOC 85 1\n");图片位置
fprintf( p "FSIZE 20 20\n");图片长度和宽度
fprintf( p "ENDFIELD\n")
fprintf( p "FIELD CSLL3\n")
fprintf( p "THUMBNAIL \"CSLL3\"\n") ;显示图片
fprintf( p "FLOC 1 43\n");图片位置
fprintf( p "FSIZE 20 20\n");图片长度和宽度
fprintf( p "ENDFIELD\n")
fprintf( p "FIELD CSLL4\n")
fprintf( p "THUMBNAIL \"CSLL4\"\n") ;显示图片
fprintf( p "FLOC 27 43\n");图片位置
fprintf( p "FSIZE 20 20\n");图片长度和宽度
fprintf( p "ENDFIELD\n")
fprintf( p "FIELD CSLL6\n")
fprintf( p "THUMBNAIL \"CSLL6\"\n") ;显示图片
fprintf( p "FLOC 46 43\n");图片位置
fprintf( p "FSIZE 20 20\n");图片长度和宽度
fprintf( p "ENDFIELD\n")
fprintf( p "FIELD CSLL5\n")
fprintf( p "THUMBNAIL \"CSLL5\"\n") ;显示图片
fprintf( p "FLOC 64 43\n");图片位置
fprintf( p "FSIZE 20 20\n");图片长度和宽度
fprintf( p "ENDFIELD\n")
fprintf( p "FIELD CSLL7\n")
fprintf( p "THUMBNAIL \"CSLL7\"\n") ;显示图片
fprintf( p "FLOC 85 43\n");图片位置
fprintf( p "FSIZE 20 20\n");图片长度和宽度
fprintf( p "ENDFIELD\n")
sprintf( dest1,"TEXT \"%s\" color_d \nTLOC40 20\nOPTIONS boldborder center\nFSIZE 30 4\nENDTEXT\n\n",greeting_Date)
;OPTIONS bold underline border center依次是让text的文字加粗、边框、居中
fprintf( p,"%s",dest1)
sprintf( dest2,"TEXT \"%s\" color_e \nTLOC40 26\nOPTIONS boldborder center\nFSIZE 30 4\nENDTEXT\n\n",greeting1)
;OPTIONS bold underline border center依次是让text的文字加粗、边框、居中
fprintf( p,"%s",dest2)
sprintf( dest3,"TEXT \"%s\" color_f \nTLOC40 32\nOPTIONS boldborder center\nFSIZE 30 4\nENDTEXT\n\n",greeting_Time)
;OPTIONS bold underline border center依次是让text的文字加粗、边框、居中
fprintf( p,"%s",dest3)
sprintf( dest4,"TEXT \"%s\" color_c \nTLOC40 38\nOPTIONS bold underline border center\nFSIZE 30 4\nENDTEXT\n\n",greeting2)
;OPTIONS bold underline border center依次是让text的文字加粗、下划线、边框、居中
fprintf( p,"%s",dest4)
fprintf( p "FIELD WaBao\n") ;挖宝按钮
fprintf( p "FLOC 15 70\n")
fprintf( p "MENUBUTTON \"Wa_Bao\" 10 3\n");显示Check 并定义按钮的长度和宽度
fprintf( p "ENDFIELD\n")
fprintf( p "FIELD LaiCai\n") ;来财按钮
fprintf( p "FLOC 45 70\n")
fprintf( p "MENUBUTTON \"Lai_Cai\" 10 3\n");显示Check 并定义按钮的长度和宽度
fprintf( p "ENDFIELD\n")
fprintf( p "FIELD ByeBye\n") ;退出按钮
fprintf( p "FLOC 75 70\n")
fprintf( p "MENUBUTTON \"Bye_Bye\" 10 3\n");显示Exit
fprintf( p "ENDFIELD\n")
fprintf( p "FLEXMODE EdgeGravityOne\n");EdgeGravity,EdgeGravityOne,StandButtons共三种模式,可以任意调整form的尺寸
fprintf( p "\n")
fprintf( p "ENDTILE\n") ;结束TILE
fprintf( p "\n")
fprintf( p "ENDFORM\n");结束FORM
close(p) ;关闭p
form_CAI = axlFormCreate( (gensym) "CSLL.form" '("C" "inner") '_CSLL_greeting t) ;创建窗口,调用程序_CSLL_greeting
;axlFormColorize( form_CAI "color_a" 'text 'black) ;定义面板显示的文字颜色
;axlFormColorize( form_CAI "color_b" 'text 'white)
axlFormColorize( form_CAI "color_c" 'text 'red)
axlFormColorize( form_CAI "color_d" 'background 'green)
axlFormColorize( form_CAI "color_e" 'background 'yellow)
axlFormColorize( form_CAI "color_f" 'text 'blue)
;axlFormColorize( form_CAI "color_g" 'background 'button);button-grey
axlFormDisplay(form_CAI) ;显示窗口
deleteFile("CSLL.form") ;删除面板文件
);end let
);defun
好像附上的代码总有点问题,第一种方法,需要的下载这个构造热风焊盘的源代码
感谢,学习一下,大佬问下,下拉式菜单,CASE要怎么写? \Cadence\SPB_17.4\share\pcb\examples\skill
\Cadence\SPB_17.4\share\pcb\examples\form 1 xieeyawen 发表于 2025-4-28 14:40
\Cadence\SPB_17.4\share\pcb\examples\skill
\Cadence\SPB_17.4\share\pcb\examples\form
D:\Cadence\SPB_17.4\share\pcb\examples\skill\form 1
页:
[1]