【问题标题】:CorelDraw selecting specific shapes in a collectionCorelDraw 选择集合中的特定形状
【发布时间】:2017-05-24 18:39:40
【问题描述】:

我正在尝试在我当前的工作系统中构建一个小的嵌套函数。我遇到的问题是,当我将第三个形状添加到集合中并尝试根据添加到集合中的前一个形状来定位它时,它仍然基于第一个形状来定位它。我最终得到的是原始位置的原件和堆叠在一起的副本。

Function ArrangeImages(ByRef scol1 As Collection, ByRef sA, sB As Shape)
Dim i, ii As Long

i = scol1.Count
ii = i - 1

If i = 1 Then

Set sB = scol1.Item(i)

End If

If scol1.Count > 1 Then

Set sA = scol1.Item(ii)
Set sB = scol1.Item(i)

sB.SetPosition sA.PositionX, sA.PositionY + (sA.SizeHeight / 2) + 
(sB.SizeHeight / 2) + 0.15
End If

End Function

【问题讨论】:

    标签: vba coreldraw


    【解决方案1】:

    您将对象设置为彼此相等,并且它们在内存中相互引用。实际上,您将对象加倍并使用了两倍的内存。

    Set 将对象设置为等于您想要的对象的引用。这是一个例子。

    Public Sub test()
    
        Dim s As Worksheet
        Dim s2 As Worksheet
    
        Set s = Application.Workbooks.Add().Worksheets.Add
        s.Name = "one"
        Set s2 = s     's and s2 Name = "one"
        s.Name = "two" 's and s2 Name = "two"
    
    End Sub
    

    Let 将对象设置为等于您想要的对象的值。

    试试

    Set sA = new Shape
    Let sA = sB 
    

    代替

    Set sA = sB
    

    如果这不起作用,您可能必须为要使用的每个形状创建一个属性或变量。

    Similar Question

    【讨论】:

    • 我对代码进行了编辑以设置不同的 sA 我对此进行了测试,但它仍然无法正常工作。我还没有探索 Let 方法。请允许我这样做,然后回到你身边。
    • @JamesCunningham 只要你是Setting 它,它仍然是一个引用对象。即使你Set sC = sB 然后Set sA = sC 然后sA 仍然是sB 的引用。我不知道你尝试了什么,只是提供一个假设。
    • 我不得不创建一个双精度对象来在重新定位对象之前保持它们的位置。我还必须使用 Corel 对象的 StaticID 来访问正确的对象并将它们放置在应该去的地方。最终我的代码看起来与原来的完全不同,尽管@GibralterTop 有一个非常有用的帖子。谢谢。
    • @JamesCunningham 很高兴您能够弄清楚。我想也许你应该发布编辑后的代码作为答案,而不是编辑你的问题。
    猜你喜欢
    • 2017-02-16
    • 2014-04-11
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 2019-03-13
    • 1970-01-01
    相关资源
    最近更新 更多