乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 125|回复: 9

VBA动态拖动的实现

[复制链接]

19

主题

90

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
166
发表于 2009-2-13 13:29:00 | 显示全部楼层 |阅读模式
长久以来,VBA被认为在动态拖动方面是最性无能的,我通过VBA调用一个动态链接库实现了久此以来都没有解决的VBA动态拖动问题
在这里我编写了一个标准动态链接库函数,用以让VBA实时得到坐标点
在VB或VBA中,它这样被使用
Declare Function getpt Lib "CaiqsVBApinvoke.arx" (ByRef x As Double, ByRef y As Double, ByRef z As Double) As Integer
上面是函数声明
调用时
dim ret as Integer
ret = getpt(x, y, z)'这里得到实时坐标
先将附件里的arx放到安装目录,不用加载
看我下边的例子程序及演
Declare Function getpt Lib "CaiqsVBApinvoke.arx" (ByRef x As Double, ByRef y As Double, ByRef z As Double) As Integer
Sub aa()
Dim moda As Integer
mymode = 0
Dim x, y, z As Double
Dim ret As Integer
ret = getpt(x, y, z)
Dim abc As AcadEntity
Dim pt As Variant
ThisDrawing.ActiveSelectionSet.SelectOnScreen
Dim oldpt As Variant
Dim newpt(2) As Double
oldpt = ThisDrawing.Utility.GetPoint(, "\n指定移动起点: ")
Dim mylne As AcadLine
ret = getpt(x, y, z)
Dim startpt(2) As Double
Dim endpt(2) As Double
endpt(0) = x: endpt(1) = y: endpt(2) = z
Set mylne = ThisDrawing.ModelSpace.AddLine(oldpt, endpt)
Dim tmp(0) As Double
Do While ret = 1
ret = getpt(x, y, z)
newpt(0) = x: newpt(1) = y: newpt(2) = z
mylne.EndPoint = newpt
For Each ent In ThisDrawing.ActiveSelectionSet
ent.Move oldpt, newpt
Next
oldpt(0) = newpt(0): oldpt(1) = newpt(1): oldpt(2) = newpt(2)
Loop
mylne.Delete
End Sub


2v5uabadjqn.gif

2v5uabadjqn.gif


本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

8

主题

42

帖子

9

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
73
发表于 2009-2-13 18:52:00 | 显示全部楼层
请问ARX可以加载到2004中吗?
回复

使用道具 举报

16

主题

49

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2009-2-13 21:03:00 | 显示全部楼层
非常有用,但是用起来不是很方便呢,这个例子都只能通过右键结束命令,用法还需要研究下!非常感谢楼主提供的好东西!
回复

使用道具 举报

3

主题

103

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2009-2-22 19:06:00 | 显示全部楼层
文件未找到,无论文件放在哪里,都是一样,文件名加上路径也说文件未找到
运行时错误53
回复

使用道具 举报

19

主题

90

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
166
发表于 2009-2-24 10:04:00 | 显示全部楼层
适用于cad04-06,arx可加载或放cad目录或放操作系统目录中
回复

使用道具 举报

13

主题

107

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2009-3-1 23:53:00 | 显示全部楼层
我的也提示“文件未找到“
无论文件放在哪里,都是一样,文件名加上路径也说文件未找到
运行时错误53”
我的是 2008
回复

使用道具 举报

19

主题

45

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
121
发表于 2009-3-2 13:53:00 | 显示全部楼层
移动结束只能用右键结束么?实用性不强啊。
mylne.EndPoint = newpt后面加一句mylne.Highlight True就更像了
回复

使用道具 举报

3

主题

103

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2009-3-5 22:41:00 | 显示全部楼层

这个功能用VL类也可以实现
回复

使用道具 举报

1

主题

3

帖子

1

银币

初来乍到

Rank: 1

铜币
7
发表于 2009-3-21 04:37:00 | 显示全部楼层
请问能用左键结束移动命令吗?这样更方便!
回复

使用道具 举报

1

主题

3

帖子

1

银币

初来乍到

Rank: 1

铜币
7
发表于 2009-3-22 20:37:00 | 显示全部楼层
我已解决用右键结束命令这个缺陷,用API函数。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-2 12:21 , Processed in 0.880040 second(s), 77 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表