CorelDraw插件开发教程(2):录代码与查帮助
Category:COREL插件
CorelDraw插件开发教程(2):录代码与查帮助
刘肖健
浙江工业大学 工业设计研究院
3. VBA的学习:录代码与查帮助
VBA和CorelDraw提供了丰富的学习手段和学习资料,所以本教程就不再浪费时间讲那些用户可以自己查到的内容了,而重点放在各种完整的案例上,让读者积累一些实战经验。本节讲一下如何使用学习资料。
3.1 录代码
录代码是VBA的一个优秀功能,它可以把用户的手工操作全部记录成代码形式,帮助用户编写程序实现常规手工操作的内容。
看一下刚才见过的宏工具条:
下面通过一个案例来学习代码的录制。这个案例是在当前页面内画一个圆,并给它填色。录制代码的过程如下:
1)按下“录音键”
宏工具条上的按钮图标做得跟传统的录音机非常像。“录音键”是左数第四个按钮,也就是那个红色大圆点。录音键按下后,所有的用户操作都会被记录成代码形式,直到按下停止键结束录制。
录音键按下后,会跳出对话框询问录下来的代码(宏)保存在哪里。
默认选项是保存在当前打开的cdr文档中,即Hello world.cdr。对话框中的“宏名”是指生成的子程序(Sub)名称,默认的名称是Macor1、Macro2等,可以手工输入我们想要的子程序名。
2)屏幕操作
在屏幕上拖出一个圆,然后为其赋色。完成后点宏工具条最右侧的停止键(方块形状的键),结束录制,保持宏。如果中间有跳过不想录下的操作,则按下暂停键,即两条竖线图标的按钮。再次按下暂停键可以重新开始记录。
3)整理代码
在IDE的工程资源管理器中,可以看到Hello world工程中多了一个RecordedMacros模块:
双击RecordedMacros模块,可以在右侧的代码窗口看到刚才记录下来的代码,如下:
Sub Macro1()
‘ Recorded 2018/7/8
‘ Description:
Dim s1 As Shape
Set s1 = ActiveLayer.CreateEllipse2(3.587142,7.066055, 1.261654, -1.261654, 90#, 90#, False)
s1.Fill.ApplyNoFill
s1.Outline.SetProperties 0.003, OutlineStyles(0),CreateCMYKColor(0, 0, 0, 100), ArrowHeads(0), ArrowHeads(0), False, False,cdrOutlineButtLineCaps, cdrOutlineMiterLineJoin, 0#, 100, , , 5#
s1.Fill.UniformColor.CMYKAssign 0, 100, 100, 0
End Sub
下面简单解释一下这几行代码:
1)子程序框架
每次记录得到的代码都是以一个子程序(Sub)的形式保存,所以可以在这段代码的头尾两行看到完整的子程序定义。第一行中的“Macro1”就是用户给定或默认的子程序名。
2)注释
单引号“’”后面的内容是注释,运行时会跳过不执行。每行注释前面都要加单引号。所有注释都以绿色显示。
3)定义对象
第一句Dim s1 AsShape定义了一个Shape对象,用s1表示随后要建立的图形对象。Shape是CorelDraw的对象类型,页面中所有可以直接点选的对象都是Shape类对象。
4)画圆
Set s1 = ActiveLayer.CreateEllipse2(3.587142,7.066055, 1.261654, -1.261654, 90#, 90#, False)
这一句代码在当前页面(AcriveLayer)中,用CreateEllipse2函数画一个圆,然后用对象名s1来指代这个圆。以后要对这个圆进行操作(比如填色),就针对s1来就行了。
画圆的时候指定了几个参数,它们排列在函数名后面的括号里,其含义依次为:圆心x坐标、圆心y坐标、x轴半径、y轴半径、起始角、终止角。CreateEllipse2实际上是个画椭圆的函数,把椭圆的长短轴参数设置成一样就变成了正圆。
鼠标操作的“画圆”这个动作记录下来三句代码。除了上面一句,还有两句:
s1.Fill.ApplyNoFill
s1.Outline.SetProperties 0.003, OutlineStyles(0),CreateCMYKColor(0, 0, 0, 100), ArrowHeads(0), ArrowHeads(0), False, False,cdrOutlineButtLineCaps, cdrOutlineMiterLineJoin, 0#, 100, , , 5#
这两句是设置刚画出来的圆s1的默认填充属性和默认边线属性。其中第一句是设置填充属性为“无填充”;第二句是设置边线的宽度、线型、色彩、箭头、端部形态等等,都在一个语句中完成。不用试图去记住这个长长的语句,需要时录一下代码,或者去帮助文档的示例中拷贝然后把对象位置的参数改成自己设置的参数即可。
5)修改图形属性
最后一句是为圆填色。
s1.Fill.UniformColor.CMYKAssign 0, 100, 100, 0
这句代码的含义是为s1填充CMYK红色。
录下来的代码可以直接播放,也就是把刚才鼠标记录下来的操作让程序再做一遍。
播放代码的操作如下:
1)在要播放的子程序内部点击一下,令闪烁的光标出现在该子程序内部,表示要执行的是这个子程序。
2)点击IDE界面上的“执行”按钮,也就是工具条上的有实心三角形图标的按钮:
上图左侧即执行按钮,中间和右侧分别为暂停程序和停止运行。如果程序出错,会有黄色背景的文字出现,指示出错语句的位置。此时可以点击右侧停止按钮令其消失,恢复可编辑状态。
举例说明:我们把上面的Macro1子程序的最后一行改为:
s1.Fill.UniformColor.CMYKAssign 0,100, 100
跟原来相比,少了最后一个参数,这显然是不对的,因为指定一个CMYK色需要4个参数,少了一个就会出错。运行后,果然得到错误提示:
IDE把出错的函数CMYKAssign拖黑了,并在消息框中给出了错误类型提示。“参数不可选”的意思是:函数CMYKAssign的参数必须给齐,没有Optional(可选)类型的参数。Optional类型的参数是指用户可以选择给出或不给出,如果不给出,则采用默认值。
点击消息框的“确定”按钮后,消息框消失,屏幕变成了这样:
出错的子程序、出错的函数都标示得清清楚楚。同时执行按钮工具条也发生了变化:
这时可以修改代码,也可以点击右边的停止按钮(方块)让错误标示消失。
3.2 查帮助
本教程不打算单独讲VB语法,只是在讲案例讲到时顺带解释句。因为VB语法已有大量的学习资料,找些Excel VBA教程来看看即可。好在VB语法也不复杂,几个案例看下来也大致看懂了。就算看不懂,依葫芦画瓢也能编写出能用的程序来。
这里说说CorelDraw编程帮助的查看方法。
操作非常简单:把要查的关键字(比如函数名CreateEllipse2)拖黑,按下F1键,就可以直接显示相关帮助内容。CreateEllipse2函数的帮助页面如下:
上述帮助页面中有各个参数的详细说明,最后还有一个完整的示例。示例代码全文如下:
Sub Test()
Dim s As Shape
Dim lr As Layer
Set lr = ActiveLayer
ActiveDocument.DrawingOriginX = 0
ActiveDocument.DrawingOriginY = 0
Set s = lr.CreateEllipse2(0, 0, 1)
s.Fill.UniformColor.RGBAssign 255, 255, 0 ‘Yellow
Set s = lr.CreateEllipse2(0, 2, 2, 1)
s.Fill.UniformColor.RGBAssign 0, 255, 0 ‘Green
End Sub
VBA帮助文档中的示例代码都是完整的子程序,拷贝下来放进程序里就可以直接运行。
我们把这段示例代码复制到刚才的Macro1子程序下面:
两个子程序之间会自动产生一条分隔线。
把光标调入刚拷贝进去的子程序Test中,然后点击执行按钮(三角形的按钮)。这个程序立刻被执行,页面中得到的图形如下:
还挺好看的。我也是第一次运行这个示例代码。
在上述CreateEllipse2函数的帮助文档中,在第5个参数StartAngle右边的解释中,可以看到它就是我们刚才提到的Optional类型的参数,即该参数可以不用给出,系统采用默认值90。
CorelDraw VBA的帮助文档有两个,一个是有关CorelDraw的类库与函数的用法,另一个是VBA本身的类库与函数的用法,以及语法相关的内容。按下F1后调出的是哪个帮助文档取决于所选的关键字。
刚才查阅的关键字“CreateEllipse2”是CorelDraw的函数,因此调出的是CorelDrawVBA的帮助文档。我们可以再测试一下把关键字“Dim”拖黑,按下F1键得到的是VBA语法帮助:
这个帮助文档是中文版的,大部分内容也有示例供学习。注意左上角写的是“Visual Basic参考”,和刚才的“CorelDrawVBA Help”不是同一个文档。
帮助文档提供了详细的语法解释和丰富的示例,因此遇到问题请先查阅帮助。本教程将避免详述帮助文档中可以直接查到的内容,而把注意力集中在设计功能和创意概念的实现上。
课程开在第10周,中午提醒同学们选了课就没法退了(只有第二周可以退选),结果立刻就有人drop。根据我的经验,这门课旁听能坚持下来的几乎没有,发教程算是补救措施吧。
http://mip.i3geek.com