本帖最后由 nonsmall 于 2013-5-13 11:39 编辑
Lisp 操作 VBA 对话框已经实现 by nonsmall 2009 初
================================================================
今天试了一下 若删除窗体里面的VBA代码
则只需如下Lisp代码即可使用(VBA里面就不用动任何代码了 任意VBA窗体都可使用)
(defun LayersTile (key) (print key) ) (defun c:tt( / ) (vl-load-com) (setq acad (vlax-get-acad-object)) (print "nonsmall 原创Lisp使用VBA对话框") (setq Dvb_Path (findfile "D:\\VBA_开发研究\\对话框.dvb")) (if (not Dvb_Path) (progn(alert "D:\\VBA_开发研究\\对话框.dvb文件不存在")(exit))) (vl-catch-all-apply 'vla-UnloadDVB '(acad Dvb_Path)) (Vlax-Invoke-Method (Vlax-Get-Acad-Object) 'LoadDVB Dvb_Path) (setq dvb "nonsmall_20090206") (vla-eval acad "start nonsmall_20090206, \"nonsmall_20090206\", \"LayersTile\"") (vlax-invoke-method acad 'Eval (strcat dvb ".Show 0")) )
-----------------------------------------------------------
抽空改了个第二版 VBA我刚起步 自己摸索写点东西实在不容易
我用类封装了常用控件的动作(Lisp里面我们叫Action_Tile函数)
会返回给Lisp当前点击的那个控件名称
至于取得各个控件里面的值 大家自己看看VBA窗体的书就行了 很简单
VBA窗体做好后 大家只需替换窗体里面2个值就行
你要是用我的模板就什么都不用改 只负责改窗体和只写Lisp就OK
用DLL封装是我的目标
虽然工作关系现在不玩Lisp了 但还是忍不住 呵呵
第二版代码如下:
窗体代码:
VBA 代码预览:
========================我是版本分割线============================
思路:lisp通过eval方法直接操作对话框对象 VBA对话框通过VL对象回调lisp
注意事项:command函数不能直接用,只要调用Sendcommand方法就可以使用command了!
(Vlax-Invoke-Method (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'SendCommand "(command \"line\" (getpoint )(getpoint ) \"\") " )
---------------------------------------
Lisp完整代码
DVB对话框原始文件(无密码)
对话框中附带的完整代码
------------------------------------------------------------
使用VBA对话框相对DCL优点: 太多了 先说一点点吧
直接拖动制作(随意且紧凑) 定制全部控件属性 支持图片预览 支持海量的第三方控件支持(自己也可以写)
对话框开启时操作图面(非模态) 可以和DCL同时搭配使用(我没说完全放弃哦) *error*函数可以被一定程度的代替
网上很多的VBA对话框拿过来改改就用(偷懒吧) 激发大家学习VBA的热情 ....................
============================================
这是之前的一点演示:
先做DVB好了 以后再优化 |