The EnterPage 13-01
March 9, 2010

In this issue:

Training Studio® 2 Adds Great New Features and Moves to Flex/Flash Builder

Sign Up Now for the 2010 e-Learning Authoring Conference

Denny Dedmore, Dan Carr, Joe Ganci, Tom Hall, and Jeff Rhodes Among Featured TBCON Faculty

Dan Carr, Tom Hall, Bill Hurley, Jeff Rhodes, and Dane Williams Offer Preconference Training

Free Shipping on Programming for e-Learning Developers

Needed: Programming for e-Learning Developers Reviews

Expert Information from the Learning & Mastering ToolBook Series

OpenScript Tip from the Learning & Mastering ToolBook Series

Web Hint from the Learning & Mastering ToolBook Series

ActionScript Tip

VBTrain.Net Nugget


Welcome to year 13 of The EnterPage. Here at Platte Canyon, we've been heavily into Flex recently. As you saw in the last edition of this newsletter, we created a Flex version of our Exam Engine software. Since then, we've rewritten Training Studio from the ground up to use Flex and the new question object that we created for Exam Engine. We are pretty excited by the results and hope you will give both products a try.

We have also been putting the finishing touches on the 2010 version of The e-Learning Authoring Conference. We are in mid-June this year, so start making your plans now. We'll have the usual strong selection of ToolBook sessions and also have great content on Flash, Flex, Captivate, Silverlight, and more. The whole conference (including meals) will be in a single building this year with MUCH less hiking up the stairs! This newsletter contains all the information on Training Studio, the conference, and great technical tips on ToolBook, Flash, and .NET.

Training Studio® 2 Adds Great New Features and Moves to Flex/Flash Builder

Training Studio allows you to create database-driven e-Learning with no programming. Version 2 adds vastly improved question functionality with matching, "matching lines," sequencing, numeric, hotSpot, and more question types, the use of styles for virtually all formatting, the ability to "Show Answers," having the score button optional for questions with a single answer, and much more. Features such as "Tech support" emails, the ability to set completion based on visiting all pages or a mastery score, and support for ActionScript 3 have also been added. With version 2, you add or edit templates with Adobe® Flex®/Flash® Builder™. Training Studio also includes a web-based "Comment Tracker" capability.

Pricing is $1,995 per development license. This includes templates, source, web service, and three copies of the Training Studio Content Editor as well as the ability to deploy an unlimited number of exams. Additional licenses of the Content Editor are available for just $295. The optional Training Studio Tracker Administrator application for viewing, editing, and reporting on comments is separately priced at $495 per user.


Sample Content Lesson

Sample Exam Lesson

Content Editor Help

Publisher Help

Training Studio Tracker Administrator Help

Templates Documentation (PDF)

Online Store

Evaluation Downloads

Join the VBTrain/FlashTrain List (for Training Studio, Exam Engine, and other product discussion)

Sign Up Now for the 2010 e-Learning Authoring Conference

Here are just a few of the many comments that we received from 2009 conference:

This was my first TBCON after years of wanting to go. Even though my colleagues have raved about it, it far surpassed my expectations. The collegiate tone one gets from this list serve was magnified in spades by Jeff's and his family's gracious hosting, fun, everyone's open and helpful contributions of knowledge, fun, sharing of files and know-how, and...did I mention fun and sharing knowledge?

This conference is the BEST place to hook up with experienced ToolBook and Flash developers!

Excellent - accommodations, presentations, extracurricular, access to guru's - overall feeling of friendliness and helpfulness.

It is one of the best ROI's in my 28 years at my company!

You can see the whole list of attendee comments over the years on the web site.

We are excited to build on our past success and bring you another top-notch conference in June. Those of you who have trudged up the stairs at Armstrong Hall since 1999 will be thrilled that we are moving across the hall to Worner Center (where the dining hall is located). All sessions will be on a single floor except for one - and the elevator or stairs to that one is nearby.

We'll have another great lineup of 18 one-hour session blocks over three days, with each block containing four sessions to choose from. We will be repeating many sessions twice so that you are not stuck with multiple "must attend" sessions in a single block. We'll have our usual strong lineup of ToolBook content as well as an even stronger set of Flash, Flex, Captivate, and Silverlight sessions. The sessions will be grouped into these subject areas: Flash/Flex/Silverlight, Management, ToolBook (Intermediate/Advanced), ToolBook (Introduction), and Web Technologies. There are many sessions for beginners, so don't feel like you need to be an experienced developer.

If that isn't enough, we have an excellent lineup of preconference workshops as discussed later in this newsletter. In addition to all the scheduled learning, there will be some great receptions, the always popular "Hack Ack" contest (with the topic to be announced a week before the conference to allow even cooler entries), and the Help Desk where you can get answers to your individual questions. We hope you can make it!


June 14 - 16, 2010
Preconference Training June 12 - 13, 2010

Rates (Based on Your Choice of Lodging)
  • Off Campus ($785)
  • CC Inn Double ($865)
  • CC Inn Single ($930)
  • Apartment Multiple Occupancy ($980)
  • Apartment Single ($1,175)
All options include three meals per day plus snacks. All except "Off Campus" include lodging as well. Note that prices go up by $50 on May 1, 2010. So register by then!

Preconference Training (Does Not Include Meals or Lodging)

  • One Preconference Session ($150)
  • Two Preconference Sessions ($285)
  • Three Preconference Sessions ($420)
  • Four Preconference Sessions ($555)





Denny Dedmore, Dan Carr, Joe Ganci, Tom Hall, and Jeff Rhodes Among Featured TBCON Faculty

A very popular faculty member is SumTotal's Senior Customer Support Engineer, Denny Dedmore. In addition to sharing his many years of ToolBook development and support experience, Denny is quick to meet with you to solve any ToolBook issues or questions as part of the conference Help Desk. In one of his sessions, Denny will show you how to create a ToolBook lesson from start to finish. He will also show you how to record and build simulations, program with the Actions Editor, create assessments, use the Catalog, and more.

Dan Carr is becoming a staple of the conference. A leader in the Flash/Flex community, Dan will show you ActionScript 3 as well as how to integrate Flash with web sites, server-side databases, and other Flash movies. He'll also show the upcoming capability to build iPhone applications with Flash CS5. Like Denny and the other presenters, Dan is also happy to meet with you in the Help Desk to assist with individual issues.

Joe Ganci is an Adobe Captivate guru and will show you all about Captivate 4. Joe speaks at a great number of e-Learning conferences in addition to running his own company. We're thrilled to welcome him back to the conference.

Expanding on his books and sharing expertise gleaned from years of consulting and training, Tom Hall is returning to share his insights on SmartStyles, Simulations, iPhone applications, and the Actions Editor.

Jeff Rhodes of Platte Canyon released Programming for e-Learning Developers last year. He camps out in a classroom and shares tips on e-Learning programming in ToolBook, Flash, Flex, Silverlight, and JavaScript. He will also show you insights into Platte Canyon products like Exam Engine, Tracker.Net, and Training Studio.

This is just a sample of our excellent faculty. Please check out the link below to see the entire faculty (as well as one or two more to be added).


Dan Carr, Tom Hall, Bill Hurley, Jeff Rhodes, and Dane Williams Offer Preconference Training

In addition to rapid-fire sessions for all skill levels, great networking, the Help Desk, etc., the e-Learning Authoring Conference is also an excellent opportunity to receive in-depth training at the preconference sessions. On Saturday, Tom Hall will introduce you to ToolBook in the morning and move onto intermediate ToolBook in the afternoon. Also on Saturday, Dane Williams will teach you from the ground up how to build e-Learning in Flash. Jeff Rhodes will cover the programming you need for e-Learning in each of his sessions. Saturday morning is Flex/Flash Builder, while Saturday afternoon is .NET (including Silverlight, web services, etc.). He'll continue on Sunday morning with ToolBook (Actions Editor and OpenScript) and Sunday afternoon with JavaScript. Dan Carr jumps into the fray on Sunday with an introduction to Flash ActionScript in the morning and intermediate/advanced OpenScript in the afternoon. Finally, Bill Hurley will show you everything you need for rapid development with ToolBook, including using templates, smart styles, PowerPoint, and more. Note that all sessions are self-contained. So feel free to mix and match. Here is the complete lineup:

Saturday, June 12, 2010: 8 AM - Noon

Flash for Beginners - Dane Williams, Buckman Laboratories
Introduction to ToolBook - Tom Hall
Programming for e-Learning Developers: Flex - Jeff Rhodes, Platte Canyon Multimedia Software Corporation

Saturday, June 12, 2010: 1 - 5 PM

e-Learning with Flash - Dane Williams, Buckman Laboratories
Intermediate ToolBook - Tom Hall
Programming for e-Learning Developers: .NET - Jeff Rhodes, Platte Canyon Multimedia Software Corporation

Sunday, June 13, 2010: 8 AM - Noon

Introduction to Flash ActionScript 3.0 - Dan Carr
Programming for e-Learning Developers: ToolBook - Jeff Rhodes, Platte Canyon Multimedia Software Corporation

Sunday, June 13, 2010: 1 - 5 PM

Intermediate/Advanced Flash ActionScript 3.0 - Dan Carr
Programming for e-Learning Developers: JavaScript - Jeff Rhodes, Platte Canyon Multimedia Software Corporation
Rapid Development Tricks with ToolBook: Templates, Smart Styles, Importing from PowerPoint, and Best Practices - Bill Hurley, American Signature Inc.

Preconference Workshops


Free Shipping on Programming for e-Learning Developers 

The Programming for e-Learning Developers book has been selling pretty well on Amazon. Since we'd prefer direct sales, we're matching Amazon's free shipping in the U.S. Plus, Jeff will sign the book for free. That's sure to get you an extra dollar if you ever decide to sell the book on e-Bay:).


Table of Contents

Sample Chapter

Reader Comments


Needed: Programming for e-Learning Developers Reviews 

Speaking of Amazon, the book has pretty consistently been in the top 100 Flash and JavaScript books (there are no ToolBook or Silverlight categories), but we still don't have any reviews. If you have read the book, we'd greatly appreciate a review. Click the link below to get to the right spot.

Amazon Entry

Expert Information from the Learning & Mastering ToolBook Series 

By Jeff Rhodes, Platte Canyon Multimedia Software Corporation

Determining if an Object is Within a Group

Question: I want to find out through OpenScript whether an object is part of a certain group.

Answer: Since objects and groups can be within other groups, I think the easiest way is to loop through the parents of the object as in the code below. If you know that there is only a single group, though, a quicker solution would be to use the objectContainer function like this:

groupId = objectContainer(button "button 1", "group") 
if groupId = group "group 2"
	request "IsInGroup = true"
	request "IsInGroup = false"
end if
Here is a more general solution that will work with groups inside groups.

to handle buttonClick
	local logical isInGroup
	isInGroup = findIfInGroup(button "button 1", group "group 2")
	request "isInGroup = " & isInGroup
end buttonClick

to get findIfInGroup object startingObject, object groupObject
	local logical inGroup
	local object parentId
	local string parentType
	parentId = startingObject
	parentType = object of startingObject
	inGroup = FALSE
	while (inGroup = FALSE AND (parentType <> "page" AND parentType <> "background"))
		parentId = parent of parentId
		if parentId is groupObject
			inGroup = TRUE
			parentType = object of parentId
		end if
	end while
	return inGroup
end findIfInGroup

OpenScript Tip from the Learning & Mastering ToolBook Series

By Peter Jackson,

Page Display Widget

Question: Is there a way to have 2 backgrounds and a page display widget on each that just shows the progress within that background's range of pages?

Let's say bg1 has 3 pages and bg2 has 4.

It would be nice to have the widget show 1 of 3, 2 of 3, and 3 of 3 for the first but then 1 of 4, 2 of 4, 3 of 4 and 4 of 4 for the second.

Answer: Add a recordField to the background and then add the following OpenScript:

notifyAfter enterPage
	local object pageObj, bgObj
	if sysLevel = "author" then
		pageObj = this page
		bgObj = objectContainer(self,"background")
		rfObj = words 1 to 3 of self && "of" && 
		pCnt = pageCount of bgObj
		pNum = pageNumber of pageObj - pageNumber 
			of first page of bgObj + 1
		if pCnt = 1 then
			text of rfObj = "Page" && pNum && "of" 
				&& pCnt && "Page"
			text of rfObj = "Page" && pNum && "of" 
				&& pCnt && "Pages"
		end if
	end if
end enterPage

Add this to the catalog and then copy to all backgrounds.

When done open the command window and enter:

flip all

Editor note: This is a great example of OpenScript that supports both native and DHTML projects. Since it writes the text at author mode, it will still have the right text in the recordField AFTER export (though the OpenScript will of course no longer function then).

Web Hint from the Learning & Mastering ToolBook Series

By Denny Dedmore, SumTotal Systems, Inc.

Removing Spaces with the Actions Editor or JavaScript

Question: DHTML: I want to do a string comparison. For example "2x + y" = "2 X + y " should be the same. So I need to remove the spaces. This can be down by using the charCount function and then looping through the string and saving the non " " (space) characters. In the Actions Editor help file, it says string comparison are case-sensitive and to use the uppercase() or lowercase() functions. Any suggestions?

Answers: Denny, Simon Price, and Clifton Slegar combined for an excellent set of answers.

Denny's straight Actions Editor solution:

Here is some basic logic which will strip out the space character. If you need to use this logic in various places you'll likely want to make a Shared Action out of it instead.

-- On click...--------------------------------------------------------
Set str to "X / 2 = Y"
Set correctAnswer to "x/2=y"
Comment: Strip spaces out of user's answer which is stored in variable str 
Set newStr to ""
Comment: process each character, moving each non space char into new variable 
Step k from 1 to charCount ( str ) by 1
  Set curChar to character k of str
  If curChar <> " "
    Comment: If the current char is not a space, move it to the new string
    Set newStr to newStr & curChar
  End if
End step loop
Comment: newStr now contains their answer with all spaces stripped out 
If lowercase ( correctAnswer ) <> lowercase ( newStr )
  Display alert: "Answer is wrong"
  Display alert: "Answer is right"
End if

Simon Price suggested a JavaScript solution:

The simplest option is to use a regular expression in an external JavaScript function.

They are a *huge* time saver on anything like this and well worth the effort of learning.

Clifton Sleger made a complete example:

I agree! I use the following as a standard JavaScript to handle special cases like this.


tbk_function getExternalResult(java_string) {
	return eval(java_string);



on click
	set var x to "2 X  +  y "
	set var x to x & ".replace(/ /g, '')"
	execute script getExternalResult(x) store return value in x 
	-- now x = "2X+y"

This method permits you to access a lot of JavaScript methods -- that is if they are relatively simple. Otherwise, writing a full fledge JavaScript function is more advisable.

Simon extended the function to remove tabs and new line characters also:


If you wanted to strip out tabs and new lines as well as spaces, use \s instead of " " in the regular expression replace call.

set var x to x & ".replace(/\s/g, '')"

Shows the power of the collaboration of the ToolBook List at its best!

ActionScript Tip

By Jeff Rhodes, Platte Canyon Multimedia Software Corporation


Question: In the context of Training Studio 2.0 templates, I am unclear on the full meaning of "dictionary." Specifically, I am curious what this statement in the documentation means: The pageArrayLocal variable is a Dictionary that represents the current training page.

Answer: A Dictionary is actually a Flex/ActionScript object. It is similar to a Hashtable in Visual Basic or an associative array in JavaScript. The Dictionary has a key and a value. When we read the content.xml file in Training Studio, we put the content of each page into its own Dictionary.

The keys are column names and the values are the text that the subject matter put in. For example, here is a small section of the XML for a page:

<title>Training Studio TBCON Faculty Sample</title>
<content_0>Welcome to the TBCON Faculty sample created in the Platte Canyon Training Studio. To learn more about Training Studio, please visit ~external=</content_0>

title, content_0, and graphic_0 are keys. "Training Studio TBCON Faculty Sample", "Welcome...", and "trainingstudio.gif" are values.

When Training Studio navigates to a page, it sets the pageArrayLocal variable to be the Dictionary associated with that page. We then look for the "templateType" key to figure out which template to use. Within the template, the loadData method loops through the keys and sets the appropriate content, reads in the media, load graphics, etc.

A related data type that you'll run into is the ArrayCollection. It is similar to a Dictionary but does not have keys. Instead you refer to objects by their numeric position. In Training Studio, the TSCommon.masterContentArray is an ArrayCollection of all the Dictionaries (one per page) in the training.

See the next section for the equivalent objects in .NET.

VBTrain.Net Nugget

By Jeff Rhodes, Platte Canyon Multimedia Software Corporation

Dictionaries in .NET

In the previous section, we looked at a question related to the Dictionary object in ActionScript. Here is some continued information on the equivalent object in .NET.

We are working on a Silverlight version of Training Studio 2 right now. One advantage in .NET is that we can use Generics to specify the type of objects within the Dictionaries or ArrayCollections. For example, here is how the same objects are defined in ActionScript and Silverlight:

public static var masterContentArray:ArrayCollection = new ArrayCollection();
public static var pageArray:Dictionary;

Friend masterContentDictionary As New Dictionary(Of Integer, Dictionary(Of String, String))
Friend pageArray As Dictionary(Of String, String)
Note that we renamed masterContentArray to masterContentDictionary and made the "page number" an explicit key. The direct equivalent to the ArrayCollection would be:

Friend masterContentArray As New List(Dictionary(Of String, String))

The advantage of Generics is that we can specify exactly what kind of objects are stored in the Dictionary or List objects. If we try to put an object of the wrong type in it, Visual Studio will tell us. When we pull objects out of the Dictionary or List, we can use them as that type right away, rather than having to use the Dictionary() syntax.

The EnterPage is distributed up to four times per year, with occasional special issues. Individuals who have expressed interest in Platte Canyon Multimedia Software Corporation or its products receive The EnterPage. Suggestions for articles or proposals for article submissions are welcome. Send information to Back issues of the EnterPage are available at:

Platte Canyon Multimedia Software Corporation, 8870 Edgefield Drive, Colorado Springs, CO 80920, (719) 548-1110