日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CDR插件开发之Application(应用程序)

發布時間:2024/1/1 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CDR插件开发之Application(应用程序) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在CorelDRAW提供的對象模型中,Application是被開發者經常使用的一個對象,也是最頂級的對象。本文對CorelDRAW(以下簡稱CDR)對象模型中的 Application 類做了一個簡單的解析,以幫助開發者能夠清楚認識 Application 類的作用。

Application(應用程序)

Application是最頂層的對象,表示一個 CorelDRAW 軟件啟動后對應的實例。所謂實例,可以這樣理解:舉個例子,在你電腦上安裝了 CorelDRAW X8,當你啟動了X8,就有一個X8的實例,再啟動一個X8,就又是一個新的實例。當然,CorelDRAW 軟件本身是不支持多開的,也就是同時只能有一個X8啟動。

Application對象定義了 CorelDRAW 應用程序的屬性,它是 CorelDRAW 對象層次結構中的頂級對象,通過它提供的函數、方法和屬性,你可以訪問應用程序的所有其他特性,因此該對象具備了操控 CorelDRAW 的絕大部分能力。在 CorelDRAW 中,Application對象是所有其他對象的“根”。

一、獲取Application應用程序對象的實例

參考代碼(VBA):

在CDR自帶的宏編輯器中,不需要自己手動實例化對象,可以直接使用 Application 來獲取當前的應用程序對象的實例,參考代碼如下:

MsgBox "當前CDR版本:" & Application.Version

以上代碼運行效果如下:

參考代碼(C#):

在C#中,CDR應用程序對象的實例,是通過插件在加載過程中的參數進行初始化的:

// CDR應用程序全局對象的靜態引用 public static corel.Application myCdrApp { get; set; }/// <summary> /// 構造器 /// </summary> public ControlUI(corel.Application cdrApp) {// 插件構造時會通過參數將應用程序的實例傳進來// 開發者可以用全局靜態變量將其保存下來,后續使用自己的引用對象即可myCdrApp = cdrApp; }
參考代碼(C++):

在C++中,CDR應用程序對象的實例,是通過插件在加載過程中的參數進行初始化的:

STDMETHODIMP HelloWorldPlugin::raw_OnLoad(VGCore::IVGApplication* Application) {// 當CDR加載時,此時獲得了一個應用程序的實例,將其傳遞給 cdrAppVGCore::IVGApplication* cdrApp = Application;if (cdrApp) {// 添加引用cdrApp->AddRef();}MessageBox(NULL, cdrApp->Version, _bstr_t("CDR版本信息"), MB_OK);return S_OK; }
參考代碼(JavaScript):

在較高版本的CDR版本中,可以通過頂級對象 host 來獲取當前的應用程序對象的實例,參考代碼如下:

// 通過host頂級對象得到應用程序的實例,彈框顯示當前CDR應用程序的路徑 alert(host.Application.Version);

以上代碼運行效果如下:

二、創建CDR文檔

在獲得了CDR應用程序對象的實例后,就可以通過它來實現針對CDR的各種操作。例如下面的代碼例子,創建了一個新的CorelDRAW文檔,向文檔的活動層添加一個彩色橢圓,并以新名稱保存新文檔:

參考代碼(VBA):
Sub Test()' 聲明一個文檔對象,取名為docDim doc As Document' 調用應用程序提供的 CreateDocument(創建文檔)的方法,創建(實例化)一個文檔對象(等同于人工操作中的“文件” → “新建”)Set doc = Application.CreateDocument()' 在新建文檔的當前活動圖層上,創建一個橢圓,并填充CMYK顏色,值分別為:0, 100, 100, 0doc.ActiveLayer.CreateEllipse(0, 3, 5, 1).Fill.UniformColor.CMYKAssign 0, 100, 100, 0' 將文檔另存到當前電腦我的文檔目錄下,文件名稱:test.cdrdoc.SaveAs "C:\Users\Administrator\Documents\test.cdr"' 消息提示MsgBox "文檔保存成功,請查看" End Sub
參考代碼(C#):
using Corel.Interop.VGCore; using System.Windows; using corel = Corel.Interop.VGCore;namespace CdrCloudPlugin {class Demo {public void Test(corel.Application cdrApp) {// 聲明一個文檔對象,取名為docDocument doc;// 調用應用程序提供的 CreateDocument(創建文檔)的方法,創建(實例化)一個文檔對象(等同于人工操作中的“文件” → “新建”)doc = cdrApp.CreateDocument();// 在新建文檔的當前活動圖層上,創建一個橢圓,并填充CMYK顏色,值分別為:0, 100, 100, 0doc.ActiveLayer.CreateEllipse(0, 3, 5, 1).Fill.UniformColor.CMYKAssign(0, 100, 100, 0);// 將文檔另存到當前電腦我的文檔目錄下,文件名稱:test.cdrdoc.SaveAs(@"C:\Users\Administrator\Documents\test.cdr");// 消息提示MessageBox.Show("文檔保存成功,請查看");}} }
參考代碼(C++):
void Test() {// 聲明一個文檔對象,取名為docVGCore::IVGDocumentPtr doc;// 調用應用程序提供的 CreateDocument(創建文檔)的方法,創建(實例化)一個文檔對象(等同于人工操作中的“文件” → “新建”)doc = cdrApp->CreateDocument();// 在新建文檔的當前活動圖層上,創建一個橢圓,并填充CMYK顏色,值分別為:0, 100, 100, 0doc->ActiveLayer->CreateEllipse(0, 3, 5, 1, 0, 0, FALSE)->Fill->UniformColor->CMYKAssign(0, 100, 100, 0);// 將文檔另存到當前電腦我的文檔目錄下,文件名稱:test.cdrdoc->SaveAs("C:/Users/Administrator/Documents/test.cdr", cdrApp->CreateStructSaveAsOptions());// 消息提示MessageBox(NULL, _bstr_t("文檔保存成功,請查看"), _bstr_t("www.cdrvba.com"), MB_OK); }
參考代碼(JavaScript):

使用JS腳本時,可能會出現部分API無法調用的情況,比如文檔的另存為(SaveAs),因此在部分場景下功能有限。

// 聲明一個文檔對象,取名為doc var doc; // 調用應用程序提供的 CreateDocument(創建文檔)的方法,創建(實例化)一個文檔對象(等同于人工操作中的“文件” → “新建”) doc = host.Application.CreateDocument(); // 在新建文檔的當前活動圖層上,創建一個橢圓,并填充CMYK顏色,值分別為:0, 100, 100, 0 doc.ActiveLayer.CreateEllipse(0, 3, 5, 1).Fill.UniformColor.CMYKAssign(0, 100, 100, 0); // 消息提示 alert("ok");

三、打開CDR文檔

除了創建文檔外,還可以通過應用程序提供的 OpenDocument 函數來打開一個存在的CDR文檔。

參考代碼(VBA):
Sub Test()' 定義CDR文件的路徑Dim path As Stringpath = "F:\zebe\CDR\懸浮瓷鉆\未命名-1.cdr"' 檢查CDR文件是否存在If Dir(path) = "" ThenMsgBox "文件不存在:" & pathExit SubEnd If' 定義一個文檔對象的引用,取名為myDocDim myDoc As Document' 通過應用程序對象提供的 OpenDocument 方法來打開一個已經存在的CDR文檔Set myDoc = Application.OpenDocument(path) End Sub
參考代碼(C#):
using Corel.Interop.VGCore; using System.IO; using System.Windows; using corel = Corel.Interop.VGCore;namespace CdrCloudPlugin {class Demo {public void Test(corel.Application cdrApp) {// 定義CDR文件的路徑string path = @"F:\zebe\CDR\懸浮瓷鉆\未命名-1.cdr";// 檢查CDR文件是否存在if (!File.Exists(path)) {MessageBox.Show("文件不存在:" + path);return;}// 定義一個文檔對象的引用,取名為myDocDocument myDoc;// 通過應用程序對象提供的 OpenDocument 方法來打開一個已經存在的CDR文檔myDoc = cdrApp.OpenDocument(path);}} }
參考代碼(C++):
// 暫無,待補充完善

四、繪制直線和曲線段

Application對象還提供了圖形繪制的能力,比如創建直線或曲線段。

參考代碼(VBA):
Sub Test()' 創建一個新文檔Application.CreateDocument' 聲明曲線對象引用Dim crv As Curve' 聲明形狀對象引用Dim s As Shape' 聲明子路徑對象引用Dim sp As SubPath' 創建一個曲線對象,這時候曲線對象在內存中,還只是一個數據Set crv = Application.CreateCurve(ActiveDocument)' 在曲線上創建一個子路徑Set sp = crv.CreateSubPath(1, 5)' 為曲線上的子路徑添加幾條線段(直線段、曲線段)sp.AppendLineSegment 2, 0sp.AppendCurveSegment2 5, 7, 6, 6, 3, 5sp.AppendCurveSegment2 7, 2, 3, 6, 7, 1sp.AppendLineSegment 9, 6' 將子路徑的第3個節點的類型改為平滑節點sp.Nodes(3).Type = cdrSmoothNode' 將內存中的曲線對象,創建到當前圖層上,這樣就可以看見了Set s = ActiveLayer.CreateCurve(crv) End Sub
參考代碼(C#):
using Corel.Interop.VGCore; using corel = Corel.Interop.VGCore;namespace CdrCloudPlugin {class Demo {public void Test(corel.Application cdrApp) {// 創建一個新文檔cdrApp.CreateDocument();// 聲明曲線對象引用Curve crv;// 聲明形狀對象引用Shape s;// 聲明子路徑對象引用SubPath sp;// 創建一個曲線對象,這時候曲線對象在內存中,還只是一個數據crv = cdrApp.CreateCurve(cdrApp.ActiveDocument);// 在曲線上創建一個子路徑sp = crv.CreateSubPath(1, 5);// 為曲線上的子路徑添加幾條線段(直線段、曲線段)sp.AppendLineSegment(2, 0);sp.AppendCurveSegment2(5, 7, 6, 6, 3, 5);sp.AppendCurveSegment2(7, 2, 3, 6, 7, 1);sp.AppendLineSegment(9, 6);// 將子路徑的第3個節點的類型改為平滑節點sp.Nodes[3].Type = cdrNodeType.cdrSmoothNode;// 將內存中的曲線對象,創建到當前圖層上,這樣就可以看見了s = cdrApp.ActiveLayer.CreateCurve(crv);}} }
參考代碼(C++):
// 暫無,待補充完善
參考代碼(JavaScript):
// 創建一個新文檔 host.Application.CreateDocument(); // 聲明曲線對象引用 var crv; // 聲明形狀對象引用 var s; // 聲明子路徑對象引用 var sp; // 創建一個曲線對象,這時候曲線對象在內存中,還只是一個數據 crv = host.Application.CreateCurve(host.Application.ActiveDocument); // 在曲線上創建一個子路徑 sp = crv.CreateSubPath(1, 5); // 為曲線上的子路徑添加幾條線段(直線段、曲線段) sp.AppendLineSegment(2, 0); sp.AppendCurveSegment2(5, 7, 6, 6, 3, 5); sp.AppendCurveSegment2(7, 2, 3, 6, 7, 1); sp.AppendLineSegment(9, 6); // 將子路徑的第3個節點的類型改為平滑節點(經測試,JS獲取不到 sp 的 Nodes 對象,原因未知) // 將內存中的曲線對象,創建到當前圖層上,這樣就可以看見了 s = host.Application.ActiveLayer.CreateCurve(crv);

上面創建曲線的代碼,運行后效果如下所示:

五、創建顏色

Application對象提供了創建顏色的方法,可供開發者靈活的使用自定義的顏色。

參考代碼(VBA):
Sub Test()' 判斷是否選擇了圖形If ActiveShape Is Nothing ThenMsgBox "請選擇要填充顏色的圖形"Exit SubEnd If' 聲明一個顏色對象Dim c As Color' 創建一個顏色對象Set c = CreateColor' 給顏色對象分配CMYK色值(青色)c.CMYKAssign 100, 0, 0, 0' 將當前選擇的圖形填充為青色ActiveShape.Fill.ApplyUniformFill c End Sub
參考代碼(C#):
using Corel.Interop.VGCore; using System.Windows; using corel = Corel.Interop.VGCore;namespace CdrCloudPlugin {class Demo {public void Test(corel.Application cdrApp) {// 判斷是否選擇了圖形if (cdrApp.ActiveShape == null) {MessageBox.Show("請選擇要填充顏色的圖形");return;}// 聲明一個顏色對象Color c;// 創建一個顏色對象c = cdrApp.CreateColor();// 給顏色對象分配CMYK色值(青色)c.CMYKAssign(100, 0, 0, 0);// 將當前選擇的圖形填充為青色cdrApp.ActiveShape.Fill.ApplyUniformFill(c);}} }
參考代碼(C++):
// 暫無,待補充完善
參考代碼(JavaScript):

注意:在JS中使用 return 會報錯,因此要通過判斷語句來實現邏輯的跳轉。

// 判斷是否選擇了圖形 if (host.ActiveShape == null) {alert("請選擇要填充顏色的圖形"); } else {// 聲明一個顏色對象var c;// 創建一個顏色對象c = host.Application.CreateColor();// 給顏色對象分配CMYK色值(青色)c.CMYKAssign(100, 0, 0, 0);// 將當前選擇的圖形填充為青色host.ActiveShape.Fill.ApplyUniformFill(c); }

上面創建顏色的代碼,運行后效果如下所示:

六、Application應用程序的屬性

以 CorelDRAW X7 版本為例,Application對象提供了 67 個可以給開發者使用的屬性,分別如下:

屬性名稱屬性描述
ActiveDocument活動文檔。
ActiveLayer活動圖層。
ActivePage活動頁面。
ActivePalette活動調色板。
ActiveSelection活動選擇。
ActiveSelectionRange活動選擇范圍。
ActiveShape活動形狀。
ActiveSpread活動擴展。
ActiveTool活動工具。
ActiveTreeManager活動樹管理器。
ActiveVirtualLayer活動虛擬圖層。
ActiveWindow活動窗口
ActiveWorkspace活動工作區。
Application應用程序。
AppWindow應用程序窗口。
ArrowHeads箭頭對象。
Class類。
Clipboard剪貼板。
ColorManager顏色管理器。
CommandBars命令欄。
Components組件。
ConfigPath配置路徑。
DefaultColorContext默認顏色上下文。
Documents文檔。
EnhancedOutlines增強輪廓。
EventsEnabled事件是否開啟。
FontList字體列表。
FrameWork框架。
GlobalUserData全局用戶數據。
GMSManager全局宏管理器。
IDID。
LanguagePath語言路徑。
MainMenu主菜單。
Name名稱。
Optimization是否開啟優化。
OutlineStyles輪廓樣式。
PageSizes頁面尺寸。
PaletteManager調色板管理器。
Palettes調色板
PanoseMatchingPANOSE匹配類型。
Parent上級。
Path路徑。
PatternCanvases圖案畫布。
PlatformVersionMajor平臺主要版本。
PlatformVersionMinor平臺次要版本。
Printers打印機。
PrintJob打印作業。
ProgramPath程序路徑。
RecentFiles最近的文件。
SessionUserData會話中的用戶數據。
SetupPath設置文件夾的路徑。
StartupMode啟動模式。
Status狀態。
StatusBar狀態欄。
SymbolLibraries符號庫。
UILanguage用戶界面語言。
Unit單位。
UserDataPath用戶數據路徑。
UserWorkspacePath用戶工作空間路徑。
VBE宏編輯器。
Version版本。
VersionBuild構建版本。
VersionMajor主要版本。
VersionMinor次要版本。
Visible是否可見。
Windows窗口。
Workspaces工作區。

七、Application應用程序的方法和函數

以 CorelDRAW X7 版本為例,Application對象提供了 59 個可以給開發者使用的方法和函數,分別如下:

方法/函數名稱方法/函數描述
AddPluginCommand添加插件命令。
AdviseEvents通知事件。
cdrMixedDoubleCDR混合雙精度。
cdrMixedLongCDR混合長整數。
cdrMixedSingleCDR混合單精度。
CheckPlatformVersion檢查平臺版本。
ConvertFromUnicode從Unicode轉換。
ConvertToUnicode轉換到Unicode。
ConvertUnits轉換單位。
CreateBWColor創建BW顏色。
CreateCMYColor創建CMY顏色。
CreateCMYKColor創建CMYK顏色。
CreateColor創建顏色。
CreateColorContext創建顏色上下文。
CreateColorContext2創建顏色上下文2。
CreateColorEx創建顏色擴展。
CreateCurve創建曲線。
CreateDocument創建文檔。
CreateDocumentEx創建文檔擴展。
CreateDocumentFromTemplate從模板創建文檔。
CreateDuotone創建雙色版。
CreateFillMetadata創建元數據填充。
CreateGrayColor創建灰度顏色。
CreateHLSColor創建HLS顏色。
CreateHSBColor創建HSB顏色。
CreateLabColor創建LAB顏色。
CreateNodeRange創建節點范圍。
CreateOutlineStyle創建輪廓樣式。
CreatePaletteColor創建調色板顏色。
CreatePatternCanvas創建圖案畫布。
CreateProofColorSettings創建一個 ProofColorSettings 對象。
CreateRect創建矩形區域。
CreateRegistrationColor創建注冊顏色。
CreateRGBColor創建RGB顏色。
CreateSegmentRange創建線段范圍。
CreateShapeRange創建形狀范圍。
CreateSpotColor創建專色。
CreateSpotColorByName根據名稱創建專色。
CreateStructCreateOptions創建結構化創建選項。
CreateStructExportOptions創建結構化導出選項。
CreateStructImportOptions創建結構化導入選項。
CreateStructOpenOptions創建結構化創打開選項。
CreateStructPaletteOptions創建結構化調色板選項。
CreateStructPasteOptions創建結構化粘貼選項。
CreateStructSaveAsOptions創建結構化另存為選項。
CreateYIQColor創建YIQ顏色。
Evaluate計算表達式。
ForceUpdateFontTable強制更新字體表。
GetSupportedOpenTypeFeatures獲得支持的開放類型功能。
ImportWorkspace導入工作區。
InitializeVBA初始化VBA。
IsUILanguageAvailable用戶界面語言是否可用。
OpenDocument打開文檔。
OpenDocumentAsCopy作為副本打開文檔。
OpenDocumentEx打開文檔擴展。
Quit退出。
Refresh刷新。
RemovePluginCommand移除插件命令。
UnadviseEvents解除通知事件。

八、Application應用程序的事件

以 CorelDRAW X7 版本為例,Application對象提供了 21 個可以給開發者使用的事件,分別如下:

事件名稱事件描述
DocumentAfterExport文檔導出后事件。
DocumentAfterPrint文檔打印后事件。
DocumentAfterSave文檔保存后事件。
DocumentBeforeExport文檔導出前事件。
DocumentBeforePrint文檔打印前事件。
DocumentBeforeSave文檔保存前事件。
DocumentClose文檔關閉事件。
DocumentNew文檔新建事件。
DocumentOpen文檔打開事件。
OnPluginCommand插件命令事件。
OnUpdatePluginCommand更新插件命令事件。
QueryDocumentClose文檔詢問關閉事件。
QueryDocumentExport文檔詢問導出事件。
QueryDocumentPrint文檔詢問打印事件。
QueryDocumentSave文檔詢問保存事件。
QueryQuit詢問退出事件。
Quit退出事件。
SelectionChange選擇改變事件。
Start啟動事件。
WindowActivate窗口成為活動狀態事件。
WindowDeactivate窗口失去活動狀態事件。

以 DocumentNew(文檔新建)事件為例,以下是事件的使用例子舉例:

參考代碼(VBA):

注意:由于 Application 的事件是整個CDR應用程序級別的,因此需要將相關事件處理的代碼,編寫在 GlobalMacros.gms 中才可以生效。

Private Sub GlobalMacroStorage_DocumentNew(ByVal doc As Document, ByVal FromTemplate As Boolean, ByVal Template As String, ByVal IncludeGraphics As Boolean)MsgBox "檢測到新文檔被創建,文檔名稱:" & doc.Title End Sub
參考代碼(C#):
using System.Windows; using corel = Corel.Interop.VGCore;namespace CdrCloudPlugin {class Demo {public void Test(corel.Application cdrApp) {// 綁定文檔新建事件cdrApp.DocumentNew += CdrApp_DocumentNew;}// 文檔新建事件處理方法private static void CdrApp_DocumentNew(corel.Document Doc, bool FromTemplate, string Template, bool IncludeGraphics) {MessageBox.Show("檢測到新文檔被創建,文檔名稱:" + Doc.Title);}} }
參考代碼(C++):
// 暫無,待補充完善

上面針對文檔新建事件處理的代碼,每當新建一個文檔時,其運行效果如下所示:

九、本文總結

Application 類是整個 CorelDRAW 對象層次結構中的頂級對象,通過它提供的函數、方法和屬性,你可以訪問應用程序的所有其他特性。

十、寫給讀者

創作不易,每篇文章的創作都要花費作者很大的時間和精力,好文要頂!請通過評論、收藏的形式來支持作者。因作者水平有限,如文章中有錯誤還請指出來,方便作者修復,以免誤導他人。若遇到代碼不能運行或者報錯的情況,請留言評論,作者會抽空回復,協助解決。

總結

以上是生活随笔為你收集整理的CDR插件开发之Application(应用程序)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。