初识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安装教程详解

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

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

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

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

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

    2024年02月12日
    浏览(45)
  • 深度学习安装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日
    浏览(54)
  • 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日
    浏览(25)
  • 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日
    浏览(42)
  • Qt6 for Windows 环境搭建(Visual Studio)

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

    2024年02月10日
    浏览(40)
  • 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日
    浏览(45)
  • 开启visual studio,git for windows 疯狂占用内存的解决

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

    2024年02月16日
    浏览(45)
  • 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日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包