创建 CorelDRAW 的 COM Add-in

COM Add-in 是一个ActiveX DLL ,它在CorelDRAW 启动时加载或用户选择了Add-in命令按钮时调用。实事上,一个Addin非常类似一个正常的VBA宏,都是附加了初始化代码并被编译进一个单独的模块中。

你可以使用Microsoft Visual Basic 6.0来为CorelDRAW创建一个Addin,同样如果你的系统中安装了Microsoft Office Developer的话,你也可以使用CorelDRAW内置的Visual Basic for Applications来创建一个addin。

下面的样例代码可在Visual Basic 6使用,同样你也可以很容易的将它修改应用于VBA。
在创建一个CorelDRAW的Addin之前,你首先做好以下事情。

1、启动Visual Basic,并在“新建”对话框中选择“(外接程序)Addin”:

这将创建一个包含一个窗体和设计器的Addin对象。

2、将对象管理器中“窗体”下的“frmAddIn”删除,多数情况下你的工程中用不到它。

注意:以上操作将会使add-in的ActiveX 对象命名为 "工程名.设计器名" ,所以在默认的状态下它将会是"MyAddIn.Connect"。 你可以为它换一个有意义的名称,选中该工程,在属性窗口中将其改为其它与该Addin更贴切的名称 (比如,我们将它命名为 "CropMarks")。

3、当你双击对象管理器中设计器下的[Connect (Connect)]时,你将看到设计器窗口,使用这个窗口你可以修改Addin的相关信息,该窗口的重要部分是指定你要为哪一个应用程序创建Addin,在“应用程序”列表框中选中"CorelDRAW" 并保证下面列表框中的程序版本与你要使用的"CorelDRAW版本一致。同样你也可以指定你的Addin的显示名称和描述。


4、关闭Addin设计器窗口。

5、在对象管理器中选中Addin 设计器并右击,在弹出菜单中选择“查看代码”。

6、将代码窗口中所有的代码删除(默认代码是与VB外接程序相关的,与CorelDRAW无关)。
现在,你将拥有一个空的适合于编写"CropMarks - Connect (code)"的代码窗口。

7、移除Microsoft Office类库并添加引用CorelDRAW 的类库,鼠标单击“工程”菜单,在“引用”对话框中移除"Microsoft Office 10.0 Object Library"(此处与你安装的OFFICE版本相关,OFFICE2000是10.0)前的对号,并勾选列表中的"Corel - CorelDRAW 12.0 Library" (确保 "Microsoft Add-In Designer" 被勾选):

8、单击确定按钮关闭引用窗口。

9、回到代码窗口选择左上角的事件下拉框中的"AddinInstance" ,这将在代码窗口中自动添加一个"OnConnection"事件。

10、在第二个下拉框中选择"OnDisconnection"来添加另一个事件,现在你已经具有了Addin响应操作的两个主要事件:

OnConnection在Addin被加载并需要初始化的时候调用,此时,它的第一个参数Application必将引起你的注意,它是CorelDRAW的应用程序对象实例,当你试图连接任何CorelDRAW应用程序对象模型时,你必须使用此对象。

你可以使用一个公用变量来贮存一个应用程序对象的引用以备将来使用

注意:像下面的代码是不推荐的:
Set Draw = New CorelDRAW.Application

Set Draw = CreateObject("CorelDRAW.Application.10")

因为如果系统中运行了多个CorelDRAW的副本,你可能不会用你的Addin连接“正确的一个”,不管用何种方式,事实上当Addin被加载时,应用程序对象已被当作一个参数传递给OnConnection事件。
你可以使用OnConnection事件来添加一个Addin Hook对象到CorelDRAW addin列表。AddinHook对象是一个事件接收器,当addin菜单命令被点击时,CorelDRAW用它去调用addin。
OnDisconnection在应用程序关闭和卸载Addin模块时被调用。这时,你必须释放所有的CorelDRAW引用,否则应用程序可能不会完全退出并驻留内存。

11、添加下面的代码到 OnConnection 和 OnDisconnection事件:

Dim Draw As CorelDRAW.Application
Dim WithEvents CropMarksAddin As CorelDRAW.AddinHook

Private Sub AddinInstance_OnConnection(ByVal Application As Object, _
             ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
             ByVal AddInInst As Object, custom() As Variant)
    Set Draw = Application
    Set CropMarksAddin = Draw.AddIns.Attach(cdrAddinFilterNone, "Create &CropMarks")
End Sub

Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As _
             AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
    Set CropMarksAddin = Nothing
    Set Draw = Nothing
End Sub


在上面的例子中,应用程序对象被设定为一个公用变量,一个新Addin Hook被Addins函数集的Attach方法加载到CorelDRAW中。

在Attach方法中的第一个参数指定哪一个事件你不想从CorelDRAW中接收到。如果你想接收所有消息你可以指定为cdrAddinFilterNone。
第二个可选参数指定菜单的标题,它将添加到Tools>Visual Basic>Addins 菜单。上面的方法添加了 "Create CropMarks" 菜单。
请注意AddinHook对象定义时必须使用WithEvents关键字,所以你必须为Addin事件提供事件处理器。

12、定义Addin事件处理器。在代码窗口左上方的下拉框选择"CropMarksAddin",一个新的事件CropMarksAddin_Execute将被添加。该事件通过点选相应的Addin菜单项被激发。

13、添加以下代码到Execute事件以定义你的Addin代码:

Private Sub CropMarksAddin_Execute()
    Dim x As Double, y As Double, sx As Double, sy As Double
    If Draw.Documents.Count > 0 Then
        If Draw.ActiveSelection.Shapes.Count > 0 Then
            Draw.ActiveSelection.GetBoundingBox x, y, sx, sy, True
            With Draw.ActiveLayer
                .CreateLineSegment x - 0.5, y, x, y
                .CreateLineSegment x, y - 0.5, x, y
                .CreateLineSegment x + sx, y, x + sx + 0.5, y
                .CreateLineSegment x + sx, y - 0.5, x + sx, y
                .CreateLineSegment x - 0.5, y + sy, x, y + sy
                .CreateLineSegment x, y + sy, x, y + sy + 0.5
                .CreateLineSegment x + sx, y + sy, x + sx + 0.5, y + sy
                .CreateLineSegment x + sx, y + sy, x + sx, y + sy + 0.5
            End With
        End If
    End If
End Sub


14、保存工程并编译到一个DLL文件中,打开Visual Basic的文件菜单>生成CropMarks.dll,将addin的DLL文件保存到指定的文件夹,当DLL文件编译时,它会自动为CorelDRAW注册。
现在你可以运行CorelDRAW并查看它如何工作。CorelDRAW启动后,创建一个新文档并创建一个图形。保持此图形被选中,单击工具菜单> Visual Basic>外接程序Addins,在弹出菜单中选择"Create CropMarks"项。Addin将会被执行,CorelDRAW文件中选中的图形周围被创建了裁切标记。

你可以从这里下载Visual Basic 6源码:
[本日志由 Admin 于 2017-04-27 07:26 AM 更新]
上一篇: Excel VBA 数组排序
下一篇: Vista 服务和进程优化手册[ccBoy v0.99]
文章来自: oberonplace.com
引用通告: 查看所有引用 | 我要引用此文章
Tags: COM Add-in VB VisualBasic CorelDRAW
相关日志:
评论: 2 | 引用: 0 | 查看次数: 19321
fsivanl
fsivanl[2014-10-07 01:39 AM | | Mail To:fsivanl at 21cn.com | 61.144.82.253 | del | 取消审核 | 回复回复]
板凳
工具菜单> Visual Basic>外接程序Addins

这个找不到
fsivanl
fsivanl[2014-10-07 00:09 AM | | Mail To:fsivanl at 21cn.com | 61.144.82.253 | del | 取消审核 | 回复回复]
沙发
后面的14点里,为什么找不到所说的工具菜单项?!
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 500 字 | UBB代码 关闭 | [img]标签 关闭