Making Scripts Version Independent



Created February 3, 2009 © Copyright SuzShook
Property of SuzShook

This tutorial is my own creation;
however, most of the techniques used in this tutorial, I have learned from others!
Therefore, if you recognize any contribution you have made, I thank you!
And I thank you as well for respecting this as my work by not posting it,
in whole or in part,
in any other location without written permission from me!

Individuals and PSP graphics groups are invited to share my tutorials with others with TEXT LINKS ONLY.
You can e-mail me to let me know you are adding one or more of my tutorials to your list if you like -
it's always fun to know who is doing them!

I've been asked by several people to write a simple tutorial showing how to make scripts version-independent. Much of the information included in this tutorial has already been made available to groups who work predominantly with scripts. In this tutorial, that material is combined, expanded upon, and revised. Hopefully, using the tips included in this tutorial will help script writers to prepare scripts that will work in all versions of PSP.




This tutorial assumes you are familiar with editing scripts. The concepts included are for advanced users.

Many screen shots in this tutorial are resized, or compressed to fit on the screen - your message boxes may look a bit different.



Supplies - For this tutorial, you will need the following:

STEP 1

Scripting is an exciting new feature introduced in PSP 8 which allows you to automate lengthy or repetitive tasks that you want repeated on multiple images. It saves you the trouble of doing all the steps by hand every time. Nearly everything you do in PSP can be recorded into a script and played back later.

PSP includes a built-in script recorder that allows users to record a series of steps so they can be replayed later to duplicate that set of actions. However, as different versions of PSP have become available, some scripting commands and variables have been added or changed, and a whole new naming convention standard was adopted with PSP XI. This has caused problems with scripts, and script authors began to discover that scripts recorded in later versions of PSP do not always work in earlier versions. However, with a little editing, most scripts can be made to work in all versions of PSP. This tutorial will show you how to make your scripts "version-independent".

Some of the changes that need to be made are rather simple; others are more complicated. All require changing the Python code within the script. We'll start from the simplest of changes needed, and progress to the more complex.

In the following steps, I've used the following conventions:

  • Script statements/commands are shown in BLUE.
  • Error statements listed in the Script Output (SOP) palette are shown in MAROON.
  • Unless otherwise indicated, all inserted text begins in column 5.

STEP 2

The first change that is needed is in the very first line of the script, which in later versions will say:

from PSPApp import *

Change this line to:

from JascApp import *

If this line is not changed, a script running in either PSP 8 and PSP 9 will give you a message like this:

restricted script violation popup

along with error a message in the SOP which says:

JascApp.Rexec Failure: Restricted script violation - this script must be trusted in order to run.

Moving the script to a Trusted folder will not help – the script will still fail with this popup:

script could not be loaded popup

along with error a message in the SOP saying:

ImportError: No module named PSPApp

STEP 3

The second change that is needed is to insert these two commands at the beginning of every script you write:

True = App.Constants.Boolean.true
False = App.Constants.Boolean.false

Starting with PSP 9, scripts began using 'True' and 'False' for parameters. However, PSP 8 does not recognize those keywords. A script containing the 'True' parameter will fail in PSP 8 with this error message:

NameError: global name 'True' is not defined

Likewise if the 'False' parameter is used, you will get a similar message:.

NameError: global name 'False' is not defined

It is best to place these two statements immediately before the def Do(Environment): statement, starting in column 1, like this:

True = App.Constants.Boolean.true
False = App.Constants.Boolean.false

def Do(Environment):

STEP 4

The third change required is to change these two lines at the beginning of the script:

'Host': u'Paint Shop Pro Photo',
'Host Version': u'12.50'
to this:
'Host': u'Paint Shop Pro',
'Host Version': u''

The Host parameter lists the version of PSP in which the script was recorded, such as Paint Shop Pro 9, or Paint Shop Pro X. The Host Version parameter lists the major and minor version of PSP, such as 9.01 or 10.03. In the lines to change above, I entered 'Paint Shop Pro Photo' and '12.05' for illustrative purposes - your script will have the Host and Host Version you used when you recorded the script. The point is you have to eliminate the version references entirely. If you don’t change those lines from whatever they are to the “neutral”, or non-version-related lines, you will get an error popup like this:

newer version popup
NOTE: If you click the OK button, the script will continue, usually without any problems, especially if you’ve made the other changes indicated above. However, people using your scripts can be very intimidated by this message, so it is best to prevent it from appearing.

There are times when it will be necessary for the users of PSP X to edit the script, changing the 'Host Version' from this:

'Host Version': u''

to this:

'Host Version': u'10'

This only occurs when the script contains TextEx commands, and the text is not rendering correctly in PSP X. I’ve actually had this happen, and have had to warn PSP X users to change the Host Version parameter or risk incorrectly-rendered text. See my FontPreviews script for an example of this problem.


STEP 5

The three changes outlined above will enable most scripts to run successfully in all versions of PSP. However there are a few more things to be aware of when creating scripts in later versions of PSP. One of those "gotchas" is that scripts recorded in later versions may contain commands for actions new to one of the later versions. Scripts such as this will necessarily fail in earlier versions because the commands for those actions will be unknown commands.

For example, the Digital Camera Noise Removal command was introduced in PSP 9. If you try to run a script that includes the Digital Camera Noise Removal command in PSP 8, it will fail with this error message:

JascApp.InvalidCommandName: Invalid or missing command name

If you’re always careful to use commands PSP 8 recognizes, you won’t run into this problem. If your script “must” contain a command introduced in a later version of PSP, be sure to indicate that to your users, so they won’t get frustrated trying to run your script in a version where some of the commands are unknown.

See Appendix A for a complete list of commands added or dropped in each PSP version.


STEP 6

Scripts recorded in later versions of PSP may contain commands that, though not new in themselves, may contain new parameters PSP does not recognize. The NewFile command is a good example – in PSP 9 that command changed a bit to include the LayerType parameter as its way of indicating the background layer type to start with when creating a new file. The LayerType parameter can take any of three formats:

'LayerType': App.Constants.NewLayerType.Raster
'LayerType': App.Constants.NewLayerType.Vector
'LayerType': App.Constants.NewLayerType.ArtMedia

An attribute is used in this parameter that PSP 8 cannot understand (a constant called NewLayerType), Therefore, if a script recorded in PSP 9 or higher that contains the NewFile command is executed in PSP 8, the script will fail with the following message:

AttributeError: NewLayerType

To get a script with the NewFile command recorded in PSP 9 or higher to run in PSP 8, the LayerType parameter would have to be either deleted or replaced by a parameter recognized by PSP 8 – replacing is probably the best bet in most circumstances, because if there is no parameter indicating the type of layer to create, PSP will use the last used layer type, and that might not be what the script needs. So replacing is the best way to go.

PSP 8 uses the following parameter to indicate the background layer type to start with when creating a new file:

'VectorBackground': App.Constants.Boolean.false, (for a Raster layer)
'VectorBackground': App.Constants.Boolean.true, (for a Vector layer)

Therefore, to make sure the NewFile command works correctly in all versions of PSP, replace the LayerType parameter with the correct version of the VectorBackground parameter, and you've made that command version-independent.

There are many such problems with running scripts created in later versions in PSP 8. There were many attributes added or changed in PSP 9 and later versions, and every time one of these is used in a script, it will fail in PSP 8 with an "AttributeError" message. Fortunately, the attribute in error is listed in the error message, making it easier to find and delete or replace the parameter containing that attribute. Things as simple as gradients have changed attributes in PSP 9 and above. When using a gradient as a stroke or fill on any of dozens of commands (any command that uses materials, such as PresetShapes, Fill, Text, and any of the brush commands, for example), the GradientType parameter in PSP 8 looks like this:

'GradientType': App.Constants.GradientType.Linear,

while in PSP 9, it looks like this:

'GradientType': App.Constants.Gradient.Linear,

That little difference will cause a script that uses a gradient to fail in PSP 8 if it was recorded in PSP 9 or above.

See Appendix B for a complete list of constants added in each PSP version. Whenever you get an "AttributeError" message, check this list to see if a new constant is being used. Then either replace the parameter containing the new constant, or remove that parameter entirely.

NOTE: If a parameter is not specified in a command, that parameter will usually default to its last used values. There are cases where parameters have default values that are used, but that's the exception rather than the rule. If the value of the parameter containing the unrecognized constant is important to the execution of your script, find how that parameter is coded in earlier versions of PSP and substitute the early-version code for the code with the new constant.

For the most part, Corel did retain previous parameters and commands and variable names in its repository, even when it changed or eliminated these commands or parameters or variable names. So you’re usually safe using something from PSP 8 in a higher version. However, the opposite is not true – commands, parameters, and variable names are not backward-compatible, so use a lot of caution here.


STEP 7

One last problem facing script authors is the use of PSP resources in scripts. By PSP resources, I'm referring to the resources distributed with PSP, such as Picture Tubes and Gradients, and Preset Shapes, etc. PSP resource names in PSP 8, 9, and X looked like this:

  • Animal zebra
  • Arrow 10
  • Flower 01
  • Tile hex
  • Brick wall
  • Antique Vignette
  • Pointy flower

The first of the resources listed above is a PSP pattern; the second, a preset shape; the third, a picture tube; the fourth, a mask; the fifth, a texture; the sixth, a picture frame; and the seventh, a brush.

Those same resources in PSP XI or higher would look like this:

  • Corel_08_006
  • Corel_11_010
  • Corel_10_026
  • Corel_07_018
  • Corel_15_032
  • Corel_09_001
  • Corel_01_037

If you create a script that uses an installed PSP resource, such as one of the above, and you want your script to be able to run in all versions of PSP, there are some changes you can make to your script that will make this possible. These changes include the following:

  1. Insert code so that at run time, the script can determine the version of PSP in which it is being executed.
  2. Consult conversion tables and insert the proper name for the resource in pre-PSP XI and PSP XI and higher versions.
  3. Insert code into script to select proper name depending on version running, assigning that name to a variable.
  4. Change the code where the resource is used so that the proper information is retrieved from the variable location where it was saved.

Let's look at each of these changes in detail:

  1. To determine the version of PSP in which the script is running, insert these lines into the script:
    # GetVersionInfo
    Version = App.Do(Environment, 'GetVersionInfo' )
  2. For any and every installed PSP resource used in your script, you must determine the assigned names - both the pre-PSP XI name, and the PSPXI and higher name. In an early patch, PSP XI created such a conversion table, called ContentTranslationText.xml. This document contains the name of every resource distributed with PSP XI, along with the "logical" name used in earlier versions of PSP. On my system, the PSP XI version of this file can be found here:
    C:\Program Files\Corel\Corel Paint Shop Pro Photo XI

    In PSP X2, that file was moved to the Languages folder, and there is one for each of the seven languages supported by PSP. On my system, I find the English version of this file here:

    C:\Program Files\Corel\Corel Paint Shop Pro Photo X2\Languages\EN

    To assist script authors to use the correct names or PSP resources in scripts, I have created readable "Translation Tables" from the ContentTranslationText.xml file distributed with PSP. Currently, these tables contain the names used for the resources found in earlier versions of PSP, along with the new, "anonymous", generic name now used in PSP XI and above. You can find a description of the new naming convention, along with links to the readable "Translation Tables" for each of the PSP resources, in my Tips & Tricks for PSP X2 document HERE

  3. Once you've determined the associated resource names, your script will have to assign the correct version of the resource name depending on the version of PSP running. This is done with a simple "if-else" structure. For example, if I wanted to use the Burst 5 preset shape in a script, I would code the following:
    if Version['MajorVersion'] > 10:
          SaveName01 = 'Corel_11_035'
    else:
          SaveName01 = 'Burst 5'

    SaveName01 in the above "if-else" structure is what is called a "variable". A variable is a name which refers to, or points to, a storage location or box in memory where some information is stored. When you use a variable name in a script, you tell PSP to save some information in a storage location (or box). You assign a name to that storage location - called a variable - so PSP can later find or retrieve the data stored there. In the above example, we're calling that storage location 'SaveName01'. We could have called it anything - well, just about anything! It's like a mailbox - it has a tag on it so PSP knows where it is.

    Once the data is assigned to a storage location, PSP can go to that storage location later to retrieve whatever data is there. In the above "if-else" structure, if the version of PSP in which the script is running is greater than 10, then Corel_11_035 will be stored in that storage location. In all other cases, Burst 5 will be stored in the SaveName01 storage location. Therefore, if PSP 9 is running, SaveName01 contains Burst 5, but if PSP X2 is running, SaveName01 contains Corel_11_035.

  4. The last thing that needs to be done is to find where the resource is used - in this example, it will be in the PresetShapes command. Rather than code either the Corel_11_035 or the Burst 5 in the PresetShapes command, we'll use the name of the storage location where we stored the name, depending on the version of PSP running. So you need to examine the command, and find the parameter where the preset shapes name is used. I will not include the entire command here, as it is rather long - but if you examine that command carefully in your script, you will find this line if you recorded the script in any version of PSP before PSP XI:
    'ShapeName': u'Burst 5',

    or this line if you recorded the script in version PSP XI or higher:

    'ShapeName': u'Corel_11_035',

    Because we don't know what version of PSP the user is going to be using to run the script, we will replace the above line with the following:

    'ShapeName': SaveName01,

    Now, no matter what version of PSP the user uses to run the script, the appropriate name will be used for this preset shape! Works like a charm, and allows your scripts to be used by all users, no matter what version they are using.

Let's summarize, continuing our example of using a preset shape:

  1. After the script is created, the author of the script:
    1. Finds the associated resource names for the preset shape shape name being used in the conversion tables.
    2. Edits the script, inserting the version-independence code from STEP 7 in this tutorial into the script.
  2. When the script runs on any user's system, using any version of PSP:
    1. The script extracts the version of PSP running.
    2. The correct form of the preset shapes name is stored in a storage location called SaveName01, depending on the version of PSP running.
    3. When the PresetShapes command is executed, the system finds the name for the resource stored in the storage location called SaveName01 and uses that name in the ShapeName parameter.

Here are a few things to remember:

  1. Be sure to put the "if-else" structure BEFORE the command where the resource is used.
  2. If you are using the resource in more than one command, be sure to change each of these commands so the correct name is used. In the example used above, be sure the ShapeName parameter on all PresetShapes commands that are using this resource are edited to contain the storage location where the name has been stored, in this case, the SaveName01 storage location.
  3. If more than one resource is used in your script, store each name in a different location. For example, the first one might be stored in location SaveName01, the second on in location SaveName02, etc.

Continuing the same example of using a preset shape in a script, if you don't make the changes described above in STEP 7, and you try to run a script created in PSP XI or above in a lower version of PSP, you will get the following popup:

specified preset shape not found

You will get the SAME message if the script is created in any pre-PSP XI version of PSP and you try to run it in PSP XI or above! This is a case where the names of resources in early version of PSP are not maintained in the repository of PSP commands and names, etc. So it behooves script writers to include this code EVERY TIME THEIR SCRIPTS INCLUDE RESOURCES DISTRIBUTED WITH PSP.


STEP 8

The following table lists examples of the some of the resources that are used in scripts. Each line in the table lists a resource type, such as picture tube or texture. Next is a sample of one of these resources as used in versions of PSP before PSP XI, followed by the corresponding name of the sampe sample resource as used in versions of PSP from PSP XI up. A sample command is then listed which could include a resource of the type listed. Finally, the name of the script parameter within that sample command is listed - this is the parameter which would need to be changed in order for the script to be version-independent.

This table is not all-inclusive by any means - it is just provided to give you some basic ideas for the most common resources and commands:

Resource
Type
Pre-PSP XI
Sample Name
PSP XI & above
Sample Name
Sample
Command
Parameter to Change
Picture Tube Flower 01 Corel_10_026 PictureTube 'TubeName': u'Flower 01',
Picture Frame Gold 01 Corel_09_007 PictureFrame 'FileName': u'Gold 01',
Mask Bubbles_07 Corel_07_008 MaskLoadDisk 'FileName': u'Bubbles_07',
Pattern Cracked paint Corel_08_052 Fill 'Name': u'Corel_08_052',
Gradient Duotone red red Corel_06_010 Fill 'Name': u'Corel_06_010',
Brush Pointy flower Corel_01_037 PaintBrush 'CustomBrush': u'Pointy flower',
Preset Shape Arrow 19 Corel_11_019 PresetShapes 'ShapeName': u'Arrow 19',
Styled Line Dash Dot Dot Corel_13_017 Text/TextEx or
PresetShape
'Name': u'Dash Dot Dot',
Texture Brick wall Corel_15_032 Texture 'TextureName': u'Brick wall',

STEP 9

I have included several scripts so that you can actually see the changes described in this tutorial. The scripts create an image, and place a picture tube into the image:

  • ss-samplescript01-ver9.PspScript - recorded in PSP 9:
    • Fails in PSP 8 - "Global name 'True' is not defined".
    • Runs successfully in PSP 9.
    • Runs successfully in PSP X.
    • Fails in versions PSP XI and above - "Runtime error: Unable to open the file" (can't open picture tube).

  • ss-samplescript01-ver9-FIXED.PspScript - "fixed" version of the script recorded in PSP 9:
    • Version information removed, lines 8 and 9.
    • True and False definitions added, lines 12 and 13.
    • LayerType parameter replacec by VectorBackground parameter, line 41.
    • Version information determined, and associated names for picture tube used added, lines 66-72.
    • SaveName01 variable used for TubeName on line 80.
    • Runs successfully in all versions!

  • ss-samplescript02-ver11.PspScript - recorded in PSP XI:
    • Fails in PSP 8 - "No module named PSPApp".
    • Fails in PSP 9 - "No module named PSPApp".
    • Fails in versions PSP X - "Runtime error: Unable to open the file" (can't open picture tube).
    • Runs successfully in versions PSP XI and above.

  • ss-samplescript02-ver11-FIXED.PspScript - "fixed" version of the script recorded in PSP XI:
    • PSPApp changed to JascApp, line 1.
    • Version information removed, lines 8 and 9.
    • True and False definitions added, lines 12 and 13.
    • LayerType parameter replacec by VectorBackground parameter, line 41.
    • Version information determined, and associated names for picture tube used added, lines 66-72.
    • SaveName01 variable used for TubeName on line 80.
    • Runs successfully in all versions!

Try these scripts, in all versions of PSP. Experiment. Open the FIXED scripts in a text editor, and study the changes I made. Make your own copies of ss-samplescript01-ver9 and ss-samplescript01-ver11, and try to make the changes needed on your own. Test after each change - the original error message may go away, only to be replaced by another until all the changes are in! Study these scripts, and work at it until you understand them! Practice, practice, practice - it's the only way to get really "good" at anything!



Conclusion

That's it. It takes time to understand how to edit scripts, so don't get discouraged. Just keep examining code, especially that of script writers with a lot of experience. Eventually, it will become clear! And if you really want to learn how to script, I invite you to take my Paint Shop Pro Scripting courses at LVS. They're all self-study now, so you can proceed at your own pace. You can find descriptions of these courses HERE - if you persevere through the four courses, you'll be scripting like a pro!




If you have any problems, comments, or questions, please do not hesitate to Email me.




Appendix A - New and Changed Commands, by Version

Paint Shop Pro 9 - DROPPED Commands

BoundScript1
BoundScript2
BoundScript3
BoundScript4
BoundScript5
BoundScript6
BoundScript7
BoundScript8
BoundScript9

Paint Shop Pro 9 - NEW Commands

ArtEraserTool
AutoUpdateOptions
AutomatedTestInterface
Backlighting
ChalkTool
ChromaticAberration
CleanOilBrushToolHead
CleanPaletteKnifeToolHead
ClearSelUndoneCmds
ColoredPencilTool
ContactInformation
ConvertToPath
CrayonTool
CreateEllipseObject
CreateRectangleObject
CreateSymmetricalShapeObject
CropToSelection
DetachFromPath
DigitalCameraNoiseRemoval
DisplacementMap
DryArtMediaLayer
EllipseTool
FillFlash
JGLObjectToSelection
MarkerTool
MediaMixer
NewArtMediaLayer
OilBrushTool
PaletteKnifeTool
PastelTool
RadialBlur
RectangleTool
RedoToHere
RunQuickScript
SaveHistoryToQuickScript
SaveHistoryToScript
ScriptSingleStep
ScriptWndFilterLevel
SelectiveRedo
SelectiveUndo
SetHistoryFilter
ShowHistoryPalette
ShowMixerPalette
SmearTool
SymmetricShapeTool
TabbedDocuments
TextEx
UndoToHere
VectorApply
VectorDrawMode
VectorEditMode
VectorKnifeMode
WetArtMediaLayer

Paint Shop Pro X - DROPPED Commands

Browse
LaunchAnimationShop
LoadQuickGuide
LoadQuickGuideHome
MonitorGamma
ShowBrowserToolbar

Paint Shop Pro X - NEW Commands

AdjustPosition
BlackAndWhiteFilm
BlemishFixer
BrowseNewFolder
BrowserDelete
BrowserPrint
BrowserSelectAll
BrowserSelectNone
ChromaticAberrationRemoval
ColorBalance
ColorWorkingSpace
CopyTo
CreateNewFolder
CropApply
CropReset
DecreaseColorsTo16Million
DigitalPhotoLab
DumpScriptOutputPalette
FindFileAgain
FindFileName
GoUpOneFolder
GotoWebSite
HighPass
HighPassSharpen
ImageRename
IncreaseColorsTo16Bit
InfraredFilm
InvertSelection
InvokePhotoSharing
InvokePreferences
JPEGRotCCW90
JPEGRotCW180
JPEGRotCW90
LexarActiveMemorySystem
Makeover
MonitorCalibration
MoveTo
OneStepNoiseRemoval
OneStepPurpleFringeFix
OpenFile
OpenWithOptions
PatternFill
Pick
PickFixup
QuickPhotoFix
Redeye
RefreshTree
RegisterProduct
ScrollScriptOutputPaletteToEnd
SelectThumbs
SendSelection
SetAutoScroll
SetExifDate
ShowBrowser
SmartPhotoFix
SpawnWinExplorer
SuntanBrush
SuntanBrushFixup
ThumbSort
ToggleFilmStripMode
ToggleImageInfo
ToggleTreeView
Toothbrush
UpdateThumbs

Paint Shop Pro XI - DROPPED Commands

BrowseNewFolder
BrowserDelete
BrowserPrint
BrowserSelectAll
BrowserSelectNone
CMYK
CopyTo
CreateNewFolder
DigitalPhotoLab
FindFileAgain
FindFileName
GoUpOneFolder
ImageRename
InitializeClipboard
InvertSelection
InvokePreferences
JPEGRotCCW90
JPEGRotCW180
JPEGRotCW90
LaunchPaintShopPhotoAlbum
MoveTo
OpenFile
OpenWithOptions
RefreshTree
SelectThumbs
SendSelection
SetAutoScroll
SetExifDate
ShowBrowser
SpawnWinExplorer
ThumbSort
ToggleFilmStripMode
ToggleTreeView
UpdateThumbs

Paint Shop Pro XI - NEW Commands

AddImageToPhotoTray
AddSlide
AdvancedEmail
BuyNow
ColorChanger
ColorChangerFixup
CopyImage
CreateSlideshow
CropRotate
Daguerreotype
DeleteSelection
DeleteSlide
EdgeFeather
EditSlideshowSettings
EmailOrganizer
EmailSelection
EmailSingleImage
EmailSlideshow
LaunchPSPP
LaunchSnapfire
LensBlur
OpenSlideshow
OrganizerQuickPrint
OrganizerTree
PasteImage
PhotoFilter
PhotoFix
PhotoLooks
PublishSlideshow
QuickPrint2
QuickSlideShow
RotateLeft
RotateLeft_Slideshow
RotateRight
RotateRight_Slideshow
SaveSlideshow
SaveWithData
SearchDatabase
ShowSettings
ShowYahooToolBar
SlideSettings
SlideshowPlayback
SmoothSkin
SwapSlideshow
TimeMachine
ToggleOrgMode
ToggleOrganizer
TogglePhotoTray
ViewSlideInfo
VirtualCamera

Paint Shop Pro X2 - DROPPED Commands

None!  

Paint Shop Pro X2 - NEW Commands

CopyHighRes
CopyLowRes
CopyMediumRes
CopySpecial
CropApplyAsNewImage
ExpressLab
EyeDrop
FileSaveToOffice
FilmAndFilters
HDRPhotoMerge
OpenNextTrayImage
OpenPreviousTrayImage
Rating1
Rating2
Rating3
Rating4
Rating5
RestoreOriginalFile
RestoreOriginalImage
RestoreOriginalOrganizerFile
SetWallpaper
SmartPhotoFixFixup
SwitchAppLanguage
Thinify
UseGraphiteWorkspaceTheme
VisibleWatermark

Appendix B - New Constants, by Version

Paint Shop Pro 9

AntialiasEx
ArtMediaBrushCleaning
ArtMediaBrushRotation
ArtMediaBrushShape
ArtMediaPencilStyle
CheckpointDataFormat
CreateAs
DisplacementLayout
DisplacementMapType
DisplacementMethod
Gradient
ImageInfoPropertySheet
InitializeTo
MixerActiveTool
MixerMode
MixerSampleMode
MouseButton
NewLayerType
PathOffsetStyle
PictureFrameTarget
RadialBlueType
ResourceListView
SharpenMode
TextFlow
WhiteBalance

Paint Shop Pro X

AutoShowPalettes
BlackAndWhiteFilterColor
CheckpointTransientData
FontSizeUnits
MakeoverMode

Paint Shop Pro XI

EdgeFeather
PhotoLookEffect
TimeMachine
keImageQuality

Paint Shop Pro X2

HDPVariant  




If you have any problems, comments, or questions, please do not hesitate to Email me.

Email


Version Independent Tutorials ~ About Me ~ Home ~ Email

All graphics and content © 2002-present by SuzShook