初识Coreldraw Visual Studio Tools for Applications

这篇具有很好参考价值的文章主要介绍了初识Coreldraw Visual Studio Tools for Applications。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

相信我们很多人都有用过Coreldraw Vba二次开发来编写插件操作Coreldraw做设计排版的经历。VBA代码组织不够理想,错误提示不够友好,批量修改不够方便。所以Coreldraw引入了微软的VSTA,集成Visual Studio Tools for Applicatons试图来解决这一系列问题。Coreldraw Vsta默认用C#语言编写插件,而C#语法严谨,代码编写自动提示、批量更改和错误提醒体验都很优秀,所以我们探讨一下是否可以从Visual Basic for Applicatons 转向Coreldraw Visual Studio Tools for Applications。


一、初识CoreldrawVisualStudioToolsfor Applications

试运行Coreldraw Visual Studio Tools for Applications
首先打开CorelDRAW,选择菜单命令“工具”,鼠标依次移到“宏”-”VSTA编辑器”,单击。如下。
初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

可能会出现下面的提示。

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

确定。会再弹出以下错误提示。

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

这就是提示我们要先安装Microsoft Visual Studio Tools for Applications 2017。可以从https://www.microsoft.com/zh-CN/download/details.aspx?id=56046网页下载安装。注意,由于CorelDRAW引入了VSTA,而安装要先关闭有关的Visual Studio工具,有可能要要先关闭CorelDRAW,安装才能完成。安装完成就可以打开VSTA编辑器了。
这里我们再次选择菜单命令“工具”,鼠标依次移到“宏”-” 宏管理器”,选择它,在右边的泊物窗中可以看到Visual Studio Tools for Applications。如下。

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

依次展开Visual Studio Tools for Applications,如下。

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

这里有一个项目VSTAGlobal,从字面上理解就是全局VSTA的意思,和Visual Basic for Applications中的GlobalMacros类似,是配置CorelDRAW的启动和退出等环境事件用的。单击Macro1,弹出以下窗体。

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

这是C#代码调试中很常见的界面,方法是MessageBox.Show,就是消息框,用于验证你的代码数据或提示用户,和VBA中的MsgBox用法类似。这个消息框会阻塞代码的运行,只有确定后后面的代码才会继续继续。题外话,在Timer事件中千万不要不要插入消息框,由于Timer是开另外的线程执行并且是间隔事件的循环,它就会弹出无数个消息框,让你关都来不及关。这里我们就点“确定”。

二、Visual Studio Tools for Applications的编程环境

还是在宏管理器界面,右击Macro1,选编辑,首次进入要等一会儿才会调出VisualStudio,界面如下。

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

可以看到,Vsta编程环境和外部VisualStudio编程环境没多大区别。
我们先找到解决方案资源管理器,选择解决方案,再选择属性。如下。

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

可以看到,这个全局宏保存在电脑C盘很深的目录下,如果你要在这里写代码,重装电脑可能要先备份这个项目。如下。

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

再看项目属性。再回到资源管理器,右单击VSTAGlobal,进入如下界面。

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

可见输出的类型是类库,应该是.dll,但查看解决方案本地目录,找不到Global.dll,也许这是VSTA的特性。另外dll也不能直接运行,要回到Coreldraw的工作环境才能执行VSTA宏。

目标框架,可以选择.net版本,高版本会有一些新的结构、对象、和方法等。切换版本一般没有问题,也有可能出现一些错误需要手动去更改。

项目结构
初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

切换到资源管理器,把下面的文档都展开。如下。

可以看到,项目结构主要包括属性、引用和代码文档。属性下是项目程序集信息的代码文档;引用下是本项目所导入的DLL程序集;C#代码块中有两个代码文档,代码文档下有类的定义,类的定义下有属性、变量、方法的定义等。CorelDRAW 已经为我们配置好了二次开发的环境,Corel.Interop.VGCore.dll是提供给用户开发插件的的程序集,在CorelDRAW的安装目录可以找到。

代码结构和代码分析

Macro.cs
切换到Macro.cs文档窗口,如果没打开,可以在资源管理器中找到双击打开。如下。

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

代码“using Corel.Interop.VGCore;”是指在本文档中引入Corel.Interop.VGCore的VGCore程序集信息,让代码可以直接定位VGCore,暴露里面的接口、类型等给用户,让用户可以便捷的访问。比如VGCore中有一个类Shape,您就可以在Macro1中这样写:
Shape shape = app.ActiveShape;
如下图。

如果去掉“using Corel.Interop.VGCore;”这一句,“Shape shape = app.ActiveShape;”会出错,Shape一词下面会有波浪红线,鼠标停放在单词上面会有错误提示。如下。

您应该这样写:

Corel.Interop.VGCore.Shape shape = app.ActiveShape;

这样才不会出错。如下图。

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

这样写代码就不方便了,因为我们的主要操作对象是CorelDRAW,所以引用VGCore是必须的。
但这样也会产生一些冲突,比如引用块中 “using System.Windows.Forms;”和“using Corel.Interop.VGCore; ”同时存在,你就不能在Macro1中这样写:
Application bpp = new Application();
错误如下图:

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

这是因为System.Windows.Forms程序集和Corel.Interop.VGCore程序集都有Application这个类,所以编译器无法确定你的Application是指代哪个程序集的Application,所以发生定义冲突。
考虑到Forms也是我们常用的程序集,VSTA已经自动引用,有没有其它的冲突要随着编程的深入才知道。为了解决这个问题,我们可以文档引用块再写入以下一行:
using Cdr = Corel.Interop.VGCore;
对于错误的代码“Application bpp = new Application();”我们就可以改:
Cdr.Application bpp = new Cdr.Application();
如下图。

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

我们来测试一下,回到CorelDRAW工作区的Visual Studio Tools for Applicatons。如下图。

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

双击Macro1,运行一下C#宏,弹出框中有以下错误:

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

发生了对象和类型转换的错误,就是“Cdr.Application bpp = new Cdr.Application();”这条代码有问题,实际上Cdr.Application已经在配置时已是实例化对象,是不能new一个的,改为以下代码:
Cdr.Application bpp = app as Cdr.Application;
再次运行,就没有问题了。但如果不能new一个Cdr.Application,上面的代码就没有必要了,app和bpp都指向同一个对象,app如果消失,bpp就同时消失了,只是用不同的变量名去代表Cdr.Application而已。
namespace VSTAGlobal:
namespace,命名空间,“VSTA”是“Visual Studio Tools for Applications”的简称,“Global”是“全局的意思,合起来VSTAGlobal是命名空间的名称。命名空间是.net时代的新名词,听起来有些高大上,一时让人难以理解。name名字,space空间,这两个词加在一起直译就是名字空间了,译为名字空间实在是实在是无法理解,就改为命名空间了。初一听,也就有点莫名其妙的感觉。按本人的经验,你就去掉“name”,把他当作“space”就行,可以理解为代码工作区,意思是你该调用的东西(using)都给你加进来了,你就从这里开始写代码的工作吧。Coreldraw有一个词,叫工作区,觉得namespace改为workspace或codespace比较好。当然一个C#代码文档中可以加入多个命名空间,一般是复制别人或者自己别处的代码供使用,如果有必要,我们再来研究。
顺便 提一下,C#代码多是用大括号来定义代码结构,有起始的大括号就要有结束的大括号来对应。如果编写代码时大括号对不齐,可以选中某一块代码,Ctrl+K组合键,再按F键快速对齐代码。但如果代码中大括号无法一一对应或存在其它错误,就无法起作用了,更正错误后才能用快捷键对齐。要注释某一行代码就在代码前面用“//”就可以了,多行代码注释也是用Ctrl+K组合键先定义块,然后C键就可以了。取消某条代码就删掉前面的“//”, 取消多条代码,也是用Ctrl+K,再按U键。这些都比VBA方便。一行代码的结束就按回车键,和VBA一样。C#中的名称如果要更改,要把鼠标停留在更改的名称上,看是否要让VisualStudio自动更新。
public partial class Main:class,类的意思,按本人的经验来理解,就是比拟自然界的物以类聚现象来规划设计的,能成为一类的都有相似的特征、属性、行为、功能,比如人类就能有社交属性,能写代码等;在程序代码中就是能给你定义一些属性、能执行一定的方法(函数)、在特定的情况下会发生一定的行为(事件函数)等的代码集合。
Main:就是类的名称,比如这就是动物类,这就是植物类等。Main类主要类,让人知道这里一般是程序入口点。
Public:这是公共类,如果是用在人类方面就可以理解为公众类。既是公众,就是公开的,别的类里面的成员都可以通过某种方法去访问(取得)你公开的(Public)的某些东西(属性),或借用你的某种工具(函数,方法),而这种工具或方法就是函数里的代码块。但访问Public类时都要new一个Public类,这是不是可以理解为你可以复制一个我来用,但不能原原本本的把我搬过来,不然就有冲突了,因为可能还有还有别的人约会我。
Partial:单从字面上理解就是分开的意思,实际上也是这样,就是VisualStudio把这个类分成不同的文档(同样的命名空间)存放了,就像窗体构造代码和应用代码分开一样。这里的结构有些新,还要深入研究。
private void Startup() :函数,也可以叫方法。这里是一个空函数,如果有必要你可以在里面写代码。C#没有像VBA中的Sub块了,统一为函数了,想想也合理,VBA中的Sub和Function功能都差不多,只是Function有返回值。Private就规定了这是不开源的方法,其它外部类要借用这里的方法想都不用想了。
public void Macro1():公共函数,同一个类中的函数都可以直接访问,而其它类中的函数也可以通过类来借用。
[CgsAddInMacro]:
拆开来看一下它的意思,“Cgs"应该是几个英文单词连起来的简写,C应该是C或C#吧,猜不出来了。Addin明显就是插件的意思。Macro,就是宏。连起来理解就是Cgs插件宏。经过测试,也证实了这一点。您可以在”Macro1()“函数的后面插入以下代码:
[CgsAddInMacro]
public void Macro2()
{
MessageBox.Show("Macro2 - " + app.Name);
}
如下图。

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

回到Coreldraw,就可以看见,一个新的模块Macro2生成了。如下图。

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

双击Macro2,一样能弹出消息框。
我们来测试一下是否可以编程操作文档中的对象。
把“public void Macro1()”函数中的代码改为如下:

//MessageBox.Show("Macro1 - " + app.Name);
       //测试是否可以对Application中的对象实例化
       ShapeRange shpr = new ShapeRange();
       shpr.Add(app.ActiveShape);
       //设置文档的尺寸单位为毫米,而不是像素,点,米等
       app.ActiveDocument.Unit = cdrUnit.cdrMillimeter;
       //弹出消息框验证所程序中得到选图形的高度是否正确
       //ToString()这里是将双精度实数double转为文本类
       MessageBox.Show("图片高度是:"+app.ActiveShape.SizeHeight .ToString());
   如下图。

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

回到Coreldraw,先选定一张图片,运行宏,效果如下图:

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

完全没有问题。
Macro.lInternal.cs
再看一下Macro.lInternal.cs。如下图。

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

这里也引用了VGCore程序集,因为不同的代码文档的引用都是独立的。
public class CgsAddInTool : System.Attribute,这里类名是CgsAddInTool,” : “说明CgsAddInTool类继承于System程序集的Attribute类,在此基础上再加入了下面的一些属性和方法。当然这里也可以去掉“System.”,只留下Attribute,因为不会有冲突。
public string Guid:定义了一个名为Guid的属性,作为这个类的属性之一。里面有get和set,规定这个属性值不是只读的,既可以获取属性的值也可以赋值给属性。
比如你可以在public Main(object _app)中加入以下代码:

   CgsAddInTool cgsAddInTool = new CgsAddInTool();
       cgsAddInTool.Guid = "2cc24a3e-fe24-4708-9a74-9c75406eebcd";
       string x = cgsAddInTool.Guid;
       MessageBox.Show(x);


测试也没有问题。
命名空间里面是类,类里面有属性、方法,构成了C#代码文件的最基本的结构。也许可以这样来比拟,命名空间就是自然界的空间,比如地球空间,人类空间等;类是某一空间中的某一类物质对象的集合,比如动物类,植物类;一个类中都有实例化的对象,这些对象被概括为有一定的属性,有一定的方法去解决问题,在发生某种事件时会做出相应的反应(事件)等。
“private Corel.Interop.VGCore.Application app;”:定义了一个Application的引用,你可以引用这个名称去访问Application里面的对象。
[CgsAddInConstructor]:意思是开始造轮子?😊。
“app = _app as Corel.Interop.VGCore.Application;”:给app赋予全部Application功能。
“Startup();”:调用其它地方的方法。


执行顺序测试
我们在“Macro.Internal.cs”和 “Macro.cs” 的不同地方代码里加入以下代码:

       MessageBox.Show("Internal-1");
       MessageBox.Show("Macro-2");
       MessageBox.Show("Macro-3");
 

  

位置如下图:

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

切换到CorelDRAW工作区运行一下,可以观察到代码的执行顺序。如下图。

初识Coreldraw Visual Studio Tools for Applications,Coreldraw-C# 插件开发,microsoft,windows,.net

可以知道代码是从“Macro.Internal.cs”开始执行,再到“Macro.cs”; “Macro.cs”中,从“Startup()”再到“Macro1()”。


结语

VSTAGlobal的结构分析和测试基本完成了,符合预期,您完全可以在Coreldraw Visual Studio Tools for Applications开发插件,更个性化更高效率的去操作Coreldraw。
你也可以在VSTAGlobal编写所有的插件代码,当然建议还是另外建一个项目来编写。下次讨论。
这次的分享就到此了,主要是从自己的经验和理解出发编写教程。由于C#和Coreldraw的知识非常专业,自己的理解和说法可能有偏差或错误,或者代码错误,虚心欢迎大师指正,只当抛砖引玉。谢谢您浏览本教程!最后还原“Macro.Internal.cs”和“Macro.cs”的代码。文章来源地址https://www.toymoban.com/news/detail-697957.html

//----------------------------------------------------------------------------------------------
//Macro.Internal.cs:
//---------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Corel.Interop.VGCore;
 
namespace VSTAGlobal
{
   [System.AttributeUsage(System.AttributeTargets.Class)]
   public class CgsAddInModule : System.Attribute { };
 
   [System.AttributeUsage(System.AttributeTargets.Constructor)]
   public class CgsAddInConstructor : System.Attribute { };
 
   [System.AttributeUsage(System.AttributeTargets.Method)]
   public class CgsAddInMacro : System.Attribute { };
 
   [System.AttributeUsage(System.AttributeTargets.Class)]
   public class CgsAddInTool : Attribute
   {
       public string Guid
       {
           get { return guid; }
           set { guid = value; }
       }
       public string Name
       {
           get { return name; }
           set { name = value; }
       }
       private string guid;
       private string name;
   };
 
   [CgsAddInModule]
   public partial class Main
   {
       private Corel.Interop.VGCore.Application app;
 
       [CgsAddInConstructor]
       public Main(object _app)
       {
           app = _app as Corel.Interop.VGCore.Application;
           Startup();
       }
   }
}
//----------------------------------------------------------------------------------------------
//Macro.cs:
//--------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Corel.Interop.VGCore;
 
namespace VSTAGlobal
{
   public partial class Main
   {
       private void Startup()
       {
       }
 
       [CgsAddInMacro]
       public void Macro1()
       {
           MessageBox.Show("Macro1 - " + app.Name);
       }
   }
}

到了这里,关于初识Coreldraw Visual Studio Tools for Applications的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【Tools】Visual Studio Code安装教程详解

    【Tools】Visual Studio Code安装教程详解

    vscode是一种简化且高效的代码编辑器,同时支持诸如调试,任务执行和版本管理之类的开发操作。它的目标是提供一种快速的编码编译调试工具。然后将其余部分留给IDE。vscode集成了所有一款现代编辑器所应该具备的特性,包括语法高亮、可定制的热键绑定、括号匹配、以及

    2024年02月07日
    浏览(29)
  • Visual Studio Code系列--CMake Tools使用说明

    Visual Studio Code系列--CMake Tools使用说明

            在linux系统上开发程序,一般都是使用vim+gcc+gdb进行的;但是为了开发效率我们也会使用Visual Studio Code进行开发,毕竟有界面的开发调试还是更加友好一些。         老牌程序员肯定都知道make构建工具,但是其晦涩的语法还是难住不少初级开发者的。那么有没有一种

    2024年02月12日
    浏览(15)
  • win10安装visual studio C++ build tools超简单教程(离线适用)

    win10安装visual studio C++ build tools超简单教程(离线适用)

    楼楼从github上找了一个程序想实现一下但是出现了这个  在网上一查是需要微软的一个图像库,但是直接下载visual studio C++ build tools的话出现安装包丢失或毁坏很是苦恼,后来在csdn的评论中发现了这个  下载并解压iso文件之后是这个样子的  Visual开头的那个exe文件直接安装就

    2024年02月12日
    浏览(13)
  • 深度学习安装libmr\win10安装visual studio C++ build tools 提示安装包丢失或毁坏

    深度学习安装libmr\win10安装visual studio C++ build tools 提示安装包丢失或毁坏

    首先是做深度学习需要安装libMR,但苦于windos安装需要下载包导入而不能直接pip: 这部分参考 (35条消息) Python-在Windows环境安装libMR_SuGarSJL的博客-CSDN博客 https://blog.csdn.net/qq_40232834/article/details/123719704 然后折磨开始了,pip install . 的时候 提示缺少Microsoft Visual C++ 14.0 安装Micro

    2024年02月15日
    浏览(15)
  • Blend for Visual Studio 概述

    Blend for Visual Studio 概述

    https://learn.microsoft.com/zh-cn/visualstudio/xaml-tools/creating-a-ui-by-using-blend-for-visual-studio?view=vs-2022 Blend for Visual Studio 可用于设计基于 XAML 的 Windows 和 Web 应用程序。 它提供了与 Visual studio 相同的基本 XAML 设计体验,并添加了可视化设计器,以用于高级任务,例如动画和行为。 有关

    2024年02月04日
    浏览(9)
  • win10安装visual studio C++ build tools 无法安装Microsoft.VisualStudio.Community.Shared.Msi或者win10 SDK无法安装

    win10安装visual studio C++ build tools 无法安装Microsoft.VisualStudio.Community.Shared.Msi或者win10 SDK无法安装

    离线包下载地址:链接:https://pan.baidu.com/s/1vWgjFH_oMpMlsDaePeaH_Q?pwd=q6r4  提取码:q6r4  解压后这三个包,直接点击第三个exe进行安装,点击自定义安装(默认也可以)     按照上面安装方式即可安装成功。  

    2024年02月08日
    浏览(47)
  • Qt6 for Windows 环境搭建(Visual Studio)

    作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在 Windows 中,如果想要开发 Qt 应用程序,可以选择多种方式: Qt Creator + MinGW 编译器 Qt Creator + MSVC 编译器 Visual Studio(自带 MSVC 编译器) 前两种方式之前我们已经介绍过了,主要利用 Qt Creator 作为 IDE,并配

    2024年02月10日
    浏览(14)
  • SDL Trados Studio 2021 project templates for Microsoft Visual Studio 2022

    SDL Trados Studio 2021 project templates for Microsoft Visual Studio 2022

    距离SDL Trados Studio 2021的发布也有一段时间了,官方一直以来API SDK更新发布的很慢,也没有得到什么更新的消息,同时微软的 Microsoft Visual Studio 2022 也是正式版本发布之后一直在使用,越来越觉得这个版本好用,但是Microsoft Visual Studio 2022 因为缺失SDL Trados Studio的SDK因此无法做

    2024年02月05日
    浏览(14)
  • 开启visual studio,git for windows 疯狂占用内存的解决

    开启visual studio,git for windows 疯狂占用内存的解决

    最近开启visual studio写代码的时候, IDE 总是会莫名奇妙的卡住然后闪退,今天打开任务管理器看了下原因,发现是visual studio所占磁盘内存不断疯涨,每秒几十MB的向上窜,不一会儿就到了2000MB,然后卡死。 点击 visual studio 里看,发现是 git for Windows 占用了大量内存,一想起前

    2024年02月16日
    浏览(10)
  • paddle中import onnxruntime报错缺失Microsoft Visual C++ Redistributable for Visual Studio 2019 not install

    import onnxruntime 报错ImportError: Microsoft Visual C++ Redistributable for Visual Studio 2019 not installed on the machine. Traceback (most recent call last): File “D:/Wanggan_Project/tensorflow/study_test/paddle_steel/file_save_load.py”, line 7, in import onnxruntime File “D:Anaconda3envspaddle_newlibsite-packagesonnxruntime_ init _.py”, l

    2024年02月08日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包