Corel Corel Draw Graphics Suite - 12 Programming Guide

CorelDRAW® Graphics Suite 12 Programming Guide for VBA
The contents of this programming guide and the associated CorelDRAW software are the property of Corel Corporation and its respective licensors, and are protected by copyright. For more complete copyright information about CorelDRAW, please refer to the About CorelDRAW section in the Help menu of the software.
Copyright 2002–2003 Corel Corporation. All rights reserved.
Corel, the Corel logo, CorelDRAW, Corel PHOTO-PAINT, Corel SCRIPT, and WordPerfect are trademarks or registered trademarks of Corel Corporation and/or its subsidiaries in Canada, the U.S., and/or other countries. Microsoft, Visual Basic, Visual Studio, ActiveX, and Windows are registered trademarks of Microsoft Corporation in the United States and/or other countries. AutoCAD is a registered trademark of Autodesk, Inc. Borland and Delphi are trademarks or registered trademarks of Borland Software Corporation. IntelliCAD is a registered trademark of IntelliCAD Technology Consortium. Java is a trademark of Sun Microsystems, Inc. JavaScript is a registered trademark of Sun Microsystems, Inc. in the U.S. and other countries. PostScript is a registered trademark of Adobe Systems Incorporated in the United States and/or other countries. Other product, font, and company names and logos may be trademarks or registered trademarks of their respective companies.

Table of Contents

Introduction ......................1
What's the purpose of this guide? .......................1
Who should use this guide? .........................1
How to use this guide ...........................1
About CorelDRAW ............................1
About VBA in CorelDRAW .........................1
About Corel Corporation ..........................2
Writing and running macros in CorelDRAW . . . . . .........3
Installing VBA for CorelDRAW ........................3
The VBA toolbar in CorelDRAW .......................3
Writing a macro .............................3
Writing macros in the VB Editor .......................4
Recording macros ............................4
Running a macro .............................5
Introducing automation and VBA ................6
What is automation? ............................6
VBA for non-programmers .........................6
VBA for programmers ...........................7
The main features of VBA structure and syntax ...................7
Comparing VBA to other programming languages .................12
Visual Basic Editor ....................14
Starting the Visual Basic Editor from CorelDRAW .................14
CorelDRAW Graphics Suite 12 Programming Guide for VBA i
Visual Basic Editor user interface .......................14
Project Explorer ............................15
Project ...............................16
Properties Window ...........................17
Code window .............................17
Form Designer window ..........................21
Object Browser window..........................26
Debugging..............................31
About objects and object models ................35
Understanding objects, properties, methods, and events ...............35
The purpose and benefits of using an object model .................35
Object hierarchy .............................36
Dot notation .............................36
Creating references to objects using "Set" ....................36
Collections of objects...........................37
Using objects in CorelDRAW .................39
Working with basic objects .........................39
Application Object ...........................39
Document Structure ...........................39
Document objects ...........................39
Creating documents ...........................41
The ActiveDocument property........................41
Switching between documents ........................42
Changing content in active and inactive documents .................42
Closing documents ...........................43
Setting the undo string ..........................43
CorelDRAW Graphics Suite 12 Programming Guide for VBA ii
Page objects ..............................43
The ActivePage property .........................43
Creating pages ............................44
Deleting pages ............................45
Switching between pages .........................45
Reordering pages ............................45
Resizing pages.............................46
Layer objects ..............................47
Creating layers ............................47
Moving and renaming layers ........................47
Deleting layers ............................48
Setting a layer as active ..........................48
Disabling and hiding layers.........................48
Shape objects ..............................48
Selections and selecting shapes........................49
Creating shapes ............................49
Text objects .............................52
Changing the properties of shapes.......................54
Shortcuts to frequently used objects ......................62
Document operations ...........................65
Opening and closing documents .......................65
Printing ..............................65
Importing and exporting files ........................66
Publishing to PDF ...........................67
Windows and views ...........................68
Windows ..............................68
Views and ActiveView ..........................69
CorelDRAW events ............................70
Responding to events ..........................70
CorelDRAW Graphics Suite 12 Programming Guide for VBA iii
Creating user interfaces for macros................72
Working with dialog boxes .........................72
Creating modal or modeless dialog boxes ....................72
Common dialog box features ........................73
Working with toolbars and buttons ......................73
Creating toolbars ............................73
Creating new buttons ..........................74
Adding a caption and a tooltip to macros ....................74
Adding an image or an icon to a command ....................75
Interacting with the user ..........................75
Document.GetUserClick .........................75
Document.GetUserArea .........................76
Window.ScreenToDocument and Window.DocumentToScreen ..............76
Shape.IsOnShape ............................77
Providing help to the user .........................77
Organizing, grouping, & deploying CorelDRAW macros . . .........79
Organizing and grouping macros .......................79
Advantage of distributing macros using a GMS file .................79
Deploying and installing project files ......................79
Distributing workspace features .......................79
Distributing menus, toolbars, and shortcut keys ..................79
Where to get more information.................81
Corel Solution Developers Program ......................81
Corel Corporate Professional Services......................81
Corel Customized Training .........................81
Other documentation ...........................81
Web sites ...............................81
Newsgroups ..............................82
Other support .............................82
Index .................................................83
CorelDRAW Graphics Suite 12 Programming Guide for VBA iv

Introduction 1

Welcome to the CorelDRAW® Graphics Suite 12 Programming Guide for VBA.

What's the purpose of this guide?

This document describes how to develop and distribute Mircosoft® Visual Basic® for Applications (VBA) solutions in CorelDRAW 12. It introduces the VBA integrated development environment (IDE) and many of its advanced features. It also describes the most important CorelDRAW functions and how to use them. Finally, this guide describes how to package and deploy VBA solutions developed for CorelDRAW.
This guide should be read in conjunction with the CorelDRAW object model reference document available in the CorelDRAW application Help.

Who should use this guide?

This guide should be used by anyone who is interested in automating simple and complex tasks in CorelDRAW or who is developing commercial solutions that integrate with CorelDRAW.
It is assumed that the reader already has experience with at least one other procedural programming language, such as BASIC, Visual Basic, C, C++, Javaä, Pascal, Cobol, or Fortran. This guide does not describe the basics of procedural
programming, such as functions, conditional branching, and looping. Non-programmers should first learn the basics of programming in a language such as Visual Basic or VBA before using this document to develop CorelDRAW solutions.

How to use this guide

This guide is organized into chapters that deal with specific aspects of automating tasks and building solutions in CorelDRAW.

About CorelDRAW

CorelDRAW is a comprehensive vector-based drawing program that makes it easy to create professional artwork, from simple logos to technical illustrations. The tools in CorelDRAW are designed to meet the demands of the graphic designer.

About VBA in CorelDRAW

In 1995, Corel incorporated automation into CorelDRAW 6 by including its Corel SCRIPTä language. This enabled solution developers to create intelligent mini-applications within CorelDRAW, such as ones that draw shapes, reposition and resize shapes, open and close documents, set styles, and so on.
Corel SCRIPT was included with CorelDRAW versions 6 through 9. Although the Corel SCRIPT editor is not included with CorelDRAW in versions after 9, the run-time engine is included, so scripts written for earlier versions of CorelDRAW can easily be migrated to the latest versions.
In 1998, Corel took the strategic decision to augment the Corel SCRIPT functionality of CorelDRAW 9 by licensing the Microsoft Visual Basic for Applications engine to handle its behind-the-scenes automation. The addition of VBA made
CorelDRAW immediately accessible to millions of VBA developers and Visual Basic developers around the world.
VBA in CorelDRAW can be used as a platform for developing powerful corporate graphical solutions, such as automated ticket generators, customized calendars, and batch processing of files. VBA can also be used to enhance and optimize the
CorelDRAW Graphics Suite 12 Programming Guide for VBA 1
Introduction Chapter 1
workflow within CorelDRAW. For example, you can improve and customize some of the built-in functionality of CorelDRAW (alignments, transformations, object creation) or add page layouts on-the-fly (company letterheads).
VBA comes with a fully integrated development environment that provides contextual pop-up lists, syntax highlighting, line-by-line debugging, and visual designer windows. These helpful prompts and aids create a particularly friendly environment for inexperienced developers to learn in.

About Corel Corporation

Founded in 1985, Corel Corporation (www.corel.com) is a leading technology company specializing in content creation tools, business process management and XML-enabled enterprise solutions. The company's goal is to give consumers and enterprise customers the ability to create, exchange and instantly interact with visual content that is always relevant, accurate and available. Corel Corporation has its headquarters in Ottawa, Canada.
CorelDRAW Graphics Suite 12 Programming Guide for VBA 2

Writing and running macros in CorelDRAW 2

Before you can develop and run macros in CorelDRAW, it may be necessary to install the VBA component.

Installing VBA for CorelDRAW

With CorelDRAW 11 and 12, VBA is installed as part of the typical install. In CorelDRAW 10, VBA must be custom installed.
To custom install VBA:
1 Insert Disc 1 of the installation CD into your computer's CD drive. If the installer does not autostart, double-click on
the file D:\setup.exe, where D: is the letter of your computer's CD drive.
2 If the installer starts automatically, click Install CorelDRAW Graphics Suite 12.
3 Now navigate down the tree to Corel Graphics Suite 12\Utilities\, and ensure that Visual Basic for Applications 6.3 is
set to be installed (the default).
4 Disable any components you don't want.
5 Click Next. Any components whose check boxes you disabled will be removed.

The VBA toolbar in CorelDRAW

CorelDRAW has a toolbar that provides easy access to several VBA features and to the VB Editor.
The VBA toolbar in CorelDRAW
The toolbar buttons provide the following functions:
playing macros
opening the VB Editor
switching the VB Editor between design and run modes
recording macros
pausing the recording of macros
stopping the recording of macros
These features are described in subsequent sections.
To display the VBA toolbar, right-click anywhere on an empty toolbar area and choose Visual Basic for Applications from the pop-up menu. Alternatively, choose Tools } Toolbars } Visual Basic for Applications.

Writing a macro

Macros can only be written inside the VB Editor. However, you can save time by recording actions within CorelDRAW. Recording creates a new VBA macro in the chosen project, which can then be edited and customized in theVB Editor.
CorelDRAW Graphics Suite 12 Programming Guide for VBA 3
Writing and running macros in CorelDRAW Chapter 2
Writing macros in the VB Editor
Macros that are developed in the VB Editor can take advantage of full programmating control, including conditional execution, looping, and branching. Macros that include this extra functionality are not just mere macros, but are programs in their own right. However, for the purpose of this guide, all VBA code is referred to as a macro, although in some contexts a macro is just those parts of that code that can be launched by CorelDRAW.
Using the VB Editor to develop macros is described in detail in Chapter 4, "Visual Basic Editor".
Recording macros
It is often useful to record macros, particularly when you are not familiar with the CorelDRAW object model, or when you are not sure which objects and methods to use. For many simple and repetitive tasks, recorded macros are a quick, efficient solution. Recorded macros are macros in the truest sense of the word: strictly speaking, a macro is a recorded set of actions within the application that can be repeatedly invoked. This is exactly what is created when you record a macro – a true copy of your actions within CorelDRAW, although this is limited to CorelDRAW actions and does not simply record keystrokes and mouse moves.
To record a new macro:
1 Click Tools } Visual Basic } Record, or click the Record button on the VBA toolbar.
2 Type a name in the Macro Name box. Macro names must follow VBA's naming rules, which are:
They must start with a letter.
They can contain numbers, but not as the first character.
They cannot contain spaces or any non-alphanumeric characters, apart from the underscore (_).
They must be unique within the chosen project.
The Save Macro dialog box when recording
3 Choose a VBA project (GMS) file or CorelDRAW (CDR) file from the Store macro in list. You can type an optional
comment in the Description box. The benefits of selecting a GMS or CDR file are discussed in a later section.
4 Click OK.
CorelDRAW is now recording every action – each creation of a shape, each movement of an object, and each change to a property.
To stop recording a macro, click Tools } Visual Basic } Stop. The macro will now be saved.
To pause while recording a macro, click Tools } Visual Basic } Pause.
CorelDRAW Graphics Suite 12 Programming Guide for VBA 4
Writing and running macros in CorelDRAW Chapter 2
Not all actions in CorelDRAW can be recorded. Some cannot be recorded because of their complexity,
although they can usually be hand-coded in the VB Editor. When something cannot be recorded, the following comment is placed in the code: "The recording of this command is not supported".
The record, pause, stop, and play controls are also available from the Visual Basic for Applications toolbar in
CorelDRAW.

Running a macro

You can run a macro from a CorelDRAW menu, or directly from the VB Editor.
To run a macro from a CorelDRAW menu:
1 Click Tools } Visual Basic } Play….
The Macros dialog box
Clicking the Run button on the VBA toolbar will also bring up the Macros dialog box.
2 From the Macros in list box, select the project (GMS) file that contains the macro you want to run. This will
populate the Macro name list.
3 Choose a macro from the Macro name list.
4 Click Run.
To run a macro from inside the VB Editor:
Click anywhere inside the subroutine that forms the macro, and click Run } Run Macro.
CorelDRAW Graphics Suite 12 Programming Guide for VBA 5

Introducing automation and VBA 3

Visual Basic for Applications, more commonly known as VBA, is a built-in programming language that can automate repetitive functions and create intelligent solutions in CorelDRAW. Corel Graphics Suite 12 includes VBA version 6.3.
VBA is both a language and an editor. It is not possible to have the language without the editor, nor is it possible to edit VBA in anything but the VB Editor. And the VB Editor is also needed to run VBA programs.
VBA is developed by Microsoft and is built into almost all of its desktop applications, including Microsoft® Office. VBA is licensed by Microsoft to other companies, including Corel Corporation (in CorelDRAW, Corel PHOTO-PAINTâ, and WordPerfectâ), Autodesk, Inc. (in AutoCADâ), IntelliCAD Technology Consortium (IntelliCAD®), and many others.
This enables CorelDRAW to communicate with a wide array of applications that support VBA. A complete list of applications that support VBA can be viewed on the Microsoft Web site at
www.msdn.microsoft.com/vba/companies/company.asp.
It is not necessary for an application to support VBA for the VBA engine in CorelDRAW to control that application. That means you can build solutions in CorelDRAW that access databases, word processors, specialized content editors, XML documents, and more.

What is automation?

Most actions that you can do in CorelDRAW can be done programmatically through VBA. This programmability of CorelDRAW is called automation. Automating repetitive tasks can save time and reduce effort, while automating complex tasks can make possible the otherwise impossible.
In its simplest form, automation is simply recording a sequence of actions (a macro) in CorelDRAW, which can be played back time and again. The term "macro" has come to include any code accessible to VBA running within the process, even though some of that code might be far more advanced than a mere set of recorded actions. Thus wherever "macro" is used in this guide, it refers to VBA functions and subroutines.
While it is possible to record a sequence of actions in CorelDRAW, the real power of automation and VBA is that these recordings can be edited to provide conditional and looping execution. For example, a simple macro may set the selected shape's fill color to red and apply a one-point outline. But, by adding a condition and looping to the VBA code, the macro could, for example, be made to seek out each selected shape and apply only the fill to text shapes and the outline to all other shape types.

VBA for non-programmers

Visual Basic for Applications (VBA) is based on Microsoft's successful Visual Basic (VB) programming language. The main difference between VBA and VB is that you cannot create stand-alone executable (EXE) files using VBA, which you can with full VB; you can only create programs in VBA that run inside the host application, in this case CorelDRAW. In all other respects VBA and VB are the same.
Visual Basic is, as the name describes, a "visual" version of the BASIC language. This means that it is a very easy language to learn, and it is helped in this by providing visual cues within the editor. Microsoft has added a great deal to the original BASIC language, and it is now a powerful and fast language, although not as powerful as Java or C++, or as quick as C.
The aim of this guide is not to teach you how to become a programmer –– you must do that on your own. The aim of this guide is to teach experienced programmers how to apply their skills to developing useful solutions within CorelDRAW. Before continuing reading this guide, you may find it useful to refer to the many books that have been written about VBA and Visual Basic.
CorelDRAW Graphics Suite 12 Programming Guide for VBA 6
Introducing automation and VBA Chapter 3

VBA for programmers

VBA is an in-process automation controller; in other words, it can be used to control the functionality of CorelDRAW that can be automated. And, since it runs "in-process", it bypasses the interprocess synchronization mechanisms. This makes it run much more efficiently.
All of the automation that is available to the in-process VBA is also available to external out-of-process automation controllers, or OLE clients. This includes applications developed in programming languages that can be used to develop OLE clients, including:
Microsoft Visual Basic, Visual C++, and Windowsâ Scripting Host
Borlandâ Delphiä and C++
Other applications' VBA engines
The rest of this chapter and the next are intended to familiarize you with the VBA language and the VB Editor.
The main features of VBA structure and syntax
This section describes the main features of the structure and syntax of VBA code. This is intended to give experienced developers a quick grounding in VBA syntax and structure. Since VBA is a procedural language that shares much in common with all procedural languages, your current knowledge should help you get off to a quick start using VBA.
This section is by no means exhaustive, but it does cover the most common syntactical nuances in which VBA differs from its peers.
The following language topics are covered:
variables, structures, enumerated types, arrays, and strings
functions and subroutines
  line endings
comments
memory pointers and allocation
passing values by reference and by value
code formatting
scope
classes
Declaring variables
In VBA, the construct for declaring variables is:
Dim foobar As Integer
The built-in data types are: Byte, Boolean, Integer, Long, Single, Double, String, Variant, and several other less-used types including Date, Decimal, and Object.
Variables can be declared anywhere within the body of a function, or at the top of the current module. If the option "Require Variable Declaration" is set in VBA's options dialog, all variables must be declared before they are used. This is generally good practice, since it enables the compiler to use an explicit type efficiently; if variables are simply used without being declared as a particular type, the compiler will create them as variants, which are less efficient at run time.
Booleans take False to be zero and True to be any other value, although converting from a Boolean to a Long
will result in True being converted to -1.
CorelDRAW Graphics Suite 12 Programming Guide for VBA 7
Introducing automation and VBA Chapter 3
To get more information about one of the built-in data types, type it into the code window, select it, and press
F1.
Data structures
Data structures can be constructed using the following syntax:
Public Type fooType
item1 As Integer item2 As String
End Type
Dim myTypedItem As fooType
The items within a variable declared as type fooType are accessed using dot notation:
myTypedItem.item1 = 5

Enumerated types

Enumerated types use the following construction:
Public Enum fooEnum
ItemOne ItemTwo ItemThree
End Enum
The first item in an enumerated type is assigned a value of zero by default.

Arrays

Arrays are declared using parentheses, not brackets:
Dim barArray (4) As Integer
The value defines the index of the last item in the array. Since array indexes are zero-based by default, this means that there are five elements in the above array (zero thru four inclusive).
Arrays can be resized using
ReDim, for example, the following code adds an extra element to barArray, but preserves
the existing contents of the original five elements:
ReDim Preserve barArray (6)
Array upper and lower bounds can be determined at run time with the functions UBound() and LBound().
Multi-dimensional arrays can be declared by separating the dimension indexes with commas:
Dim barArray (4, 3)
CorelDRAW Graphics Suite 12 Programming Guide for VBA 8
Introducing automation and VBA Chapter 3

Strings

Strings are simple to use in VBA. Strings can be added together, truncated, searched forwards and backwards, and passed as simple arguments to functions. Strings in VBA are much simpler than strings in C.
To add two strings together, simply use the concatenation operator, which is ampersand(&),ortheaddition operator (+):
Dim string1 As String, string2 As String string2 = string1 & " more text" + " even more text"
In VBA, there are many functions for manipulating strings, including InStr(), Left(), Mid(), Right(), Len(), and
Trim().
Functions and subroutines
VBA uses both functions and subroutines (subs) – the difference between the two is that functions can return a value, whereas subs must not return a value. Typical functions in a language such as Java or C++ may look like the following:
void foo( string stringItem ) {
// The body of the function goes here
}
double bar( int numItem ) { return 23.2; }
In VBA these functions look like the following:
Public Sub foo (stringItem As String)
' The body of the subroutine goes here
End Sub
Public Function bar (numItem As Integer) As Double
bar = 23.2
End Function
To force a sub or function to exit immediately, use "Exit Sub"or "Exit Function", respectively.

Declaring functions

VBA functions and subs do not need to be declared before they are used, or before they are defined. Functions and subs only need to be declared if they actually exist in external, system dynamic-linked libraries (DLLs).

Line endings

VBA does not use a line-ending character. Many languages use the semicolon to separate individual statements; in VBA each statement must exist on its own line.
To break a long VBA statement over two or more lines, each of the lines, apart from the last line, must end in an underscore character with at least one space in front of it:
newString = fooFunction ("This is a string", _
5, 10, 2)
It is also possible to put several statements onto a single line by separating them with colons:
a=1:b=2:c=a+b
A line cannot end with a colon. Lines that end with a colon are labels used by the Goto statement.
CorelDRAW Graphics Suite 12 Programming Guide for VBA 9
Introducing automation and VBA Chapter 3
Comments in the code
Comments in VBA can only be created at the end of a line, similar to ANSI C++ and Java (but unlike C). Comments are started with an apostrophe and terminate at the line ending. Comments can occupy complete lines on their own, although each line of a multi-line comment must begin with its own apostrophe:
a=b'This is a really interesting piece of code that
' needs so much explanation that I have had to break ' the comment over multiple lines.
To comment out large sections of code, use the following code, similar to C or C++:
#If 0 Then ' That's a zero, not the letter 'oh'.
' All this code will be ignored by ' the compiler at run time!
#End If
Memory pointers and memory allocation
VBA does not support C-style memory pointers. Memory allocation and garbage collection are automatic and transparent, just as in Java and JavaScript®, and some C++ code.
Passing values "by reference" and "by value"
Most languages, including C/C++ and Java, pass arguments to functions as a copy of the original. If the original needs to be passed, either a memory pointer is passed that points to the original in memory, or a reference to the original is passed. The same is true in Visual Basic, except that passing a copy of the original is called "passing by value" and passing a reference to the original is called "passing by reference".
By default, function and subroutine parameters are passed "by reference". This means that a reference to the original variable is passed in the function's argument, and changing that argument's value within the procedure will, in effect, change the original variable's value as well. This is a great way of returning more than one value from a function or sub. To explicitly annotate the code to indicate that an argument is being passed by reference, prefix the argument with "
ByRef".
It is possible to force an argument to be copied instead of a reference passed, which prevents the function from changing the original variable's value. To do this, prefix the argument with "

ByVal", as given below. This ByRef/ByVal

functionality is similar to C and C++'s ability to pass a copy of a variable, or to pass a pointer to the original variable.
Private Sub fooFunc (ByVal int1 As Integer, _
ByRef long1 As Long, _ long2 As Long) ' Passed ByRef by default

In the preceding example, both arguments long1 and long2 are passed ByRef, which is the default. Modifying either argument within the body of the function will modify the original variable; however, modifying

int1 will not affect the
original, since it is a copy of the original.
Code formatting
The VB Editor formats all of the code for you. The only custom formatting that you can do is to change the size of indentations.
Public and private scope
Functions, subs, and types (and members of classes) that are declared as "Private" are only visible within that module (file). Functions that are declared as "Public" are visible throughout all the modules. However, you may have to use fully qualified referencing if the modules are almost out of scope, for example, referencing a function in a different Project.
CorelDRAW Graphics Suite 12 Programming Guide for VBA 10
Introducing automation and VBA Chapter 3
Local scope
Unlike C, VBA does not use braces ( "{" and "}" ) to define local scope. Local scope in VBA is defined by an opening function or sub definition statement and a matching
End statement (End Function, End Sub). Any variables
declared within the function are only available within the scope of the function itself.
Object-oriented classes
VBA can create object-oriented classes, although these are a feature of the language and are not discussed in detail in this guide.
Boolean comparison and assignment using "="
In Visual Basic, both Boolean comparison and assignment are done using a single equals sign:
Ifa=bThenc=d
This is in contrast to many other languages that use a double equals sign for a Boolean comparison and a single equals sign for assignment:
if(a==b)c=d;
The following code, which is valid in C, C++, Java, and JavaScript, is invalid in VBA:
if( ( result = fooBar())==true )
This would have to be written in VBA as the following:
result = fooBar( ) If result = True Then
Other Boolean comparisons
VBA uses the same operators as other languages do for other Boolean comparisons. The only operators that are different are "is equal to" and "is not equal to". All the Boolean-comparison operators are given in the following table:
Comparison VBA operator C-style operator
Is equal to ===
Is not equal to <> !=
Is greater than >>
Is less than <<
Is greater than or equal to >= >=
Is less than or equal to <= <=
The result of using one of the Boolean operators is always either True or False.
CorelDRAW Graphics Suite 12 Programming Guide for VBA 11
Introducing automation and VBA Chapter 3
Logical and bitwise operators
In VBA, logical operations are performed using the keywords And, Not, Or, Xor, Imp, and Eqv, which perform the logical operations AND, NOT, OR, Exclusive-OR, logical implication, and logical equivalence, respectively. These operators also perform Boolean comparisons. The following code shows a comparison written in C or a similar language:
if((a&&b)||(c&&d))
This would be written as follows in VBA:
If(aAndb)Or(cAndd)Then
Or the above could be written in the full long-hand form of:
If ( a And b = True ) Or ( c And d = True ) = True Then
The following table gives a comparison of the four common VBA logical and bitwise operators, and the C-style logical and bitwise operators used by C, C++, Java, and JavaScript:
VBA operator C-style bitwise operator C-style Boolean operator
And & &&
Not ~ !
Or | ||
Xor ^
Message boxes and input boxes

You can present simple messages to the user with VBA's MsgBox function:

Dim retval As Long retval = MsgBox("Click OK if you agree.", _
vbOKCancel, "Easy Message")
If retval = vbOK Then
MsgBox "You clicked OK.", vbOK, "Affirmative"
End If

You can also get strings from the user with VBA's InputBox function:

Dim inText As String inText = InputBox("Input some text:", "type here") If Len(inText) > 0 Then
MsgBox "You typed the following: " & inText & "."
End If
If the user clicks Cancel, the length of the string returned in inText is zero.
Comparing VBA to other programming languages
VBA has many similarities with most modern, procedural programming languages, including Java, JavaScript, C, and C++. However, VBA runs as an in-process automation controller, whereas the other languages are used to compile stand-alone applications (apart from JavaScript).
CorelDRAW Graphics Suite 12 Programming Guide for VBA 12
Introducing automation and VBA Chapter 3
VBA compared to Java and JavaScript
VBA is similar to Java and JavaScript in that it is a high-level, procedural programming language that has full garbage collection and very little memory-pointer support. They are also similar because code developed in VBA supports on-demand compilation. In other words code can be executed without being compiled.
VBA has another similarity with JavaScript in that it cannot be executed as a standalone application: JavaScript is almost always embedded within Web pages, and the JavaScript is a mechanism that manipulates the Web browser's document object model or DOM. VBA is exactly the same: VBA programs are always executed inside a host environment, in this case CorelDRAW, and the programs manipulate the CorelDRAW "DOM" – although in VBA's case this is simply called an "object model".
VBA applications can usually be compiled to P-code to make them run quicker, although given today's level of computer hardware, the difference is hardly noticeable. This is similar to Java, but JavaScript cannot be compiled.
VBA uses a single equals sign, "=", for both comparison and assignment, whereas Java and JavaScript both use "=" for assignment and "==" for a Boolean comparison.
VBA compared to C and C++
VBA has quite a few similarities with C, C++, and similar languages, but it also has some differences. Visual Basic uses functions and subroutines, whereas C and C++ use just functions. The difference is that C/C++ functions do not have to return a value, but they can, whereas VBA functions can return a value and VBA subs must never return a value.
Also, VBA allocates and frees memory transparently, whereas in C and C++, the developer is responsible for most memory management. This makes strings in VBA even simpler than using the
CString class in C++.
VBA uses a single equals sign, "=", for both comparison and assignment, whereas C and C++ both use "=" for assignment and "==" for a Boolean comparison.
VBA compared to Windows Scripting Host
Windows Scripting Host is a useful addition to Windows for doing occasional scripting and automation of Windows tasks –– "WSH" is an out-of-process automation controller that can be used to control CorelDRAW. The scripts cannot be compiled; they must be interpreted as they are executed, which is slower. As well, the automation is being run out of process, which adds to the slowness.
WSH is a host for a number of scripting languages, each of which has its own syntax. However, the standard language used by WSH is a Visual Basic–like macro language; so for standard scripts, the syntax is the same as VBA.
CorelDRAW Graphics Suite 12 Programming Guide for VBA 13

Visual Basic Editor 4

The editor that is included with VBA is similar to the editor included with full Visual Basic. The main differences between VB and VBA are that the VB Editor (for VBA) cannot compile executable (EXE) program files, and some of the implementations of forms and controls are different.
This chapter describes many of the features of the Visual Basic Editor and how to make best use of them.

Starting the Visual Basic Editor from CorelDRAW

To invoke the Visual Basic Editor from inside CorelDRAW, click Tools } Visual Basic } Visual Basic Editor, or press Alt+F11 (this is the standard keystroke for most VBA-enabled applications, including WordPerfect Office 2002). This starts VBA as a new application in Windows (although it is running within the CorelDRAW process).
To switch between CorelDRAW and the VB Editor without closing the editor, either use the Windows taskbar
(the "Start-button bar"), or press Alt+F11,orAlt+Tab.

Visual Basic Editor user interface

There are many aspects to the VB Editor's user interface. There are several windows for developing code and dialog boxes, and for browsing the object tree. There are also quite a few ancillary windows for browsing the modules within each project, windows for setting individual properties of objects, and windows for debugging.
The VB Editor has several child windows and several toolbars. The child windows that are normally visible are the main Code window, and to the left of that the Project Explorer (upper-left window), and the Properties window (lower-left window). There are four toolbars available, of which you will use the Standard and Debug toolbars the most often.
The VB Editor
CorelDRAW Graphics Suite 12 Programming Guide for VBA 14
Visual Basic Editor Chapter 4
Project Explorer
The Project Explorer is essential for navigating around VBA projects and their constituent modules.
The Project Explorer window with an open module list and one of the modules selected.

To show the Project Explorer window, click View } Project Explorer, or press Ctrl+R.

Each item in the Project Explorer window is given an icon.
Icon Meaning
project
folder
class module
module
form
document
CorelDRAW Graphics Suite 12 Programming Guide for VBA 15
Visual Basic Editor Chapter 4
Project
A Global Macro Storage (GMS) file, also known as a project file, exists in the \Corel\Corel Graphics 12\Draw\GMS\ folder which is typically under C:\Program Files\. The VB Editor stores all of the modules for that project in the project's GMS file; one GMS file may contain dozens of modules. The default GlobalMacros.gms file is stored in the folder \Corel\Corel Graphics 12\Draw\.
Different localized versions of Windows use different names for the Program Files folder.
Each project that you create can have many modules within it. There are three types of modules:

Modules for general code and macros

Forms for custom dialog boxes and user interfaces, including the code to control them

Class Modules for object-oriented Visual Basic classes (which are not discussed in this guide)
There is also a fourth item "CorelDRAW 12 Objects", which contains a single item, ThisDocument. This is
used mostly for event handling and is discussed in Chapter 6, "Using objects in CorelDRAW".
The Project Explorer presents each module type in its own folder. It is not possible to move a module from one folder to another within the same project; you can drag a module to another project, which makes a copy of it there.
Creating a new, empty project
Creating a new project (GMS) file is done in Windows Explorer.
To create a new project
1 In Windows Explorer, navigate to the GMS folder inside the CorelDRAW programs folder.
2 Click File } New } Text Document to create a new, empty text document in this folder.
3 Rename the file to your-name.gms where "your-name" can be any valid Windows file name.
4 Restart CorelDRAW.
When you launch the VB Editor, your new GMS file will be listed in the Project Explorer window as Global Macros (your-name.gms).
To change the internal name – Global Macros – of the project
1 Click the project you want to rename in the Project Explorer window.
2 In the Properties window edit the "(name)" value to what you want it to be. Names must follow normal
variable-naming conventions: no spaces, must start with a letter, cannot contain punctuation (except underscore), etc.
3 Press Enter to confirm.
Creating a new module or form
Every new GMS project file contains a single module inside the modules folder called "CorelDRAW 12 Objects". This default module is called "ThisMacroStorage". This module has a special purpose and should not be used for normal code. Instead, code should be developed in a module, class module, or form.
CorelDRAW Graphics Suite 12 Programming Guide for VBA 16
Visual Basic Editor Chapter 4
To create a new module
1 In the Project Explorer window, right-click anywhere on the project to which you want to add a module.
2 Click one of the following
Insert } Module - inserts a normal code module;
Insert } UserForm - inserts a new form (dialog);
Insert } Class Module - inserts a new class code module.
The new module will be placed in the project's folder for that type of module.
Properties Window
The Properties window lists all of the editable properties for the currently selected object. Many objects in VBA have property sheets that can be modified, including projects, modules, and forms and their controls.
The Properties window, showing the properties of a form object
The Properties window updates itself automatically when you change which object is selected. The window is updated automatically when you change properties of the selected object using other methods, for example, by using the mouse to move and resize form controls.
To show the Properties window, click View } Properties Window, or press F4.
Code window
The Code window is where most of the work takes place. This is a standard code editor, in the style of Microsoft® Visual Studioâ, which includes automatic formatting, syntax highlighting, automatic syntax checking, automatic completion,
CorelDRAW Graphics Suite 12 Programming Guide for VBA 17
Visual Basic Editor Chapter 4
and more. If you are already familiar with any of the Microsoft Visual Studio editors, the VBA Code window will be entirely familiar.
The VBA Code window
Automatic code formatting
The VB Editor does not allow code to be custom-formatted. Even the capitalization of keywords, functions, subroutines, and variables is taken care of by the editor, irrespective of what you type.
The most formatting you can do is to decide how much indentation each line has, and where custom line breaks are placed.
The one formatting issue that catches many developers off guard is calling functions and subs. The rules are:
If you are calling a function and you are using the returned value, the parentheses around the parameters are mandatory, just as in most modern programming languages. For example:
a = fooFunc (b, c)
However, if the returned value from a function call is being thrown away, or if you are calling a sub, the parentheses must be left out, unlike most other languages:
barFunc d, e
fooBarSub f
If you prefer to see the parentheses every time, use the Call keyword before the function or sub call:
Call barFunc (d, e)
Call fooBarSub (f)
Syntax highlighting
When you develop code in the Code window, the editor colorizes each word according to its classification: VBA
CorelDRAW Graphics Suite 12 Programming Guide for VBA 18
Visual Basic Editor Chapter 4
keywords and programming statements are usually blue, comments are green, and all other text is black. This colorization makes the code much easier to read.
Syntax highlighting and coloring
Lines of code containing errors are shown in red, selected text is white on blue, and the line where execution is paused for debugging is shown as a yellow highlight.
If you set a breakpoint on a line of code for debugging purposes, a red dot is shown in the left margin with the code in white on a red background. If you set bookmarks in the code so that you can find your place when you have to navigate away from it, a blue dot will be placed in the left margin.
Both breakpoints and bookmarks are lost when you exit CorelDRAW.
You can modify the syntax highlighting colors by clicking Tools } Options, clicking the Editor Format tab,
and making your changes.
Automatic syntax checking
Every time you move the cursor out of a line of code, the editor checks the syntax of the code in the line you just left. If there are any syntax errors, the editor changes the color of the text of that line to red and pops up a warning. This
CorelDRAW Graphics Suite 12 Programming Guide for VBA 19
Visual Basic Editor Chapter 4
real-time checking can be very useful, particularly when you are learning VBA, since it indicates many possible errors in the code without having to run the code.
A typical syntax error warning
However, the warning dialog can be quite intrusive for the more experiencedVBA developer. It is, therefore, nice to know that this message can be suppressed by clicking Tools } Options, selecting the Editor tab, and clearing the Auto Syntax Check check box.
The editor will still check the syntax and highlight erroneous lines in red, but it will stop popping up an intrusive dialog each time you go to paste text from another line of code.
Jumping to variable, function, and object definitions
You can jump directly to the definition of a variable, function, or object merely by right-clicking on it in the Code window and choosing Definition from the pop-up menu. This will either take you to the definition of the variable or function in the code, or it will take you to the object's definition in the Object Browser window.
To return to the place where you requested the definition, right-click again, and click Last Position in the Code window.
Contextual pop-up lists and automatic completion
As you write more functions and create more variables, the VB Editor adds these items to an internal list that already contains all of its built-in keywords and enumerated values. Then, as you are typing, the editor often presents you with a
CorelDRAW Graphics Suite 12 Programming Guide for VBA 20
Visual Basic Editor Chapter 4
list of candidate words that you may want to insert at the current position. This list is contextual, so the editor will usually present only the words that are valid for this position.
Auto-completion pop-up menu
This list makes code development quicker and more convenient, particularly since you do not have to remember every function and variable name, but can choose one from the list when you cannot remember it. You can help the menu find the word you want by entering the first few characters of the word; the list will scroll to the nearest candidate that matches the first few characters you entered.
Choose an item from the list and enter the character that will follow the word – typically a space, line feed, parenthesis, period, or comma. The word is inserted with the character following. To insert without any additional characters, press Ta b ,orCtrl+Enter, or click the word with the mouse.
To force this menu to pop up when occasionally it does not do so automatically, press Ctrl+Spacebar. The menu will scroll to the word that most closely matches the characters that you have typed so far. This is also useful for filling parameter lists when calling a function or subroutine. If there is only one exact match, the editor will insert the word without popping up the list. To pop up the list at any time for the selected keyword without auto-filling it, press Ctrl+J.
Form Designer window
The Form Designer window enables you to create custom dialog boxes for use in your solutions. Dialog boxes can be modal, in which case the user must dismiss the dialog box before doing anything else in CorelDRAW, or they can be modeless, in which case they are similar to the CorelDRAW docker.
CorelDRAW Graphics Suite 12 Programming Guide for VBA 21
Visual Basic Editor Chapter 4
To create a new form, right-click within the project in the Project window, and click Insert } UserForm. This creates a new, blank form.
A blank form in the Form Designer window
The form can be immediately tested by pressing F5 to run it – it's not very interesting, since the only control on the form is the Close button in the upper-right corner of the title bar. Click the Close button to dismiss the form.
To change the title of the form, click the form to select it, and then in the Properties window, change the Caption property. While you are there, it is a good idea to give the Form a unique, descriptive name, but remember that this must follow the rules for naming variables in VBA.
Most forms have at least one button – an OK button – plus a Cancel button. To add buttons – or any other controls to a form – drag the appropriate control from the toolbox to the form.
Form Designer toolbox
To add a button, use the CommandButton control. Click the form to add a default-sized button, or drag to create one to your own specifications. Click the caption to edit it, or select the button and edit the Caption property in the
CorelDRAW Graphics Suite 12 Programming Guide for VBA 22
Loading...
+ 63 hidden pages