CorelDraw插件开发教程(1):入门
Category:COREL插件
CorelDraw插件开发教程(1):入门
刘肖健
浙江工业大学工业设计研究院
1. FAQ
开始学习之前,有些东西需要先了解一下。
1.1 这个教程是教什么的?
这个教程主要面向没有编程基础的设计师,是为了提高设计师的CAD软件应用技能,让设计师能定制实现一些复杂的处效果,而不是培养职业程序员。
这个教程认真学完后,读者就可以使用Visual Basic for Applications,即VBA编程工具在平面矢量设计软件CorelDraw上开发自己的插件(二次开发),来生成一些特殊的、复杂的、CorelDraw的原有功能不够用的图形,如下图所示。
上图是利用VBA编写的插件界面及其生成的图形效果。其他案例还有很多,创意之代码上可以找到34个。
1.2 为什么是CorelDraw和VBA?
对于CAD编程,CorelDraw平台和VBA语言都不是唯一的,甚至也不是最好的选择。平面矢量设计软件很多,CorelDraw不是用户群体最广的(比如AI更普及),也不一定是最好用的。选择CorelDraw的原因有如下几个:
1) CorelDraw支持VBA。VBA是微软推出的二次开发工具,有规范化的开发环境,并且可以制作通用用户界面。VBA为设计师等非职业的开发者节省了很多学习时间,可以让设计师把精力集中于创意概念的实现,而不是繁琐复杂的程序编写。
2)VBA可以录代码,适合初学者。VBA可以像录音机一样把用户的每一步操作(除个别操作外)自动记录成代码,方便观察学习。这对没有编程基础的初学者快速上手是个极大的帮助,简化了很多复杂的编程工作。
3)VB语言应用广泛。许多2D和3D设计软件支持VBA或VBScript,学会VB的基本语法有助于举一反三,迅速掌握其他CAD软件的二次开发技能。如Illustrator和Rhinoceros支持VBScript,Solidworks支持VBA,CATIA同时支持VBScript和VBA,等等。
4)VBA学习资料丰富。VBA应用最多的还是Excel。CorelDraw二次开发中涉及界面制作、函数调用等通用操作的内容可以参考Excel VBA的资料,两者大同小异。如此,本书就可以集中精力讲述与CorelDraw二次开发有关的内容,而不用浪费篇幅解释随处可得的基础技术。
总之,对于一个初学编程且主要是为了满足自己需求的设计师,所需要的既不是一个流行的平台、也不是一门强大的语言,而是一个可以快速上手、中途放弃概率最低的渠道和工具。CorelDraw VBA就是它了。
1.3 难学吗?
不难。
但是要开发出一个优秀的插件,需要一定的经验和对这项工作的熟练程度。总之,跟手绘、建模等大部分设计师的本职技能一样,入门很简单,精通看个人。
事实上,CorelDraw有很多种开发工具,除了VBA还有Python、Java、Pascal、C++等,VBA是面向用户而不是职业开发人员的。使用VBA的很多都是设计师而不是程序员,他们开发的插件很多都是提高自己的设计效率和创意表达水平,而不是拿到软件市场上去买。也就是说,这是一个发烧友工具,是最适合设计师使用的。
1.4 零编程基础、数学差的人能学会吗?
可以。
这个教程就是针对零编程基础和初中数学水平的人。
很多人对编程有误解,认为只有数学好的人才适合编程。实际上,编程工作最大的挑战不是来自于数学,而是来自于逻辑——有条有理地分析、分解、规划、完成一项工作的逻辑,以及出差错时寻找、定位、解决问题的逻辑。
我教过的很多艺术生都表示,学了编程后,做事的严谨性和条理性大大提高。要相信他们。
2. Hello world
跟所有教写代码的教程一样,我们的第一课也是写Hello world。这个世界上的人可以分为两种:会写代码的和不会写代码的。Hello world成功运行后,你就是第二种人了,Hello world是给编程世界的第一句问候。你可以在Hello world基础上不断扩充,建立自己的魔法世界。
使用VBA编写的程序叫“宏”(macro),它可以内嵌在CorelDraw的.cdr文档中。下面我们就建立一个宏,让cdr文档在打开的瞬间弹出一个对话框,显示“Hello world!”
首先创建一个新的cdr文档,将其命名为Hello world.cdr。
本教程均以CorelDrawX3为平台讲解,更高级的版本(X5~2018版)大同小异,其中的差异之处会在文中逐一给出解释。
2.1 VBA编程环境简介
VBA的编程环境一般叫IDE,即集成开发环境(Integrated Development Environment)。详细的IDE功能介绍请参考Excel VBA教程,有很多,这里就不浪费宝贵的版面介绍这些随处可见的东西了。
打开Helloworld.cdr,进入VBA编程环境。
进入VBA编程环境有三种方法:
■ 快捷键
Alt+F11
■ 菜单
工具/VisualBasic/Visual Basic 编辑器
■ 工具栏
CorelDraw有个宏工具条,提供了进入VBA编程环境的快速入口。默认状态下,这个宏工具条不显示。在工具栏空白处点右键,从下拉菜单中选择Visual Basic for Applications,如下图所示:
宏工具条是这样的:
点左边第二个按钮进入IDE,如下图所示。
除了菜单和工具条外,VBA的IDE主要分为三个区:工程资源管理器、属性窗口和代码窗口。
■ 工程资源管理器
左上方是工程资源管理器,如下图所示:
当前所有可用的插件程序都列在这里,以类似文件管理器的树形方式组织。当然,你的工程资源管理器中不会有这么多东西,最多有个三条吧,因为上图大部分东西都是我编写放在里面的。
名为VBAProject(Hello world)的项目就是我们刚创建的cdr文档,如果其中有内嵌代码(现在还没有),会列在这里。项目标题的括号里是当前打开的cdr文档名(省略了扩展名cdr)。其他都是gms文档,项目标题后的括号里给出了gms文档的文件全名。下节会解释gms。
■ 属性窗口
左下角是属性窗口,如下图所示:
属性窗口用来设置软件界面的窗体和按钮、输入框、选择框等控件的名称、大小、位置、色彩、贴图、文字等属性。
■ 代码窗口
右侧最大的区域是代码窗口,我们就在这里写代码。目前还是空白。
2.2 在cdr文档中建立内嵌程序
我们要求cdr文档在打开时立刻就弹出对话框,这个动作通过一个事件子程序实现。
CorelDraw 的VBA定义了一个“Open”事件子程序,凡是写在这个子程序里的指令,都会在cdr文档打开的瞬间被执行。
以下是在Open事件子程序中创建“显示Hello world对话框”这一动作的流程:
1) 在VBAProject(Hello world)中找到ThisDocument,双击,在右侧显示它的代码窗口。
2) 调出Open事件子程序。
代码窗口上方有两个下拉菜单,把左边下拉菜单的“通用”切换为“Document”。
切换完的瞬间,下方的空白代码区会出现一个空的子程序:
这是右方下拉列表的默认选项。不用理它,删掉也行,留着它也行,不碍事。
3) 在代码区右上方的下拉菜单中选择“Open”条目:
“Open”条目选好后,这个子程序的代码框架立刻就出现在代码区:
这个子程序的正式名称叫Document_Open。其代码框架包含头尾两行,头部是子程序定义,尾部实结尾标志。写在这头尾两行之间的内容就是打开cdr文档时要执行的指令。
这两句代码框架是CorelDrawVBA内部定义的,不要修改它。
4) 写入“显示Hello world对话框”的指令。
这个指令非常简单,只有一行,写在头尾之间:
Private Sub Document_Open()
MsgBox “Helloworld !”
End Sub
5) 保存cdr文档,关闭,重新打开。
如果过成功的话,Helloworld.cdr文档打开时我们会看到如下警告对话框:
系统提示文档中有宏,不过我们编写的宏是安全的,选择“启用宏”,于是我们就看到了Hello world对话框:
6) 修改系统安全设置
如果警告有宏的对话框没有出现,Hello world对话框也没出现,则表明我们编写的宏被系统拦截了。这时需要对系统的安全设置做一些改动。
从菜单进入安全设置面板:工具/VisualBasic/安全性:
弹出如下对话框:
选择“中”,即弹出宏警告对话框,让用户决定是否运行宏。
至此,一个完整的Helloworld程序编写完毕。
2.3 开发独立的gms插件程序
如果一个程序需要频繁使用,内嵌在cdr文档中就不方便了,我们希望它能像CorelDraw自带的工具按钮一样使用。这种解决方案也有,就是把程序打包成扩展名为gms的独立文档,放在硬盘的指定位置,这样就可以一次安装、永久使用了。
创建gms程序的流程如下:
1)在CorelDraw安装地址的“\Draw\GMS”文件夹中找到FileConverter.gms文件,将其原地复制一份并改名为Hello world.gms。
2) 重启CorelDraw。注意,gms文档是打开CorelDraw时加载到IDE的工程资源管理器中的,所以要想看到新生成的gms,必须重启CorelDraw。
3) 在IDE的工程资源管理器中找到它:
寻找时注意看项目名称后面的括号,里面是gms文件名。前面括号外的名称是工程名,工程名可以在左下的属性窗口里修改。下面两个图是修改前后的工程名。
注意,工程名跟文件名不一样,里面不能有空格,否则会提示命名非法。所以这里取的工程名是不带空格的HelloWorld。改名后,我们会发现工程资源管理器中它的工程名已经变了:
4) 删除gms中的旧内容
点项目名称左边的“+”号,打开工程,我们会看到里面的内容:
这些内容跟我们无关,统统删除。删除办法是右击条目,选择“移除”,在提示“是否导出”的对话框里选“否”。删空之后,HelloWorld工程变成了这样一幅干干净净的样子:
5) 添加新模块,写入代码
在工程名上右击,选择“插入/模块”,添加一个新模块。
新模块默认的名称是“模块1”:
前面提到,这个模块可以从属性窗口改名,我们把它改为“Entrance”。注意,不能改为“HelloWorld”,因为这个名字已经被占用,作为工程名了。
双击新建的“Entrance”模块,把右侧切换到它的代码窗口,在里面写下如下三行代码:
Sub HelloWorld()
MsgBox “Hello world!”
End Sub
保存gms。
6) 制作按钮
下面我们在CorelDraw的界面上制作一个按钮来运行这个子程序。
从主菜单进入“工具/选项”;然后从左侧进入“工作区/自定义/命令”;在中间的“命令”下拉列表中选择“宏”,当前所有gms程序文档中定义的子程序(Sub)都会出现在下面的列表中;选择我们刚写好的Entrance.HelloWorld子程序(它表示Entrance模块中的HelloWorld子程序):
把Entrance.HelloWorld子程序直接拖到工具条上,会产生一个新的工具按钮,其默认图标如下图所示:
在上述选项对话框右侧点“外观”标签,可以修改按钮图标:
把图标改成今年流行的“基佬紫”背景色和黄色的字母“H”,最终的图标是这个样子:
点“确定”保存按钮设置,并关闭选项对话框。
点击这个按钮测试一下,不出意外的话,你会得到Hello world的问候。
7) 关闭CorelDraw,然后重新打开
如果CorelDraw意外退出,会导致做好的按钮丢失。所以关闭一次令其保存,下次再打开,它就会永远留在工具栏上。
上面第5步“制作按钮”中,也可以把子程序拖到菜单栏上产生一个新的菜单,或拖到已有的菜单上,等下拉菜单出现后将其拖到某个菜单项位置上,放开鼠标,产生一个新的菜单项。
如果不想要这个按钮了,打开选项对话框,把按钮拖回来然后点“确定”即可。
刚才编写的Helloworld.gms文档可以拷贝到其他电脑上使用。
2.4 给程序加密
如果我们接了商业项目,把插件做出来卖给甲方,但是不想让甲方知道插件是怎么编出来的。也就是说,让甲方可以使用插件的多功能,但不让他看到代码。这种情况下,需要对程序进行加密。
加密方法:
1) 工具/VBAProject属性
2) 打开“保护”面板
勾选“查看时锁定工程”,然后输入和确认密码。点击“确定”保存。
下次打开代码时就会出现输入密码的对话框:
不过这个密码很容易破解,聊胜于无。
Trouble Shooting
1. 打开CDR文档没出现插件界面
参见2.2节“在cdr文档中建立内嵌程序”中有的系统安全设置方法。
CorelDraw X7或更高级的版本中,有专门的宏管理器面板,就像对象管理器一样放置在界面右侧,打开方式是:窗口/泊坞窗/宏管理器。
上图中的Document_Open可以双击打开,效果就如CDR文档打开时加载一样。
但是上述Document_Open的出现有个条件,就是2.2节它的定义代码中,Private一词要删掉,否则它就是私有的,只能被其他子程序从内部打开。
2. 打开CDR文档时死机
CDR文档打开时,下方的绿色加载进度条走到一半死机,如下图所示:
其实系统没死,只是下述宏警告对话框弹出后不知为什么(我真不知道)藏到了CDR界面后面,你看不到它,但又必须响应它才能激活CDR主界面,所以看起来就像死机的样子:
如果cdr文档是直接从资源管理器拖过来打开的,通常资源管理器也会处于假死状态。
解决办法是从后台调出宏警告对话框。具体步骤如下:
1) 按下Ctrl+Alt+Del组合键,调出任务管理器:
2) 从任务列表中选择“Microsoft Visual Basic”(有时名称显示为“安全警告”),然后点击下方的“切换至”按钮,则宏警告对话框显示。
感谢关注创意之代码,否则考不及格(该教程是写给我学生看的,这样上课我可以轻松一点)。
http://mip.i3geek.com