当前位置:   article > 正文

VSTO Shapes对象、ShapeRange对象和Shape对象的关系_vsto ole撖寡情

vsto ole撖寡情

先附上官方文档网址:
Office Visual Basic for Applications (VBA) 参考 | Microsoft Learn

前言

我正在学习制作PPT插件,在PPT中,形状是十分重要的元素。以篇文章来分享我对形状的理解。

对象介绍

与形状有关的三个对象如标题所示。
Shape对象:代表绘图层中的对象,例如自选图形、任意多边形、OLE 对象或图片。 也就是Shape对象代表单个形状
ShapeRange对象:代表一组Shape对象。例如当同时选中了多个对象,则这个整体为一个ShapeRange对象。
Shapes对象:指定幻灯片上所有Shape对象的集合

实例分析

生成形状

首先生成形状,可用Shapes对象的AddShape方法生成Shape对象。

  1. //获取页面目前的尺寸
  2. float w = app.ActivePresentation.PageSetup.SlideWidth; //读取页面宽度
  3. float h = app.ActivePresentation.PageSetup.SlideHeight; //读取页面高度
  4. //生成图形
  5. PowerPoint.Slide slide = app.ActiveWindow.View.Slide; //实例化页面
  6. PowerPoint.Shape shape1 = slide.Shapes.AddShape(Office.MsoAutoShapeType.msoShapeOval,w/2-20,h/2,Math.Min(w/4,h/4), Math.Min(w / 4, h / 4)); //生成圆形
  7. PowerPoint.Shape shape2 = slide.Shapes.AddShape(Office.MsoAutoShapeType.msoShapeRectangle, w / 2, h / 2, w / 4, h / 4); //生成矩形
  8. PowerPoint.Shape shape3 = slide.Shapes.AddShape(Office.MsoAutoShapeType.msoShapeIsoscelesTriangle, w / 2, h / 2, w / 4, h / 4); //生成等腰三角形

上面代码生成了圆形、矩形、等腰三角形三个对象。

利用结合形状来阐述三者关系

如果我们要结合圆形与矩形,如下图所示:

则我们需要得到仅包含圆形和矩形的ShapeRange对象
方案一:先使用鼠标选中两个图形,再使用Selection对象的ShapeRange属性得到ShapeRange对象。

  1. PowerPoint.ShapeRange shapeRange = app.ActiveWindow.Selection.ShapeRange;
  2. //当前窗口中选中的形状

这就离谱,你说我都上鼠标了,我干嘛不直接点击上图中的【结合】?还要你PPT插件何用?所以方案一不可取。
方案二:利用Shapes对象的Range方法,择选圆形和矩形。这也是本文的重点,利用Shapes来获取ShapeRange。

利用Shapes来获取ShapeRange

  1. shape1.Name = "圆"; //给圆形命名
  2. shape2.Name = "方"; //给矩形命名
  3. string[] name = {"圆", "方"}; //将所要选择的形状名字构成字符串数组
  4. PowerPoint.ShapeRange shapeRange = slide.Shapes.Range(name); //在页面所有形状中,选择圆形和矩形构成ShapeRange

最后一步结合形状

  1. //结合形状
  2. shapeRange.MergeShapes(Office.MsoMergeCmd.msoMergeUnion);

总结

1.Shapes对象可以直接获取。
2.用Shapes对象的AddShape方法生成Shape对象。
3.用Shapes对象的Range方法获取ShapeRange对象。
4.你学会了合并形状的方法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/316260
推荐阅读
相关标签
  

闽ICP备14008679号