xieeyawen 发表于 2025-4-27 19:38:59

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

xieeyawen 发表于 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
)
)

xieeyawen 发表于 2025-4-27 19:41:02

第三种和第四种都是常规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
        )

xieeyawen 发表于 2025-4-27 19:41:39

常规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

xieeyawen 发表于 2025-4-27 20:03:45

好像附上的代码总有点问题,第一种方法,需要的下载这个构造热风焊盘的源代码

winskillabc 发表于 2025-4-28 08:38:46

感谢,学习一下,大佬问下,下拉式菜单,CASE要怎么写?

xieeyawen 发表于 2025-4-28 14:40:43

\Cadence\SPB_17.4\share\pcb\examples\skill

\Cadence\SPB_17.4\share\pcb\examples\form

xieeyawen 发表于 2025-6-5 13:54:01

1

xieeyawen 发表于 2025-6-13 16:22:44

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

xieeyawen 发表于 2025-6-19 17:06:26

1
页: [1]
查看完整版本: form的多种代码实现方式