EDA365电子工程师网

标题: 『原创』关于加载菜单的几种方式——请@deargds帮忙审核下 [打印本页]

作者: whh5118    时间: 2013-7-21 15:11
标题: 『原创』关于加载菜单的几种方式——请@deargds帮忙审核下
本帖最后由 whh5118 于 2013-7-21 15:11 编辑

实现目标:在help后面添加一个菜单,放自己的函数。
实现方式:帖子所述
目前进程:完成1,2。3,4调试不出。

SKILL看了一些关于加载自己菜单的方式,这里总结下思路:(我用的是16.3)
方式一:在.men文件下手动进行修改。
    这个群里有很多,本人已验证,这里略。
方式二:通过axlUIMenuDump() axlUIMenuLoad()加载
    这种方式是将当前的菜单通过axlUIMenuDump()函数读取,存放在一个临时文件中,文件操作,将自己的菜单添加到这个临时文件中,然后通过axlUIMenuLoad()函数,加载这个临时文件。
    这种方式其实感觉更第一种方式差不多。本人已验证,可行。
方式三:通过axlUIMenuFind()axlUIMenuInsert()加载
    这种方式通过axlUIMenuFind找到自己想要添加的菜单位置,axlUIMenuInsert()添加菜单。
    我暂时出不来,不知道哪里出问题
方式四:通过axlUIMenuRegister()加载
    这种方式通过axlUIMenuRegister()直接进行添加。
    我暂时出不来,不知道哪里出问题


@deargds版主帮我看下,这个思路是不是对的?


调试进程描述:方式三与方式四都是编译成功的,但是执行就是挑不出菜单,@deargds版主能帮我找下原因吗?
menu.il文件我都看了,就是出不来。

方式三代码:
SKILLToolsMenu = '(
     (popup "SKILL Tools")
     ("test"                        "TEST")
)
defun(MikecMenuTrig ()
        let( (q)
        q = axlUIMenuFind(nil -1)
        res = axlUIMenuInsert(q SKILLToolsMenu)
        )
)
axlTriggerSet('menu  'MikecMenuTrig)

方式四代码:
defun(MikecMenuTrig ()
        let( (q)
        q = axlUIMenuRegister( -1 SKILLToolsMenu )
        )
)

作者: whh5118    时间: 2013-7-21 15:12
沙发自己的。。。
作者: XYX365    时间: 2013-7-22 08:16
本帖最后由 XYX365 于 2013-7-26 16:02 编辑

方法三必須直接將menu.il加載到allegro.ilinit裡面,重新開起allegro就會有你加入的menu選項

方法四改用下列完整的代碼,再直接加載到allegro.ilinit裡面,重新開起allegro就會有你加入的menu選項
  1. SKILLToolsMenu = '(
  2.      (popup "SKILL Tools")
  3.      ("test"                        "TEST")
  4. )

  5. defun(MikecMenuTrig (tArge)
  6.         let( (q)
  7.         q = axlUIMenuRegister( -1 SKILLToolsMenu )
  8.         )
  9. )

  10. MikecMenuTrig()
复制代码

作者: whh5118    时间: 2013-7-22 08:39
XYX365 发表于 2013-7-22 08:16
方法三必須直接將menu.il加載到allegro.ilinit裡面,重新開起allegro就會有你加入的menu選項

方法四改用下 ...

谢谢了。我一直在.il文件里弄,load半天也出不来。原来是要在allegro.ilinit里加载。呵呵。
作者: lyh289114980    时间: 2013-7-25 10:27
XYX365 发表于 2013-7-22 08:16
方法三必須直接將menu.il加載到allegro.ilinit裡面,重新開起allegro就會有你加入的menu選項

方法四改用下 ...

请问下二级菜单如何设置啊,就像楼上TEST菜单我再弄个子菜单,请问下如何操作。谢谢!
作者: szhot    时间: 2013-7-25 11:22
NXX的人啊...
作者: fangjunjie    时间: 2013-7-25 14:13
XYX365 发表于 2013-7-22 08:16
方法三必須直接將menu.il加載到allegro.ilinit裡面,重新開起allegro就會有你加入的menu選項

方法四改用下 ...

请问,如何在不重启allegro的情况下调用到新的菜单?
类似于点击菜单命令后,出现新的二级菜单可以点击
作者: deargds    时间: 2013-7-26 11:34
下面只针对Allegro启动时加载菜单问题说明,调试时直接调用函数名加载都没有问题.

第三种方法,问题出在回调函数上面
axlTriggerSet('menu 'XXX)
这里的XXX函数需要一个参数,  MikecMenuTrig (arg)
  1. SKILLToolsMenu = '(
  2.      (popup "SKILL Tools")
  3.      ("test"                        "TEST")
  4. )
  5. defun(MikecMenuTrig (arg)
  6.         let( (q)
  7.         q = axlUIMenuFind(nil -1)
  8.         res = axlUIMenuInsert(q SKILLToolsMenu)
  9.         )
  10. )
  11. axlTriggerSet('menu  'MikecMenuTrig)
复制代码
第四种方法,需要在加载完函数后进行调用
后面增加MikecMenuTrig()
作者: lyh289114980    时间: 2013-7-30 17:52
deargds 发表于 2013-7-26 11:34
下面只针对Allegro启动时加载菜单问题说明,调试时直接调用函数名加载都没有问题.

第三种方法,问题出在回 ...

版主二级菜单要怎样的格式啊?
作者: XYX365    时间: 2013-8-6 12:23
lyh289114980 发表于 2013-7-30 17:52
版主二级菜单要怎样的格式啊?
  1. SKILLToolsMenu = '(
  2.      (popup "SKILL Tools")
  3.      ("test"                        "TEST")
  4.      (separator)
  5.      (popup "Sub tools")
  6.         ("test1"    "TEST1")
  7.      (end)
  8. )
  9. defun(MikecMenuTrig (arg)
  10.         let( (q)
  11.         q = axlUIMenuFind(nil -1)
  12.         res = axlUIMenuInsert(q SKILLToolsMenu)
  13.         )
  14. )
  15. axlTriggerSet('menu  'MikecMenuTrig)
复制代码

作者: kinglangji    时间: 2014-9-13 15:40
请问楼主,在16.3上成功了么?我的在16.5上可以,但是在16.3上不行
作者: shirdon    时间: 2014-9-13 17:10
靠,明明要支持的,结果点了反对,不好意思
作者: 墨客的秋天    时间: 2016-11-2 07:52
谢谢分享
作者: mentorkk    时间: 2016-11-19 02:44
谢谢分享
作者: wcjcn    时间: 2017-6-8 20:30
学习学习。。。。
作者: billgong168    时间: 2017-10-31 18:09
我近期也遇到了这样的问题,阅读版主的解释后,立刻神清气爽,全身筋脉通畅,谢谢版主指点。

作者: maikeo    时间: 2018-1-23 18:41
标记一下
作者: digitzing    时间: 2018-2-6 15:52
这个可以有啊!很好![attach]135781[/attach]




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