Office中国论坛/Access中国论坛
标题:
【OneKeyTools源代码分享2】插入矩形
[打印本页]
作者:
只为设计
时间:
2016-2-23 15:56
标题:
【OneKeyTools源代码分享2】插入矩形
本帖最后由 只为设计 于 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;
复制代码
↑这个比较简单
其实从技术上说,本功能代码很简单。但我真正想说的是,编程其实也是一种设计。让一个功能解决多种需求,更需要有设计思维,而不单单是技术的问题。
上一篇:
【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