Office中国论坛/Access中国论坛

标题: 【OneKeyTools源代码分享1】EMF导入 [打印本页]

作者: 只为设计    时间: 2016-2-22 18:07
标题: 【OneKeyTools源代码分享1】EMF导入
本帖最后由 只为设计 于 2016-2-27 16:48 编辑

OneKeyTools是我于2015年1月18日开始着手开发,由于我是开发零基础,所以这里得感谢儒道佛(潘淳)的基础技术指导,使最开始面对代码头疼的我不至于被吓跑。从个人切实感受来说,每个学习阶段都有需要面对的难题。菜鸟需要的是入门,高手需要的是更专业和全面的开发能力。作为过来人,特别感谢佛爷,感谢各位支持我的朋友,最需要感谢的是网上很多默默无名的大拿们,很多代码我是借鉴他们以前发布的博客、回帖等。这也是我发布【OneKeyTools源代码分享】系列的初衷。
今天首先分享的是OK的第一个功能,OK之路由这个功能而展开。

【EMF导入】这个功能主要用于AI素材导入PPT。由于手动操作需要打开选择性粘贴选EMF,并进行两次解除组合,删除透明背景,很是繁琐。通过这个功能,可以实现一键化导入,简单又方便。


【1】全部代码↓

  1. if (forms.Clipboard.ContainsData("EnhancedMetafile"))
  2. {
  3.         PowerPoint.Selection sel = app.ActiveWindow.Selection;
  4.         app.ActiveWindow.View.PasteSpecial(PowerPoint.PpPasteDataType.ppPasteEnhancedMetafile);
  5.         sel.ShapeRange.Ungroup().Ungroup().Select();
  6.         sel.ShapeRange[1].Delete();
  7. }
  8. else
  9. {
  10.         forms.MessageBox.Show("请先复制素材");
  11. }
复制代码


【2】核心代码↓
根据我的心得,最开始菜鸟无论看见多简单的代码,都会发晕。所以我将核心代码提取出来↓
  1. app.ActiveWindow.View.PasteSpecial(PowerPoint.PpPasteDataType.ppPasteEnhancedMetafile);
复制代码
↑这段代码就是核心中的核心。正如我们在PPT中操作一样,打开选择性粘贴对话框,选中emf图片后粘贴到PPT中。

  1. PowerPoint.Selection sel = app.ActiveWindow.Selection;
  2. sel.ShapeRange.Ungroup().Ungroup().Select();
复制代码
↑这个步骤,是模拟PPT中的操作:进行2次解除组合,EMF图片就转为矢量形状了。但是此时通常也会生成一张透明背景,那么要删除掉,所以接触组合后要记得选中

  1. sel.ShapeRange[1].Delete();  
复制代码
↑由于透明背景通常位于最底层,而用代码选中时,最底层的图层在ShapeRange的序号是1。所以此时删除ShapeRange[1]即可。
以上就是核心代码的分析。那么光有核心代码还不够。比如剪贴板里如果没有EMF图片怎么办?所以要加一个判断

【3】判断代码↓
  1. if (forms.Clipboard.ContainsData("EnhancedMetafile"))
复制代码
↑加上判断后,当用户忘记先复制素材,或者复制的素材不支持EMF时,就会提示。如果符合条件,则开始上文的核心代码

上一篇:BCS+A法制作逼真墨滴    下一篇:【OneKeyTools源代码分享2】插入矩形


作者: cky505473444    时间: 2016-2-22 19:37
老爷威武,受教了
作者: 露桥闻笛    时间: 2016-2-22 20:52
感谢小师叔,献花,致敬~~~
作者: tmtony    时间: 2016-2-23 10:57
谢谢分享!




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