找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 1851|回复: 34
打印 上一主题 下一主题

【分享源代碼】建立動態選單/添加自定义菜单

  [复制链接]

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
跳转到指定楼层
1#
发表于 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")
;附件程式不包含選單上的任一程式工具






  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)
复制代码



本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏7 支持!支持!1 反对!反对!

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
推荐
 楼主| 发表于 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

点评

试过了,加载不上,不知道哪个函数把加载上的菜单又清空了 估计他某个启动执行的函数有 axlUIMenuLoad(nil)这个指令  详情 回复 发表于 2016-1-29 09:01

102

主题

377

帖子

1158

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1158
推荐
发表于 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 >
这个是什么原因呢?

点评

問題是你使用破解的Allegro.exe的原因  详情 回复 发表于 2016-1-29 09:22

102

主题

377

帖子

1158

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

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

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

点评

你是不是有加載EDA365 skill?  详情 回复 发表于 2016-1-29 09:06

24

主题

1796

帖子

8046

积分

六级会员(60)

Rank: 6Rank: 6

积分
8046
2#
发表于 2016-1-25 11:19 | 只看该作者
不错的功能

116

主题

960

帖子

5983

积分

五级会员(50)

Rank: 5

积分
5983
3#
发表于 2016-1-25 11:33 | 只看该作者
看看先
謝謝大大的分享喔

102

主题

377

帖子

1158

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1158
4#
发表于 2016-1-28 08:54 | 只看该作者
16版本用axlUIMenuInsert插入动态菜单
15版本可以用axlUIMenuDump和axlUIMenuLoad插入
不过不适用于中文

102

主题

377

帖子

1158

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1158
5#
发表于 2016-1-28 08:57 | 只看该作者
本帖最后由 361553894 于 2016-1-28 09:01 编辑

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


本帖子中包含更多资源

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

x

点评

可否給完整的代碼?  详情 回复 发表于 2016-1-28 10:19
我先確認看看  详情 回复 发表于 2016-1-28 09:39

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

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

我先確認看看

3

主题

230

帖子

477

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
477
7#
发表于 2016-1-28 09:57 | 只看该作者
看看这个功能

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
8#
 楼主| 发表于 2016-1-28 10:19 | 只看该作者
361553894 发表于 2016-1-28 08:57
大大帮我看下这段代码什么作用
这是上个大神写的插入动态菜单的Skill
每次开启软件,菜单都会刷新好几次 ...

可否給完整的代碼?

点评

15版本的菜单插入就不提供了  详情 回复 发表于 2016-1-28 13:14

15

主题

346

帖子

3486

积分

五级会员(50)

Rank: 5

积分
3486
9#
发表于 2016-1-28 11:15 | 只看该作者
不错的功能
skype:i_woods@hotmail.com

102

主题

377

帖子

1158

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1158
10#
发表于 2016-1-28 13:14 | 只看该作者
XYX365 发表于 2016-1-28 10:19
可否給完整的代碼?

15版本的菜单插入就不提供了

本帖子中包含更多资源

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

x

点评

其實不用加入你貼的程式,也可以加載一次,就不會重覆好幾次,我猜原始作者應該有遇到過加載第一次失敗的問題  详情 回复 发表于 2016-1-28 19:02
再確認一下,你的程式功能, 1.在Allegro.ilinit裡面加載 SkillMenu.il 2.開啟Allegro.exe 3.執行sm 4.這時候就加載你所設定的Menu(m1~m7),之後會重覆加載好幾次 這是因為下面的判斷問題 when(g_SkillMenuTime  详情 回复 发表于 2016-1-28 18:47

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

积分
7919
12#
 楼主| 发表于 2016-1-28 19:02 | 只看该作者
361553894 发表于 2016-1-28 13:14
15版本的菜单插入就不提供了

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

点评

Skill > axlTriggerPrint E- *Error* skillDev not enabled. E- ERROR Skill > axlTriggerPrint() E- *Error* skillDev not enabled. E- ERROR Skill > 这个是什么原因呢?  详情 回复 发表于 2016-1-29 09:19
我之前有试过,只加载一次,发现会被刷掉,估计他其他的函数跟菜单加载有冲突 他这个目的是不是隔两秒检查一次菜单有没有存在,如果存在就跳出,否则就重新加载  详情 回复 发表于 2016-1-29 08:41

102

主题

377

帖子

1158

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1158
14#
发表于 2016-1-29 09:01 | 只看该作者
XYX365 发表于 2016-1-28 18:47
再確認一下,你的程式功能,
1.在Allegro.ilinit裡面加載 SkillMenu.il
2.開啟Allegro.exe

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

点评

你可以試試看,只加載skillMenu.il,並多執行幾次試試看,原因有可以其他函數使用到axlUIWTimerAdd  详情 回复 发表于 2016-1-29 09:25

57

主题

1857

帖子

7919

积分

六级会员(60)

Rank: 6Rank: 6

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

你是不是有加載EDA365 skill?

点评

没有,所有加载的菜单都在这了  详情 回复 发表于 2016-1-29 09:19
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-25 10:51 , Processed in 0.075432 second(s), 37 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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