CorelDRAWX4的VBA插件开发(十四)快速定位形状

.我们经常要根据一特性找到某些形状,比如

  • 找到轮廓颜色为CMYK(0,0,0,100)的形状
  • 找到填充色为RGB的形状
  • 找到应用一特效透镜的形状
  • 并且找到以上这些内容的个数

而他里面内置了快速定位的功能query, 这一节我们共同来学习快速查找QEURY功能

先上代码:

Sub 第一个插件()
    Dim theCount As Integer
    theCount = ActivePage.Shapes.FindShapes(Query:="@colors.find(cmyk(0,0,0,100))").Count
    If theCount <> 0 Then
        MsgBox "本文件内含有" & theCount & "个"
    End If
End Sub

这是一段查找填充或者轮廓颜色为CMYK(0,0,0,100)也就是平常常说的单色黑的查找代码

在这里插入图片描述
这就是快速定位颜色的形状集合, 根据上一节的内容我们知道FindShapes是找到的形状集合ShapeRange
Count是ShapeRange里面的一个属性,里面记录的是集合的总数,是一个长整数

  • 再说一下查找形状大于100毫米的写法
Sub 第一个插件()
    Dim theCount As Integer
    theCount = ActivePage.Shapes.FindShapes(Query:="@width > {100 mm}").Count
    If theCount <> 0 Then
        MsgBox "本文件内含有" & theCount & "个"
    End If
End Sub

这样就可以了

  • 再说一下查找某些特效的查法
Sub 第一个插件()
    Dim theCount As Integer
    theCount = ActivePage.Shapes.FindShapes(Query:="@com.transparency.type <> 0").Count
    If theCount <> 0 Then
        MsgBox "本文件内含有" & theCount & "个"
    End If
End Sub

上面这一串是直接查找所有形状 看看里面有没有含有使用了透镜效果的形状,如果有就会弹窗

代码释义
FindShapes 可以在开发者手册看到最后一个参数是Query,这个query就是另类的快速查询方法了
Query:=""这个是固定用法,后面接双引号, 引号内部就是我们更改的查询参数
"@colors.find(cmyk(0,0,0,100))要访问当前对象的方法和属性,必须在方法或属性名称前加上@符号
这里再说一下关于Shape的可查询方法一共有哪些呢?

序号符号返回值
1@name当前形状的名称
2@type返回表示形状类型的字符串
3@fill返回表示形状填充的填充对象
4@outline返回表示形状轮廓的轮廓对象
5@width返回形状的宽度(后面要带单位)
6@height返回形状的高度
7@left返回该形状在页面上左边缘的水平位置
8@right返回该形状在页面上的右边缘的水平位置
9@top返回该形状在页面上的顶部Y轴位置
10@bottom返回该形状在页面上的底边的Y轴位置
11@centerX返回该形状在页面上的中心点的X轴位置
12@CenterY返回该形状在页面上的中心点的Y轴位置
13@colors返回用于形状填充和轮廓的颜色数组。这个数组只包含唯一的颜色,所以如果填充和轮廓有相同的颜色,只有一种颜色是返回值
14@com返回形状的COM对象。这允许访问形状对象及其子对象的任何属性和函数,因为CQL不能直接访问的方法和属性。

一共就这么14种

这样子,当我们写上其中任意一种的时候,这个@**字符串代表就是所有当前文档中所有能够找得到的与之匹配的形状
.find(cmyk(0,0,0,100))是颜色查找的固定用法

@width > {100 mm} 这一段里面, @width表示形状的宽度,> 表示大于{100 mm}表示100毫米要用大括号包起来.
这里插入讲一下几种常用的:

  1. 等于 =
  2. 不等于 <>
  3. 大于等于 >=
  4. 小于等于 <=
  5. 大于 >
  6. 小于 <
  7. 或者 |
  8. 非 !

@com.transparency.type <> 0这一段的com是一个组件,回传的是COM:IVGShape对象, 这一段是一个布尔值,也就是结果TRUE或者FALSE, 只要是TRUE这个shape就会被加入到集合中
这个COM组件内部是什么还有待进步了解,等我去tlb内部了解清楚了再回头来解释吧
这个transparency就是透镜特效的类,type是他的子属性
等于0的时候是没有特效, 而另外有1到4各表示一种类型的透镜特效, 所以我在这里用了非0,也就是<>0来表示

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值