Office中国论坛/Access中国论坛

标题: 【OneKeyTools源代码分享2】插入矩形 [打印本页]

作者: 只为设计    时间: 2016-2-23 15:56
标题: 【OneKeyTools源代码分享2】插入矩形
本帖最后由 只为设计 于 2016-2-24 20:29 编辑

入矩形用代码实现估计对很多人并不是很多难事。不过对于插件来说,实用性才是最为核心的,所以插件好不好其实跟技术高低的关系不是想象中那么大。比如OneKeyTools的“插入矩形”,虽然算是初级的技术,但结合PPT设计者的实际操作习惯,也可以让使用者爱不释手。
【插入矩形】功能说明
1. 所选为幻灯片,则在每个所选页面左上角新建一个无边框正方形
2. 选中任意图形,则在该页新建与图形等大的无边框的矩形,矩形与原图形位置相同

【主要代码】↓
  1.             PowerPoint.Selection sel = app.ActiveWindow.Selection;
  2.             if (sel.Type == PowerPoint.PpSelectionType.ppSelectionShapes)
  3.             {
  4.                 PowerPoint.Slide slide = app.ActiveWindow.View.Slide;
  5.                 PowerPoint.ShapeRange range = sel.ShapeRange;
  6.                 PowerPoint.Shape shape = range[1];
  7.                 PowerPoint.Shape nshape = slide.Shapes.AddShape(Office.MsoAutoShapeType.msoShapeRectangle, shape.Left, shape.Top, shape.Width, shape.Height);
  8.                 nshape.Line.Visible = Office.MsoTriState.msoFalse;
  9.                 nshape.Line.Weight = 0;
  10.             }
  11.             else
  12.             {
  13.                 PowerPoint.SlideRange srange = sel.SlideRange;
  14.                 PowerPoint.Shape shape = sel.SlideRange[1].Shapes.AddShape(Office.MsoAutoShapeType.msoShapeRectangle, -100, 0, 100, 100);
  15.                 shape.Line.Visible = Office.MsoTriState.msoFalse;
  16.                 shape.Line.Weight = 0;
  17.             }
复制代码

代码分析
【插入矩形代码】↓
  1. PowerPoint.Slide slide = app.ActiveWindow.View.Slide;
  2. PowerPoint.Shape shape = slide.Shapes.AddShape(Office.MsoAutoShapeType.msoShapeRectangle, -100, 0, 100, 100);
复制代码
↑slide.Shapes.AddShape(类型,左边距,顶边距,宽度,高度),这是在当前幻灯片中新建形状普遍会用到的方法。注意这里宽高边距,类型是float,单位是磅值,100磅=3.53厘米。所以插入的矩形是左边距-3.53cm,顶边距为0cm,宽3.53cm,高3.53cm的正方形。

【判断代码】↓
  1. PowerPoint.Selection sel = app.ActiveWindow.Selection;
  2. if (sel.Type == PowerPoint.PpSelectionType.ppSelectionShapes)
复制代码
↑这段代码是判断所选的类型。如果选择的是形状,那么就要插入一个与所选图形等大的无边框矩形↓
  1. PowerPoint.ShapeRange range = sel.ShapeRange;
  2. PowerPoint.Shape shape = range[1];
  3. PowerPoint.Shape nshape = slide.Shapes.AddShape(Office.MsoAutoShapeType.msoShapeRectangle, shape.Left, shape.Top, shape.Width, shape.Height);
复制代码
↑此处的shape是所选的第一个图形,如果选中多个图形,可以在这里把range[1]里的1改为i,通过for来进行循环
shape.Left是原图形的左侧边,shape.Top是原图形的顶侧边,shape.Width是原图形的宽度,shape.Height是原图形的高度
此时新建的nshape就是跟原图形shape相同的宽高和位置了。

那如果所选为幻灯片呢?↓
  1. PowerPoint.SlideRange srange = sel.SlideRange;
  2. PowerPoint.Shape shape = sel.SlideRange[1].Shapes.AddShape(Office.MsoAutoShapeType.msoShapeRectangle, -100, 0, 100, 100);
复制代码
↑由于所选为幻灯片,所以要在所选的幻灯片中新建矩形。sel.SlideRange[1],表示的是所选的第一页幻灯片。如果所选幻灯片为多页,要实现循环可以用for或foreach循环,无非就是把1改为一个变量。for和foreach的用法,可以网上搜搜,很容易找得到,这里不赘述。

【去边框代码】↓
  1. nshape.Line.Visible = Office.MsoTriState.msoFalse;
  2. nshape.Line.Weight = 0;
复制代码
↑这个比较简单

其实从技术上说,本功能代码很简单。但我真正想说的是,编程其实也是一种设计。让一个功能解决多种需求,更需要有设计思维,而不单单是技术的问题。

上一篇:【OneKeyTools源代码分享1】EMF导入   下一篇:【OneKeyTools源代码分享3】特殊选中



作者: roych    时间: 2016-2-23 16:08
C#?
VSTO?
这语法很面熟。
作者: cludy917    时间: 2016-2-23 16:34
看到代码就头疼,为写代码的程序员点赞
作者: 露桥闻笛    时间: 2016-2-23 17:29
这效率....又出第二篇了.... PPT开发与设计的双料高人,非设计大爷莫属,且其一直坚持免费教程和讲课,无私分享,这境界和格局更是高山仰止呵.....
作者: zgm8018    时间: 2016-2-23 18:40
老爷威武!!!!!!!
作者: tmtony    时间: 2016-2-24 12:06
roych 发表于 2016-2-23 16:08
C#?
VSTO?
这语法很面熟。

Roych ,VSTO 的开法语言就是C#
要使用Visual studio tools for office




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3