EDA365电子工程师网

标题: 【分享源代碼】建立動態選單/添加自定义菜单 [打印本页]

作者: XYX365    时间: 2016-1-25 11:09
标题: 【分享源代碼】建立動態選單/添加自定义菜单
本帖最后由 XYX365 于 2016-1-25 13:42 编辑

如何把自己的菜单插入到allegro menu,使用動態選單

;filename:fDynamicMenus.il
;此程式只適用於Allegro v16.3以上
;必須直接加載到allegro.ilinit檔裡面,不能在其他地方載入此程式
;此程式可以設計成中英文語言的選單


; Load: load("fDynamicMenus.il")
;附件程式不包含選單上的任一程式工具

[attach]107797[/attach]

[attach]107795[/attach]

[hide=d180]
  1. ;filename:fDynamicMenus.il
  2. ;此程式只適用於Allegro v16.3以上
  3. ;必須直接加載到allegro.ilinit檔裡面,不能在其他地方載入此程式
  4. ;此程式可以設計成中英文語言的選單

  5. ; Load: load("fDynamicMenus.il")

  6. setShellEnvVar("LANG=ENG") ;強制設定為英文選單
  7. case(getShellEnvVar("LANG")
  8.         ("GB"
  9.                 ;這裡是擺放簡體中文位置,沒有完成,必須自行建立
  10.                 lSkillMenu = '(
  11.                         (popup "EDA365 Skill for Test") ;主選單上的名稱
  12.                                 ("Chinese Transfer" "(fnChineseTransform)") ;第一個字串是顯示在選單上,第二個字串是執行命令
  13.                                 ("Quick Open" "filemgr") ;程式選單項目
  14.                                 (separator) ;區格線
  15.                                 ("Netin,3rd Party" "netin3rd_protel")
  16.                                 ("Compare Net_Changes" "gnetrpt")
  17.                                 ("Compare BRD_Changes" "component_changes")
  18.                                 ("Clear Layout TempFile" "tmpdel")
  19.                                 ("Check Height" "heightchk")
  20.                                 ("Hilight TestPoint Net" "hlnpt")
  21.                                 ("Set_drillkey" "setdrill")
  22.                                 ("Set Design Color" "s1")
  23.                                 ("Show Height/width" "draw targets")
  24.                                 ("Add Layer" "addlayer")
  25.                                 ("Calc Trace Width" "twcal")
  26.                                 ("Calc Via Quantity" "viacal")
  27.                                 ("Cut Line" "clinecut")
  28.                                 ("Cut Shape" "cutshape")
  29.                                 ("Check width" "chgew")
  30.                                 ("Etch Cross Check" "ecp")
  31.                                 (popup "Text Function") ;子選單名稱
  32.                                         ("Edit TextBlock" "settxtpw")
  33.                                         ("SilkScreen Export/inport" "text_out_in")
  34.                                         ("Move Text2Center" "r2c")
  35.                                         ("Check_NoRefdes" "ch_noref")
  36.                                         ("Check_refdes_direction" "ch_dir")
  37.                                         ("Check_text_grap" "ch_text_overlap")
  38.                                 (end)
  39.                                 (popup "SplitPlane")
  40.                                         ("SplitPlane_CreateLayers" "SplitPlane_CreateLayers")
  41.                                         ("SplitPlane_CreateShapes" "SplitPlane_CreateShapes")
  42.                                 (end)
  43.                                 (popup "DataBase Check")
  44.                                         ("DataBase &Check..." "dbdoctor")
  45.                                         ("DANGLING CHECK" "dangling")
  46.                                         ("DumpVia CHECK" "check_dvia")
  47.                                 (end)
  48.                                 (popup "TAPEOUT")
  49.                                         ("Artwork..." "artwork")
  50.                                         (separator)
  51.                                         (popup "AUTO DRILL")
  52.                                                 ("SET NCcustom" "setnccus")
  53.                                                 ("Drill Legend" "nclegend")
  54.                                                 ("Drill Route" "ncdr")
  55.                                         (end)
  56.                                         ("Setting FilmControl" "efilm")
  57.                                         ("Auto CreateArtWork" "ns_gerber")
  58.                                         ("Output GFile" "outfilm")
  59.                                         ("draw pin hole" "draw pin hole")
  60.                                         ("Ouput DXF/RefPdf/IPC356" "odxf")
  61.                                         ("Ouput SymLoc" "inform")
  62.                                         (popup "Sort Output File")
  63.                                                 ("Move Gfile" "sortgfile")
  64.                                                 ("Zip Gerber" "gzip")
  65.                                         (end)
  66.                                 (end)
  67.                                 ("Export CAD" "cadout")
  68.                                 (separator)
  69.                                 (popup "[ System Tools ]")
  70.                                         ("[ Snap Screen ]" "system snippingtool")
  71.                                         ("[ Run Notepad ]" "system notepad")
  72.                                         ("[ Run Calculator ]" "system calc")
  73.                                         ("[ Run Paint ]" "system mspaint")
  74.                                         ("[ Run CMD ]" "system")
  75.                                 (end)
  76.                 (end)
  77.                 )
  78.         )
  79.         ("BIG5"
  80.                 ;這裡是擺放繁體中文位置,沒有完成,必須自行建立
  81.                 lSkillMenu = '(
  82.                         (popup "EDA365 Skill for Test") ;主選單上的名稱
  83.                                 ;第一個字串是顯示在選單上,第二個字串是執行命令
  84.                                 ("\244\244\244\345" "(fnChineseTransform)") ;中文碼轉八進位的ASCII碼
  85.                                 ("Quick Open" "filemgr") ;程式選單項目
  86.                                 (separator) ;區格線
  87.                                 ("Netin,3rd Party" "netin3rd_protel")
  88.                                 ("Compare Net_Changes" "gnetrpt")
  89.                                 ("Compare BRD_Changes" "component_changes")
  90.                                 ("Clear Layout TempFile" "tmpdel")
  91.                                 ("Check Height" "heightchk")
  92.                                 ("Hilight TestPoint Net" "hlnpt")
  93.                                 ("Set_drillkey" "setdrill")
  94.                                 ("Set Design Color" "s1")
  95.                                 ("Show Height/width" "draw targets")
  96.                                 ("Add Layer" "addlayer")
  97.                                 ("Calc Trace Width" "twcal")
  98.                                 ("Calc Via Quantity" "viacal")
  99.                                 ("Cut Line" "clinecut")
  100.                                 ("Cut Shape" "cutshape")
  101.                                 ("Check width" "chgew")
  102.                                 ("Etch Cross Check" "ecp")
  103.                                 (popup "Text Function") ;子選單名稱
  104.                                         ("Edit TextBlock" "settxtpw")
  105.                                         ("SilkScreen Export/inport" "text_out_in")
  106.                                         ("Move Text2Center" "r2c")
  107.                                         ("Check_NoRefdes" "ch_noref")
  108.                                         ("Check_refdes_direction" "ch_dir")
  109.                                         ("Check_text_grap" "ch_text_overlap")
  110.                                 (end)
  111.                                 (popup "SplitPlane")
  112.                                         ("SplitPlane_CreateLayers" "SplitPlane_CreateLayers")
  113.                                         ("SplitPlane_CreateShapes" "SplitPlane_CreateShapes")
  114.                                 (end)
  115.                                 (popup "DataBase Check")
  116.                                         ("DataBase &Check..." "dbdoctor")
  117.                                         ("DANGLING CHECK" "dangling")
  118.                                         ("DumpVia CHECK" "check_dvia")
  119.                                 (end)
  120.                                 (popup "TAPEOUT")
  121.                                         ("Artwork..." "artwork")
  122.                                         (separator)
  123.                                         (popup "AUTO DRILL")
  124.                                                 ("SET NCcustom" "setnccus")
  125.                                                 ("Drill Legend" "nclegend")
  126.                                                 ("Drill Route" "ncdr")
  127.                                         (end)
  128.                                         ("Setting FilmControl" "efilm")
  129.                                         ("Auto CreateArtWork" "ns_gerber")
  130.                                         ("Output GFile" "outfilm")
  131.                                         ("draw pin hole" "draw pin hole")
  132.                                         ("Ouput DXF/RefPdf/IPC356" "odxf")
  133.                                         ("Ouput SymLoc" "inform")
  134.                                         (popup "Sort Output File")
  135.                                                 ("Move Gfile" "sortgfile")
  136.                                                 ("Zip Gerber" "gzip")
  137.                                         (end)
  138.                                 (end)
  139.                                 ("Export CAD" "cadout")
  140.                                 (separator)
  141.                                 (popup "[ System Tools ]")
  142.                                         ("[ Snap Screen ]" "system snippingtool")
  143.                                         ("[ Run Notepad ]" "system notepad")
  144.                                         ("[ Run Calculator ]" "system calc")
  145.                                         ("[ Run Paint ]" "system mspaint")
  146.                                         ("[ Run CMD ]" "system")
  147.                                 (end)
  148.                 (end)
  149.                 )
  150.         )
  151.         (t
  152.                 ;這裡是擺放英文位置
  153.                 lSkillMenu = '(
  154.                         (popup "EDA365 Skill for Test") ;主選單上的名稱
  155.                                 ("Chinese Transfer" "(fnChineseTransform)") ;第一個字串是顯示在選單上,第二個字串是執行命令
  156.                                 ("Quick Open" "filemgr") ;程式選單項目
  157.                                 (separator) ;區格線
  158.                                 ("Netin,3rd Party" "netin3rd_protel")
  159.                                 ("Compare Net_Changes" "gnetrpt")
  160.                                 ("Compare BRD_Changes" "component_changes")
  161.                                 ("Clear Layout TempFile" "tmpdel")
  162.                                 ("Check Height" "heightchk")
  163.                                 ("Hilight TestPoint Net" "hlnpt")
  164.                                 ("Set_drillkey" "setdrill")
  165.                                 ("Set Design Color" "s1")
  166.                                 ("Show Height/width" "draw targets")
  167.                                 ("Add Layer" "addlayer")
  168.                                 ("Calc Trace Width" "twcal")
  169.                                 ("Calc Via Quantity" "viacal")
  170.                                 ("Cut Line" "clinecut")
  171.                                 ("Cut Shape" "cutshape")
  172.                                 ("Check width" "chgew")
  173.                                 ("Etch Cross Check" "ecp")
  174.                                 (popup "Text Function") ;子選單名稱
  175.                                         ("Edit TextBlock" "settxtpw")
  176.                                         ("SilkScreen Export/inport" "text_out_in")
  177.                                         ("Move Text2Center" "r2c")
  178.                                         ("Check_NoRefdes" "ch_noref")
  179.                                         ("Check_refdes_direction" "ch_dir")
  180.                                         ("Check_text_grap" "ch_text_overlap")
  181.                                 (end)
  182.                                 (popup "SplitPlane")
  183.                                         ("SplitPlane_CreateLayers" "SplitPlane_CreateLayers")
  184.                                         ("SplitPlane_CreateShapes" "SplitPlane_CreateShapes")
  185.                                 (end)
  186.                                 (popup "DataBase Check")
  187.                                         ("DataBase &Check..." "dbdoctor")
  188.                                         ("DANGLING CHECK" "dangling")
  189.                                         ("DumpVia CHECK" "check_dvia")
  190.                                 (end)
  191.                                 (popup "TAPEOUT")
  192.                                         ("Artwork..." "artwork")
  193.                                         (separator)
  194.                                         (popup "AUTO DRILL")
  195.                                                 ("SET NCcustom" "setnccus")
  196.                                                 ("Drill Legend" "nclegend")
  197.                                                 ("Drill Route" "ncdr")
  198.                                         (end)
  199.                                         ("Setting FilmControl" "efilm")
  200.                                         ("Auto CreateArtWork" "ns_gerber")
  201.                                         ("Output GFile" "outfilm")
  202.                                         ("draw pin hole" "draw pin hole")
  203.                                         ("Ouput DXF/RefPdf/IPC356" "odxf")
  204.                                         ("Ouput SymLoc" "inform")
  205.                                         (popup "Sort Output File")
  206.                                                 ("Move Gfile" "sortgfile")
  207.                                                 ("Zip Gerber" "gzip")
  208.                                         (end)
  209.                                 (end)
  210.                                 ("Export CAD" "cadout")
  211.                                 (separator)
  212.                                 (popup "[ System Tools ]")
  213.                                         ("[ Snap Screen ]" "system snippingtool")
  214.                                         ("[ Run Notepad ]" "system notepad")
  215.                                         ("[ Run Calculator ]" "system calc")
  216.                                         ("[ Run Paint ]" "system mspaint")
  217.                                         ("[ Run CMD ]" "system")
  218.                                 (end)
  219.                 (end)
  220.                 )
  221.         )
  222. )
  223. procedure(fnDynamicMenusTrig(tMenuFile)
  224.         let((xMenuID)
  225.                 when(tMenuFile == "allegro" ;只判斷第一次載入及執行,如果沒有此判斷的話,有其他程式也是使用動態選單時,就會再加載一次
  226.                         xMenuID = axlUIMenuFind(nil -1)
  227.                         axlUIMenuInsert(xMenuID lSkillMenu)
  228.                 )
  229.         )
  230. )
  231. procedure(fnChineseTransform() ;中文碼轉八進位的ASCII碼函數
  232.         axlUIPrompt("Code:",sprintf(nil,"%L",axlUIPrompt("Please Input Chinese:")))
  233. )
  234. ; Using the trigger function directly
  235. axlTriggerSet('menu  'fnDynamicMenusTrig)
复制代码

[/hide]


作者: kevin890505    时间: 2016-1-25 11:19
不错的功能
作者: penny190    时间: 2016-1-25 11:33
看看先
謝謝大大的分享喔

作者: 361553894    时间: 2016-1-28 08:54
16版本用axlUIMenuInsert插入动态菜单
15版本可以用axlUIMenuDump和axlUIMenuLoad插入
不过不适用于中文

作者: 361553894    时间: 2016-1-28 08:57
本帖最后由 361553894 于 2016-1-28 09:01 编辑

大大帮我看下这段代码什么作用
这是上个大神写的插入动态菜单的Skill
每次开启软件,菜单都会刷新好几次,刷新过程中操作软件就很容易崩溃



作者: XYX365    时间: 2016-1-28 09:39
361553894 发表于 2016-1-28 08:57
大大帮我看下这段代码什么作用
这是上个大神写的插入动态菜单的Skill
每次开启软件,菜单都会刷新好几次 ...

我先確認看看
作者: bashao    时间: 2016-1-28 09:57
看看这个功能
作者: XYX365    时间: 2016-1-28 10:19
361553894 发表于 2016-1-28 08:57
大大帮我看下这段代码什么作用
这是上个大神写的插入动态菜单的Skill
每次开启软件,菜单都会刷新好几次 ...

可否給完整的代碼?
作者: 武紫旭    时间: 2016-1-28 11:15
不错的功能

作者: 361553894    时间: 2016-1-28 13:14
XYX365 发表于 2016-1-28 10:19
可否給完整的代碼?

15版本的菜单插入就不提供了
作者: XYX365    时间: 2016-1-28 18:47
361553894 发表于 2016-1-28 13:14
15版本的菜单插入就不提供了

再確認一下,你的程式功能,
1.在Allegro.ilinit裡面加載 SkillMenu.il
2.開啟Allegro.exe
3.執行sm
4.這時候就加載你所設定的Menu(m1~m7),之後會重覆加載好幾次

這是因為下面的判斷問題
when(g_SkillMenuTimerNum>1
        if(isCallable('axlUIMenuFind) then
                if(axlUIMenuFind(nil,"wxGrids") then
                        axlUIWTimerRemove(g_SkillMenuTimerId)
                        g_SkillMenuTimerId='unbound
                        g_SkillMenuTimerNum='unbound
                        return(t);
                );if
        );if
);when


你的程式工作流程應該是這樣
1.執行sm後,
2.執行下列
     g_SkillMenuTimerId=nil
     g_SkillMenuTimerNum=0
     g_SkillMenuTimerId=axlUIWTimerAdd(nil,2000,nil,'wxSkillMenu_TimerCallBack)

3.時間等待2000後再執行wxSkillMenu()函數,
4.這時候就執行下面並執行好幾次
when(g_SkillMenuTimerNum>1
        if(isCallable('axlUIMenuFind) then
                if(axlUIMenuFind(nil,"wxGrids") then
                        axlUIWTimerRemove(g_SkillMenuTimerId)
                        g_SkillMenuTimerId='unbound
                        g_SkillMenuTimerNum='unbound
                        return(t);
                );if
        );if
);when


如果你只要加載一次的話,你修改成下面試試看,只留紅字部分
       if(boundp('g_SkillMenuTimerId) && boundp('g_SkillMenuTimerNum) then
                ;if(g_SkillMenuTimerNum>5 then
                ;        axlUIWTimerRemove(g_SkillMenuTimerId)
                ;        g_SkillMenuTimerId='unbound
                ;        g_SkillMenuTimerNum='unbound
                ;else
                ;        g_SkillMenuTimerNum++
                ;);if
                ;when(g_SkillMenuTimerNum>1
                ;        if(isCallable('axlUIMenuFind) then
                ;                if(axlUIMenuFind(nil,"wxGrids") then
                                        axlUIWTimerRemove(g_SkillMenuTimerId)
                                                g_SkillMenuTimerId='unbound
                                        g_SkillMenuTimerNum='unbound
                                        return(t);
                ;                );if
                ;        );if
                ;);when
        else

                g_SkillMenuTimerId=nil
                g_SkillMenuTimerNum=0
                g_SkillMenuTimerId=axlUIWTimerAdd(nil,2000,nil,'wxSkillMenu_TimerCallBack)
        );if


作者: XYX365    时间: 2016-1-28 19:02
361553894 发表于 2016-1-28 13:14
15版本的菜单插入就不提供了

其實不用加入你貼的程式,也可以加載一次,就不會重覆好幾次,我猜原始作者應該有遇到過加載第一次失敗的問題

作者: 361553894    时间: 2016-1-29 08:41
XYX365 发表于 2016-1-28 19:02
其實不用加入你貼的程式,也可以加載一次,就不會重覆好幾次,我猜原始作者應該有遇到過加載第一次失敗的問 ...

我之前有试过,只加载一次,发现会被刷掉,估计他其他的函数跟菜单加载有冲突
他这个目的是不是隔两秒检查一次菜单有没有存在,如果存在就跳出,否则就重新加载

作者: 361553894    时间: 2016-1-29 09:01
XYX365 发表于 2016-1-28 18:47
再確認一下,你的程式功能,
1.在Allegro.ilinit裡面加載 SkillMenu.il
2.開啟Allegro.exe

试过了,加载不上,不知道哪个函数把加载上的菜单又清空了
估计他某个启动执行的函数有
axlUIMenuLoad(nil)这个指令

作者: XYX365    时间: 2016-1-29 09:06
361553894 发表于 2016-1-29 08:41
我之前有试过,只加载一次,发现会被刷掉,估计他其他的函数跟菜单加载有冲突
他这个目的是不是隔两秒检 ...

你是不是有加載EDA365 skill?

作者: 361553894    时间: 2016-1-29 09:19
XYX365 发表于 2016-1-28 19:02
其實不用加入你貼的程式,也可以加載一次,就不會重覆好幾次,我猜原始作者應該有遇到過加載第一次失敗的問 ...

Skill > axlTriggerPrint
E- *Error* skillDev not enabled.
E-
ERROR
Skill > axlTriggerPrint()
E- *Error* skillDev not enabled.
E-
ERROR
Skill >
这个是什么原因呢?

作者: 361553894    时间: 2016-1-29 09:19
XYX365 发表于 2016-1-29 09:06
你是不是有加載EDA365 skill?

没有,所有加载的菜单都在这了
作者: XYX365    时间: 2016-1-29 09:22
361553894 发表于 2016-1-29 09:19
Skill > axlTriggerPrint
E- *Error* skillDev not enabled.
E-

問題是你使用破解的Allegro.exe的原因
作者: XYX365    时间: 2016-1-29 09:25
361553894 发表于 2016-1-29 09:01
试过了,加载不上,不知道哪个函数把加载上的菜单又清空了
估计他某个启动执行的函数有
axlUIMenuLoad( ...

你可以試試看,只加載skillMenu.il,並多執行幾次試試看,原因有可以其他函數使用到axlUIWTimerAdd

作者: mmyutian    时间: 2016-1-29 09:49
謝謝樓主分享

作者: kinglangji    时间: 2016-1-29 10:00
支持  学习~~
作者: nanosoc    时间: 2016-1-29 22:05
谢谢分享
作者: 卫冬冬    时间: 2016-2-9 15:31
学习学习 了解了解


作者: shihongjing    时间: 2016-2-16 15:16
正需要这个东西呢,谢谢。


作者: shihongjing    时间: 2016-2-16 15:25
请问一下怎么才能让菜单出来,我加载了没有反应,command里显示
loading axlcore.cxt   
t
作者: JIMDENG    时间: 2016-2-17 16:06
学习一下!

作者: shihongjing    时间: 2016-2-19 10:00
请问一下怎么才能让菜单出来,我加载了没有反应,command里显示 loading axlcore.cxt    t
作者: XYX365    时间: 2016-2-19 11:17
shihongjing 发表于 2016-2-19 10:00
请问一下怎么才能让菜单出来,我加载了没有反应,command里显示 loading axlcore.cxt    t

你直接將此行 load("fDynamicMenus.il") 加入到allegro.ilinit,然後開啟allegro.exe就會自動加載

作者: yaoshasha    时间: 2016-2-19 14:44
谢谢分享

作者: TobyTao_Zhang    时间: 2016-2-19 16:09
謝謝大大的分享,
学习一下!
作者: mistletoe    时间: 2016-2-22 14:08
非常不错,download 学习下

作者: hy20060614    时间: 2016-11-11 15:01
谢谢分享
作者: mentorkk    时间: 2016-11-13 13:47
謝謝樓主分享
作者: hyper311    时间: 2017-8-27 17:04
好强大
作者: 蓝色的天口    时间: 2017-8-28 16:14
太难了,看不懂 如有 有大神录视频就好了




欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/) Powered by Discuz! X3.2