PCB论坛网

 找回密码
 注册
查看: 4684|回复: 13

Ministatus 编程的总结(skill)

[复制链接]
发表于 2006-5-29 16:11:00 | 显示全部楼层 |阅读模式
;********************************************************************************
; 为了总结 Ministatus 的核心编程思想,写了这个 Hello World 。
; 程序很简单,较为完整的实现了 Ministatus 面板跟 SPB 交互的过程,
; 希望这段程序能够把 Ministatus 的核心编程思想表达清楚,欢迎高手拍砖。
; 不过为了突出重点省去了 axlMiniStatusLoad 的回调函数,这点跟 form 是一致的,
; 熟悉 form 的朋友应当不在话下, 这个 skill 仅仅用来实现高亮的“插件效果”。
; 可以用来改写类似排列元件的功能,希望对大家有所帮助。
; 缺点:没有找到在系统级实现类似 move 那样支持 undo/redo 的方法,跟真正的系统级插件还有距离。还望高手赐招。
; 测试平台:spb15.5.1
; 作者:gfe2004 2006.05.29 发表于 WWW.PCBBBS.COM
;********************************************************************************
QUOTE:
defun( gfe_HelloWorld ()
prog( ()
    mark = axlDBTransactionStart()
    axlControlRaise('options)
    HelloWorld_form_file = "./HelloWorld.form"
    _createForm_HelloWorld()
    HelloWorld_Form = axlMiniStatusLoad( (gensym) HelloWorld_form_file nil t)
    ;axlFormTest(HelloWorld_form_file)
    if(isFile(HelloWorld_form_file)
        deleteFile(HelloWorld_form_file)
    );endif
    mypopup = axlUIPopupDefine( axlUIGetUserData()->popupId
                        (list (list "gfe_Done" 'gfe_FinishEnterFun)
                        (list "gfe_Cancel" 'gfe_CancelEnterFun)))
    axlUIPopupSet(mypopup)
    axlSetFindFilter( ?enabled (list "symbols" )
                    ?onButtons (list "symbols" ))
    while( axlSelect() axlHighlightObject(axlGetSelSet()))
;    while( axlSelect() axlDeleteObject(axlGetSelSet()))
    (case axlUIGetUserData()->doneState
        (done
            axlDBTransactionCommit(mark)
            axlUIWPrint(nil "done !!!")
        ); end info
        (cancel
            axlUIWPrint(nil "cancel !!!")
        ); end close
    ); end case
    axlUIWPrint(nil "ending !!!")
); end prog
); end defun
;********************************************************************************
;; gfe_done
defun( gfe_FinishEnterFun ()
    axlUIWPrint(nil "gfe_Done!!!")
;    axlFinishEnterFun()
)
;; gfe_cancel
defun( gfe_CancelEnterFun ()
    axlUIWPrint(nil "gfe_Cancel!!!")
;    axlCancelEnterFun()
)
;********************************************************************************
;; .form
defun( _createForm_HelloWorld ()
prog( ()
    HelloWorld_form = outfile(HelloWorld_form_file "w")
    fprintf(HelloWorld_form "FILE_TYPE=FORM_DEFN VERSION=2\n")
    fprintf(HelloWorld_form "FORM \n")
    fprintf(HelloWorld_form "FIXED\n")
    fprintf(HelloWorld_form "PORT 36 19\n")
    fprintf(HelloWorld_form "HEADER \"gfe2004\"\n")
    fprintf(HelloWorld_form "\n")
    fprintf(HelloWorld_form "TILE\n")
    fprintf(HelloWorld_form "TEXT \"Hello World!\" \n")
    fprintf(HelloWorld_form "TLOC 2 6\n")
    fprintf(HelloWorld_form "ENDTEXT\n")
    fprintf(HelloWorld_form "\n")
    fprintf(HelloWorld_form "ENDTILE\n")
    fprintf(HelloWorld_form "\n")
    fprintf(HelloWorld_form "ENDFORM\n")
    close(HelloWorld_form)
); end prog
); end defun
;********************************************************************************
回复

使用道具 举报

 楼主| 发表于 2006-5-31 00:11:00 | 显示全部楼层
:)
[此贴子已经被作者于2006-6-12 22:13:29编辑过]
回复 支持 反对

使用道具 举报

发表于 2006-6-8 16:20:00 | 显示全部楼层
??[em09]sha ya
回复 支持 反对

使用道具 举报

发表于 2006-6-11 22:39:00 | 显示全部楼层

不错,但是在这里有一点意见提一下。

axlUIPopupSet(mypopup)

前面的话应该加一条

axlUIPopupSet(nil)

在你的程序退出的时候也应该加一条,你觉得呢?

回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-12 22:09:00 | 显示全部楼层
首先感谢 AndrewKoenig 能够抽空帮我检查这段框架,要是能把理由附带上就更好了?看您的意思是怕引起内存泄漏吧,不知我领会到您的意思了没有。

这段代码表示了两种退出程序的方法(需要把gfe_done 和 gfe_cancel 回调函数中的注释去掉)。我先说下这段代码这么写的原因:进入程序,Allegro把 popupmenu 清为 done 和 cancel (呵呵,测试中发现支持系统热键,不过我试着添加类似F4,F5那些说明,没平台的好看就去掉了),也就是说在程序的入口,平台有个初始化的过程,出口也应该有,可惜究竟平台在这两步做了些什么工作,没查着这方面的资料,那么按照常规,不加特殊说明就默认是安全的,同时测试中没发现什么问题,我就这么写了。

但是在没资料的情况下您说的是一种更好,更安全的选择,够严谨!!!向您学习
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-12 22:36:00 | 显示全部楼层
另外在支持allegro的 undo/redo 操作上您有没有什么建议?
回复 支持 反对

使用道具 举报

发表于 2006-7-26 21:34:00 | 显示全部楼层
gfe2004告诉我你的邮箱地址,我将修改后的程序,带有undo功能的程序发给你!
回复 支持 反对

使用道具 举报

发表于 2006-7-27 00:22:00 | 显示全部楼层

(axlShell "undo")

(axlShell "redo")

就是用這兩個命令就可以搞定undo 和 redo.

[此贴子已经被作者于2006-7-27 0:25:46编辑过]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-27 09:18:00 | 显示全部楼层
感谢AndrewKoenig 和 hunter516


gfe2004@163.com

回复 支持 反对

使用道具 举报

发表于 2006-7-27 13:34:00 | 显示全部楼层

呵呵

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|手机版|PCB设计论坛|EDA论坛|PCB论坛网 ( 沪ICP备05006956号-1 )

GMT+8, 2024-9-27 20:45 , Processed in 0.146974 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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