明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 37524|回复: 85

[【不死猫】] [不死猫出品] Lisp 使用 VBA 对话框 第二版(发完整实例+思路+源代码)

    [复制链接]
发表于 2009-1-11 13:51:00 | 显示全部楼层 |阅读模式
本帖最后由 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好了 以后再优化

本帖子中包含更多资源

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

x

评分

参与人数 2明经币 +5 金钱 +15 贡献 +10 激情 +5 收起 理由
alan0019hk + 5 神馬般的精彩, 只能雙手奉上微不足道的金錢
Longfin + 5 + 10 + 10 + 5 【好评】好思路 不佩服不行

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2019-11-26 21:21:11 | 显示全部楼层
只知道defun c:后面的是快捷键,其他的不会
发表于 2009-1-11 13:54:00 | 显示全部楼层
牛年还没到,牛人又牛了
发表于 2009-1-11 17:24:00 | 显示全部楼层
真他媽的牛!
发表于 2009-1-11 21:30:00 | 显示全部楼层
就快成功了,再接再厉呀
发表于 2009-1-11 21:33:00 | 显示全部楼层

这个最好是用VB做一个动态链接库,提供接口再用VL调用比较好

 楼主| 发表于 2009-1-11 21:54:00 | 显示全部楼层
wuyunpeng888发表于2009-1-11 21:33:00这个最好是用VB做一个动态链接库,提供接口再用VL调用比较好

不是不想 这个我现在是不会写啊

一般搞Lisp的都不会写(当然总是调用别人生成好的DLL心里总是不踏实)

会写的都没空关心这个了

希望wuyunpeng888朋友能写一个这样的接口程序并且和大家分享源码

先谢谢了

发表于 2009-1-11 22:23:00 | 显示全部楼层
很好,继续吧
 楼主| 发表于 2009-1-12 09:39:00 | 显示全部楼层

先发一张改图层 画线 画圆的小例子(见1楼)

其实只要完成

点击后直接调用Lisp函数 并且可以带参返回需要的值

就达到了用对话框工作的基本目的

(如果觉得不够爽 同时可以再开一个DCL工作的!)

PS:我的 Lisp音乐播放器 终于可以歌词同步了!

发表于 2009-1-12 10:11:00 | 显示全部楼层
超级牛人啊
发表于 2009-1-12 13:45:00 | 显示全部楼层

猫兄真是世外高人啊! 佩服,叹服. 你那个lisp调用win.api的东东弄得怎么样了,怎没看到您的下文啊?

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 01:24 , Processed in 0.221570 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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