eagledance 发表于 2003-11-22 16:37:00

[VBA] 如何做到在autocad的窗口中点击一个块就能弹出一个窗口,并且可以修改或者设

如何做到在autocad的窗口中点击一个块就能弹出一个窗口,并且可以修改或者设置该块的属性呢如题,小弟要作一个配电规划的程序要画电气主接线图,我把变压器等元件做成了块
用于插入到我的图形中来。因为变压器等元件是有属性的,比如它的型号等等,我想做出这样的效果,当我用鼠标点击这个变压器块的时候就弹出一个窗口 或者对话框,用来设置或者改变这个变压器的属性如何做到呢诚盼各位大哥回复 多谢了

efan2000 发表于 2003-11-22 16:49:00

单击不行,双击有对应的事件,是文档级的事件。

Private Sub AcadDocument_BeginDoubleClick(ByVal PickPoint As Variant)
    ' This example intercepts a drawing BeginDoubleClick event.
    '
    ' This event is triggered when a drawing receives
    ' a double mouse click in its working area.
    '
    ' To trigger this example event: Position the mouse over the working area of
    ' a drawing window and double-click the left mouse button

    ' Use the "PickPoint" variable to determine where on the drawing the user clicked
    MsgBox "A drawing has just been double-clicked at:" & vbCrLf & _
            PickPoint(0) & vbCrLf & _
            PickPoint(1) & vbCrLf & _
            PickPoint(2)
End Sub

eagledance 发表于 2003-11-22 16:52:00

感谢大哥这么快恢复 多谢了

能否告诉小弟你的qq呢 可以有更多的问题交流 可以么

eagledance 发表于 2003-11-22 16:55:00

好像这样只能获得双击的点啊
如何才能判断出他双击的是哪个具体的块呢
前提是那个块的坐标范围是不知道的

efan2000 发表于 2003-11-22 17:14:00

判断一点处的实体可以使用选择集,使用SelectAtPoint方法。如果只选择块,还可以使用过滤机制来缩小范围。但以前听说SelectAtPoint有问题,如果不放心,也可以使用Select,模式acSelectionSetWindow窗口选择,构造一个足够小的窗口就行了,比如长宽为0.5的矩形,其它与SelectAtPoint的用法类似。

eagledance 发表于 2003-11-22 18:13:00

多谢 让我试验一下吧
还有一个问题
关于对象的句柄 是不是 当我把文件存盘 再读出的时候
所有对象的句柄就都变化了呢
   
   我如果要在vb里作一个数据结构,用来记录每一个对象
   以后即使是存盘再读出来也一样有效是否可以用句柄这个办法呢如果不能有什么好办法呢 诚盼赐教

efan2000 发表于 2003-11-22 18:22:00

对象的句柄Handle在一张图中是唯一的,即使关闭再打开也不会变化。但是在多张图中就会重复(即A图中的句柄与B图中的句柄会相同,但A图中的句柄在本身里是不重复的),因而涉及到多张图操作时不能用它来辨别对象。
而对象的ID在当前ACAD的所有图纸中是唯一的,但是关闭再打开就变化了,适合于多文档中的一些辨别。
如果用于操作外部数据,那么可以使用句柄,但是还要有一个文件名称来区别。

eagledance 发表于 2003-11-22 18:28:00

efan2000 真是感谢啊 很想交你这个朋友可否认识一下呢
我的qq是11397591你要是不方便公开qq 那你来加我好么
我在线等

eagledance 发表于 2003-11-22 20:40:00

我按照efan2000说的做了 可是怎么当我在autocad上双击的时候
怎么没有触发事件呢 (我是把autocad抓到我的程序的一个窗体里了)

mccad 发表于 2003-11-23 07:30:00

双击时就有选择集了,你可能直接用该选择集(还剩下双点并操作后怎么防止特性框的出现和把选择集清除掉的操作)。
Private Sub AcadDocument_BeginDoubleClick(ByVal PickPoint As Variant)
    Dim ss As AcadSelectionSet
    Dim i As Integer
    Dim txt As String
   
    Set ss = ThisDrawing.ActiveSelectionSet
    If ss.Count > 0 Then
      txt = "共选定了" & ss.Count & "个图元"
      For i = 0 To ss.Count - 1
            txt = txt & vbCrLf & "第" & i + 1 & "个图元名称:" & ss(i).ObjectName
      Next
    End If
    MsgBox txt
End Sub
页: [1] 2
查看完整版本: [VBA] 如何做到在autocad的窗口中点击一个块就能弹出一个窗口,并且可以修改或者设