设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2695|回复: 6
打印 上一主题 下一主题

【OneKeyTools源代码分享2】插入矩形

[复制链接]
跳转到指定楼层
1#
发表于 2016-2-23 15:56:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 只为设计 于 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;
复制代码
↑这个比较简单

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



本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖1 订阅订阅
2#
发表于 2016-2-23 16:08:00 | 只看该作者
C#?
VSTO?
这语法很面熟。

点评

是的,VSTO开发的PPT插件  发表于 2016-2-23 16:12
3#
发表于 2016-2-23 16:34:54 | 只看该作者
看到代码就头疼,为写代码的程序员点赞
4#
发表于 2016-2-23 17:29:27 | 只看该作者
这效率....又出第二篇了.... PPT开发与设计的双料高人,非设计大爷莫属,且其一直坚持免费教程和讲课,无私分享,这境界和格局更是高山仰止呵.....
5#
发表于 2016-2-23 18:40:16 | 只看该作者
老爷威武!!!!!!!
回复

使用道具 举报

点击这里给我发消息

6#
发表于 2016-2-24 12:06:12 | 只看该作者
roych 发表于 2016-2-23 16:08
C#?
VSTO?
这语法很面熟。

Roych ,VSTO 的开法语言就是C#
要使用Visual studio tools for office
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-20 03:35 , Processed in 0.097861 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表