mkweaver 发表于 2007-11-8 14:33:06

数组的对象属性列表?

我想得到一个数组中一个对象的所有属性的列表 用VBA有什么方法可以做到这一点吗
具体来说,我想获得一个图层的所有属性和值,以便存储它们或将它们复制到另一个图形中 我不知道'我不想指定属性,因为我希望代码在将新属性添加到对象模型时接受它们
欢迎所有建议,
Mike Weaver

mkweaver 发表于 2007-11-8 14:43:47

我不知道'我不这么认为'这是可能的 我真的很想在这件事上被证明是错的,只是因为看到它会很酷。

T.Willey 发表于 2007-11-8 14:57:16

MSDN有一篇文章http://msdn.microsoft.com/msdnmag/issues/1200/TypeLib/default.aspx这解释了如何使用tlbinf32.dll来实现,但我希望vba中内置了一些东西
迈克

mkweaver 发表于 2007-11-8 17:11:11

可以用Lisp完成 看看'原子族#039;作用

T.Willey 发表于 2007-11-8 19:03:03

Tim,
我能看到的唯一可能获得原子族对象属性列表的方法是使用vlax-property-available-p检查原子族的每个成员与我的对象,看看它是否是该对象的属性 这是你想的吗,还是我还有别的办法;我失踪了
迈克·韦弗

mkweaver 发表于 2007-11-8 19:31:26

这就是我当时的想法,也是我的议员(从这里)向我展示的方式 我不知道'我不知道还有别的办法,迈克。

mkweaver 发表于 2007-11-8 20:51:52

使用AxDbDocument和ThisDrawing克隆它。从内存复制对象。

mkweaver 发表于 2007-11-8 21:40:09


使用上述链接中的信息,此代码(尽可能丑陋和笨拙)将返回一个集合,其中填充了所需Autocad实体的属性[代码大多数代码来自类型库信息库的帮助文件
VBA项目必须包含对TypeLineInformation(tlbinf32.dll)的引用
结果在所附图像中

mkweaver 发表于 2007-11-8 22:01:40


这就是我当时的想法,也是我的议员(从这里)看到的 我不知道'我不知道还有别的办法,迈克
将层设置为层对象后,我得到以下结果:
(setq temp (vl-remove-if-not (function (lambda(var)
(vlax-property-available-p layer var))) (atoms-family 0)))
(LAYERON) 不完全是我所期望的

mkweaver 发表于 2007-11-8 22:14:59

好吧,忘掉我上一篇文章中的所有内容
它变得简单多了
仍然需要引用TypeLineInformation(tlbinf32.dll)
Public Sub testGetProps()
    Dim cData As Collection
    Set cData = dkb_GetProperties(ThisDrawing.ModelSpace(0)) 'select your object however suits you best
End Sub
Public Function dkb_GetProperties(pObject As Acad0bject) As Collection
    Dim iInterFaceInfo As InterfaceInfo
    Dim cClassInfo As TypeInfo
   
    Dim colProperties As Collection
    Dim i As Integer
   
    Set colProperties = New Collection
   
    Set iInterFaceInfo = InterfaceInfoFromObject(pObject)
    For i = 1 To iInterFaceInfo.Members.Count
      If iInterFaceInfo.Members(i).InvokeKind = INVOKE_PROPERTYGET Then
            colProperties.Add iInterFaceInfo.Members(i).Name
      End If
    Next i
    Set dkb_GetProperties = colProperties
End Function
页: [1] 2
查看完整版本: 数组的对象属性列表?