乐筑天下

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

[求助] ObjectModified 多段线调整问题

[复制链接]

2

主题

6

帖子

1

银币

初来乍到

Rank: 1

铜币
14
发表于 2012-5-25 17:52:00 | 显示全部楼层 |阅读模式
小弟用 VBA 写的 Modified 事件 遇到一问题,望各位不吝赐教,万分感激
        因为虚拟机现打不开,具体的代码不再贴出,描述如下:
                                

ymy23t2nkwd.JPG

ymy23t2nkwd.JPG


        如图,捕获 多段线 的 Modified 事件,欲实现功能:
        拉动 A 中的 1点, 正常情况下,会产生 B 一样的改变,
        但是我需要的是保持 1.2 点在同一水平线上,即 多段线外形 不发生改变。
        问题是这样的,我写了事件,当调整 1 时, 自动调整 2,
        此时问题出现了, 因为 Modified 事件触发后,多段线便被锁定了,
        即出现了报错:对象正在通知中。即不能在事件中操作事件触发的对象。
        
        望各位不吝赐教,我已经想了好些方法,都没有效果,谁能给点意见,谢谢!!
回复

使用道具 举报

0

主题

58

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2012-5-28 05:28:00 | 显示全部楼层

用定时器吧
插入标准模块"模块1",代码
  1. Option Explicit
  2. Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  3. Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
  4. Dim lngTimerID As Long
  5. Private Sub TimerProc()
  6.     KillTimer 0, lngTimerID
  7.     ThisDrawing.ModifyPL
  8. End Sub
  9. Sub ST(T As Integer)
  10.     lngTimerID = SetTimer(0, 0, T, AddressOf TimerProc)
  11. End Sub

thisdrawing模块代码
  1. Option Explicit
  2. Dim WithEvents PL As AcadLWPolyline
  3. Dim P1 As Variant
  4. Private Sub PL_Modified(ByVal pObject As IAcadObject)
  5.     Dim P2 As Variant
  6.     On Error GoTo 10
  7.     P2 = PL.Coordinates
  8.     If P2(2)  P1(2) Or P2(3)  P1(3) Then
  9.         P2(4) = P2(4) + P2(2) - P1(2)
  10.         P2(5) = P2(5) + P2(3) - P1(3)
  11.         P1 = P2
  12.         模块1.ST 1
  13.     Else
  14.         P1 = PL.Coordinates
  15.     End If
  16. 10 End Sub
  17. Sub AddPL()
  18.     Dim P2(5) As Double
  19.     P2(2) = 100
  20.     P2(3) = 100
  21.     P2(4) = 200
  22.     P2(5) = 100
  23.     Set PL = ThisDrawing.ModelSpace.AddLightWeightPolyline(P2)
  24.     P1 = P2
  25. End Sub
  26. Sub ModifyPL()
  27.     On Error Resume Next
  28.     PL.Coordinates = P1
  29. End Sub
回复

使用道具 举报

0

主题

58

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2012-5-28 05:29:00 | 显示全部楼层

重复,请版主删帖
回复

使用道具 举报

2

主题

6

帖子

1

银币

初来乍到

Rank: 1

铜币
14
发表于 2012-5-31 14:13:00 | 显示全部楼层
非常感谢啊,我试一试。
回复

使用道具 举报

2

主题

6

帖子

1

银币

初来乍到

Rank: 1

铜币
14
发表于 2012-5-31 14:15:00 | 显示全部楼层

非常感谢啊,我试一试。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-6-30 04:53 , Processed in 0.576094 second(s), 77 queries .

© 2020-2025 乐筑天下

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