|
本帖最后由 只为设计 于 2016-2-24 20:29 编辑
插入矩形用代码实现估计对很多人并不是很多难事。不过对于插件来说,实用性才是最为核心的,所以插件好不好其实跟技术高低的关系不是想象中那么大。比如OneKeyTools的“插入矩形”,虽然算是初级的技术,但结合PPT设计者的实际操作习惯,也可以让使用者爱不释手。
【插入矩形】功能说明
1. 所选为幻灯片,则在每个所选页面左上角新建一个无边框正方形
2. 选中任意图形,则在该页新建与图形等大的无边框的矩形,矩形与原图形位置相同
【主要代码】↓- PowerPoint.Selection sel = app.ActiveWindow.Selection;
- if (sel.Type == PowerPoint.PpSelectionType.ppSelectionShapes)
- {
- PowerPoint.Slide slide = app.ActiveWindow.View.Slide;
- PowerPoint.ShapeRange range = sel.ShapeRange;
- PowerPoint.Shape shape = range[1];
- PowerPoint.Shape nshape = slide.Shapes.AddShape(Office.MsoAutoShapeType.msoShapeRectangle, shape.Left, shape.Top, shape.Width, shape.Height);
- nshape.Line.Visible = Office.MsoTriState.msoFalse;
- nshape.Line.Weight = 0;
- }
- else
- {
- PowerPoint.SlideRange srange = sel.SlideRange;
- PowerPoint.Shape shape = sel.SlideRange[1].Shapes.AddShape(Office.MsoAutoShapeType.msoShapeRectangle, -100, 0, 100, 100);
- shape.Line.Visible = Office.MsoTriState.msoFalse;
- shape.Line.Weight = 0;
- }
复制代码
代码分析
【插入矩形代码】↓- PowerPoint.Slide slide = app.ActiveWindow.View.Slide;
- 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的正方形。
【判断代码】↓
- PowerPoint.Selection sel = app.ActiveWindow.Selection;
- if (sel.Type == PowerPoint.PpSelectionType.ppSelectionShapes)
复制代码 ↑这段代码是判断所选的类型。如果选择的是形状,那么就要插入一个与所选图形等大的无边框矩形↓- PowerPoint.ShapeRange range = sel.ShapeRange;
- PowerPoint.Shape shape = range[1];
- 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相同的宽高和位置了。
那如果所选为幻灯片呢?↓
- PowerPoint.SlideRange srange = sel.SlideRange;
- PowerPoint.Shape shape = sel.SlideRange[1].Shapes.AddShape(Office.MsoAutoShapeType.msoShapeRectangle, -100, 0, 100, 100);
复制代码 ↑由于所选为幻灯片,所以要在所选的幻灯片中新建矩形。sel.SlideRange[1],表示的是所选的第一页幻灯片。如果所选幻灯片为多页,要实现循环可以用for或foreach循环,无非就是把1改为一个变量。for和foreach的用法,可以网上搜搜,很容易找得到,这里不赘述。
【去边框代码】↓
- nshape.Line.Visible = Office.MsoTriState.msoFalse;
- nshape.Line.Weight = 0;
复制代码 ↑这个比较简单
其实从技术上说,本功能代码很简单。但我真正想说的是,编程其实也是一种设计。让一个功能解决多种需求,更需要有设计思维,而不单单是技术的问题。
|
|