... ..

The EnterPage

The ToolBook Developer's Newsletter
January 15, 2002

Issue 5-01

... From Platte Canyon Multimedia Software Corporation.

In This Issue

Upcoming ToolBook Training Classes
Progress Tracker 3.0 Offers Web Capability
New Service Patch Available for Instructor 8.1
TBCON 2002: Sign up Early
Platte Canyon Products in the Pipeline
Plug-In Pro Tool Spotlight: Name Selected Objects
CBT Creation Tip from Chris Bell: Working with Digital Still Photos
Expert Information from "Learning & Mastering..." Series
OpenScript Tip from Jeff Rhodes
Actions Editor Tip by Cindy Kessler
Coming in the Next Issue
Information on Subscriptions and Article Submissions


by Chris Bell

It's hard to believe that The EnterPage is into its fifth year! Our first issue said, "The purpose of this newsletter is to keep you informed of new products available from Asymetrix and Platte Canyon as well as offer some pointers on ToolBook® development." Since then, Asymetrix became Click2learn, and the EnterPage has grown from just under 1000 words to our current average of about 3500. Some things are the same, though. We still hope to pass along information about the latest ToolBook developments as well as a number of tips and tricks for ToolBook developers, and of course, we'll always let you know the latest about Platte Canyon products. Here's hoping that the next five years are as exciting as the first five!

When we're not waxing nostalgic about The EnterPage, we're singing. Platte Canyon now has a karaoke machine. Jeff has it at his house right now. (Heck, he's probably getting his Paul McCartney routine down pretty good at this point). But it's not just for us to play with. We're bringing it to TBCON! So, get your singing voice ready because we'll be doing karaoke all Tuesday night at the conference (interspersed with the 2nd Annual ToolBook Hack-Ack contest presentations). We promise not to compare you to Dave Frisk’s guitar and singing on Monday night. Yep, we love to have fun around here!

But it's not time for singing yet, so let's talk ToolBook! We have loaded this issue with tips and tricks we hope you find useful.

Enjoy, and thanks for being part of The EnterPage!

Back to Top

Upcoming ToolBook Training Classes

Many of you have asked us to keep you posted when we're about to offer a class that is not "sold out." We still have openings for next week's class! So, if you're interested in visiting nice sunny Phoenix, Arizona and getting some ToolBook Training while you're here, please let us know. Here our schedule of courses:

Date Course
January 21 - 24, 2002 ToolBook Instructor for Internet Deployment
February 18 - 22, 2002 Learning & Mastering ToolBook Instructor: The Class
March 18 - 21, 2002 ToolBook Instructor for Internet Deployment
April 15 - 19, 2002 Learning & Mastering ToolBook Instructor: The Class
May 13 - 16, 2002 ToolBook Instructor for Internet Deployment
June 3 - 7, 2002 Learning & Mastering ToolBook Instructor: The Class
July 22 - 25, 2002 ToolBook Instructor for Internet Deployment

ToolBook Instructor for Internet Deployment is $1,400 and Learning & Mastering ToolBook Instructor: The Class is $1,650.

More information is available at:

Back to Top


Progress Tracker 3.0 Offers Web Capability

The new Progress Tracker 3.0 offers new features to match the recent release of TBK Tracker 3.0.

Developers choose Progress Tracker when they want to build one TBK file with professional student tracking features. If they have multiple TBK files, each comprising one lesson, they use TBK Tracker.

Here are the major new features of Progress Tracker 3.0:

  • Uses Access or SQL Server as the database
  • Uses Jet (Access) or the SQL Server driver rather than ODBC for the data access
  • Displays dates (including reports) in regional settings (displaying the day before the month if appropriate)
  • Has improved ability for the Administrator and Reporter to display lots of lesson, student, class, and course data
  • Provides optional (separately priced, see below) ability to store data on a web server

The price of a development license remains the same ($2,995). The upgrade price from version 2 is $995 per development license. Unlimited technical support is $495 (phone and email) or $295 (email only).

The pricing of the new "web deployment" capability is $995 per deployed database. So if you have three different customers that each has their students and course/lesson data in their own database, they or you would need to pay $995 for each one. With your first purchase, you receive the Active Server Page (ASP) scripts, sample files, etc. If you'd like to see an example of this capability, please visit this page. Note that deployment can be either "Rich Client" (CD, LAN, etc. with an active Internet connection) or "Neuron." One exciting application of these new capabilities is when you combine SQL Server and web deployment. Now the Administrator and Reporter can run locally and read/write data on the SQL Server database sitting on your web server!

Back to Top


New Service Patch Available for Instructor 8.1

If you're running Instructor 8.1, you should get this service patch. Most important for existing courses is the fix to ToolBook's HTTP Post functionality. Without this service patch, HTTP Post will not work in native (non-DHTML) mode on some versions of Windows (95, 98, ME). In addition to fixing this and other bugs, the service patch improves SCORM support for DHMTL export and adds objects and features that will help create "accessible" DHTML applications.

Note that this is a patch for Instructor 8.1. If you are still running Instructor 8.0, you will first need to upgrade to 8.1. This requires a full installation available for $20 from Click2learn or Platte Canyon (U.S. and Canadian customers only) at:

Full information on the patch is available in the Click2learn Knowledge base here.

The patch is available for download at:

Back to Top


TBCON 2002: Sign up Early

TBCON is just six months away! We have updated the web site and are now accepting early registrations and session proposals.

For more information and details, please see the conference web site at:

Also, FYI, we are renaming the conference to be "The ToolBook® and VBTrain.Net™ User’s Conference." We have put a full explanation of the name change on the web site (under "What is ToolBook, VBTrain.Net"), but the short version is that we are expanding the format to include the writing of training with the new Visual Basic.NET. We want to stress that this will not remove any ToolBook content but will rather broaden the focus of the conference.

We're planning another tech-full, fun-filled event for 2002.

  • Awesome.
  • Conference exceeds the scale!
  • Excellent - most well run, informative conference I've attended.
  • Excellent - only regret missing last two years.
  • Excellent. Love the relaxed atmosphere and great attitude of all the presenters.
  • Excellent; especially for 1st time attendee.
  • Fantastic!
  • I enjoyed returning and meeting other TB developers. Beyond seeing what others are building, the sense of community is the best part of the conference.
  • It kept me fully engaged.
  • Once again, you have provided the best conference of the year for me. In three days, I got a year's worth of knowledge
  • Outstanding. Same high quality as last year!
  • Super, wonderful, terrific, as always.
  • Superb! Lots of content for me--an inexperienced developer.
  • The best conference I have been to in over 20 years!
  • Very well put together - quite impressed overall. Very applicable to my work.
  • You guys are awesome! Great content, very well organized.

We have even more preconference workshops than last year. Please see http://www.tbcon.com/tbconPreconSessions.aspx for details. We’ll be posting the session list as well once we start finalizing presentations.

Finally, for those interested in keeping in touch with TBCON attendees (ride arrangements, Hack-Ack competition preparation, TBCON Karaoke team practice, etc), we have set up a brand new listserv. More information is at: http://www.tbcon.com/list.aspx

Back to Top


Platte Canyon Products in the Pipeline

We are working very hard on the Plug-IN Pro 6.0. It will add a number of cool features and functions, such as:
  • Click a button to see all the objects with Actions on the page or background. Select the object and then see a list to the right of the events handled for that object. Click to display the Actions Editor for that object with that event already loaded. Do that same thing with the page, background, and book itself.
  • Similar functionality to the above with shared scripts. See a list of objects with shared scripts and then be able to select one and open in the script editor.
  • Delete a page or range of pages (by page number or background) AND delete all the resources that are freed up by the deletions. For example, delete pages 10 – 20 and have the tool delete any bitmap or icon resources used exclusively by those pages.
  • Special characters palette to make it easier to enter characters such as À, Ì, Ö, á, ó, etc.
  • Export a list of clips with information about the source and other properties.
  • Tool to convert all pictures to paint objects
  • Export all paint objects to external files where you can edit them, replace them with a new screen capture, assign a palette, etc.
  • Replace all paint objects with their matching external files. Restores name, position, layer order, group, etc.
  • New “sticky note” tools to tile, resize, and select sticky notes.
  • Color Spy tool that allows you to click on a screen region and see the color in RGB and HLS color units.
  • Add a “Most Recently Used File” list to the “View a Page” utility
  • More!

We anticipate the Plug-In Pro 6.0 being available within the next month. Pricing will be $165 to upgrade from version 5.0 or $495 for new licenses. We’ll let you know when it is available.

In April, we (Platte Canyon Press) also anticipate releasing Jeff’s new book, VBTrain.Net™: Creating Computer and Web Based Training with Visual Basic.NET®. Within a month or so, we’ll have lots of information on this and related products.

Back to Top


Plug-In Pro Tool Spotlight: Name Selected Objects

by Chris Bell

This column features one of the many tools available in the Plug-In Pro. Today, we will look at Name Selected Objects, a very useful tool.

Rename selected objects does just what it says: it takes all objects you have selected on the page and names them sequentially according to your entry. For instance, if you have five objects selected on a page, you can click the Name Selected Objects button to name them. You'll then be presented with a dialog asking to type in the name for the first object. The last part of this name needs to be a number or a letter. For instance, any of the following names would work:

Button 1
Field A
My Favorite Object 1
GraphicHolder 1
ObjectForClick a

All selected objects are then named sequentially. For instance if you typed in "ObjectForClick a," then the other objects would be named:

ObjectForClick b
ObjectForClick c
ObjectForClick d
ObjectForClick e

This is very useful so you can quickly name all objects that you want. It also comes in quite handy when working with Platte Canyon's TB Connection line of products. These products allow you to store content outside of ToolBook.

For more information on Plug-In Pro, please browse to: http://www.plattecanyon.com/pluginpro.aspx

To see detailed on-line help with graphics on Import Resources, please browse to: http://www.plattecanyon.com/help/pluginpro/Naming_Selected_Objects.htm

To see information on TB Connection, please go to: http://www.plattecanyon.com/contentconnection.aspx

Back to Top


CBT Creation Tip from Chris Bell: Working with Digital Still Photos

Using a digital still camera gives the developer instant access to royalty free photos limited only by what the developer can shoot. This is perfect for many training applications. Here are a few tips for the beginner to get the most out of the digital images.

Cameras and Resolution for the Screen
Digital cameras differentiate themselves primarily by the number of pixels in the stored image: the larger the number, the finer the details. Since digital cameras want to compete with their analog counterparts, their goal is too print a 5 x 7 or 8 x 10 print that looks as good as it came from film. A 1-megapixel camera can achieve this with up to 5 x 7 prints. A 3-megapixel can go up to 8 x 10 prints without a problem. But we're not printing them out to paper. We don't get paper's dense 300 dots per inch coverage. Since we're talking about displaying these images on the screen, we get a measly 72 dots per inch. So, no matter what, we're going to reduce every image to at most a 300k image (and that's if it takes up every part of a 1024 x 768 display). Bottom line: you need to resample. Any good graphics program will do this. The key is to remember to set resolution at 72 dpi and then resize according to pixels. (If you're thinking that most graphics formats only pay attention to pixels, so setting resolution to 72 dpi is redundant. You're right. But I like redundancy). Only one other rule about resampling: resampling to a smaller image is just fine, but resampling to a bigger image results in loss of quality and shouldn't be done.

So, if you're only ever going to show 640 x 480 or smaller images on the screen, you probably don't need a 1-megapixel or more camera. But, here is the catch. The larger the image to start with, the more flexibility you have with the image. Say you take a horizontal photo, but realize that it didn't need all that space on both sides. Remember, resampling up is bad, so you're stuck unless you have room to spare. That's why you want more pixels. The more you have, the more you can later choose to zoom in on a part of the image without losing quality.

Everything is a rectangle
As with all graphics resources in ToolBook, remember that everything is a rectangle. Even if you want a pretty oval frame around that picture of a schnauzer, the only way to get it is to make a rectangle image and then chromakey out the part that you don't want.

Adjust Levels
Digital photography can make anyone look good. If you underexposed an image or the flash didn't go off, take it into Photoshop (or another paint application) and adjust the light levels. There is more information in the picture than meets the eye. In many cases, you can adjust that image back to normal. You can even add blue skies to a gray outside shot if you want.

Red-eye Reduction
The camera we use at Platte Canyon loves to give people red eyes even with red-eye reduction turned on. Luckily, there is a quick and easy way to get rid of red eyes. Draw a circle around the red part of the eyes and then do a series of steps to remove the red from that part of the image. We use a Photoshop saved action to do this. If you'd like this action and others, you may download them from the following link (scroll down to "PhotoShop 6 Actions"):

So there you go, I hope these tips are helpful. Happy digital photo shooting.

Back to Top


Expert Information from "Learning & Mastering ToolBook Instructor"

from Jeff Rhodes

We’ll do a shorter and a longer topic this time:

ASYM_Draggable Versus defaultAllowDrag Properties

“At first glance, the ASYM_Draggable and defaultAllowDrag properties appear to be very similar. However, ASYM_Draggable is both easier to use and less general. You want to use it in the situation when your user should be able to drag an object around the screen, leaving it wherever she wants. "Resetting" the page (e.g., sending the ASYM_Reset message) puts the object back to where it started. While you COULD do this same task using defaultAllowDrag, you would have to write a fair amount of OpenScript to do so.

If you want to provide a different type of drag functionality, however, you'll likely want to start with defaultAllowDrag. For example, you may want to drag an object into one of three bins, hiding it if you selected the right one. ASYM_Draggable wouldn't be appropriate because we 1) don't want to actually move the object and 2) we need to use OpenScript to detect the "drop" object and see if it is the right one.”

Deciding Between Handlers and Functions

How do you decide whether to use a handler or a function? If you need the result of a calculation or computation, clearly you would use a function. But other times, either one may do.

If I think that I might want a RESULT from some code, either to take an action or simply to be sure that everything worked okay, I'll use a function. If not, then I send a message and write a handler.

For example, the lrn_checkSteps() function shown below is primarily written to animate the Next Page button when all page tasks are complete. However, there are times we want to know if the page is completed for other reasons, so we use a function and return completion status.

to get lrn_checkSteps word currentStepNum, word lastNum
-- Checks if all page steps have been completed
-- Returns true if done, else false
-- If done, animates the next page button

	system stack s_doneSteps
	local word num

	-- add current step to doneSteps (omitted)

	if NOT ASYM_itemInList(currentStepNum, s_doneSteps)
		push currentStepNum onto s_doneSteps
	end if
	step num from 1 to lastNum
		if NOT ASYM_itemInList(num, s_doneSteps)
			return FALSE
		end if
	end step

	send lrn_animateNextPageButton
	return TRUE
end lrn_checkSteps
An example of when a handler is more appropriate is when we want to hide the Agent narrator for this training. There's not really a useful return value and we just want the action to occur.
to handle hideCharacter
	system book s_currentBook
	system s_narratorID
	system stack s_lastCharPixelLoc

	if s_lastCharPixelLoc <> null
		s_lastCharPixelLoc = null
		get extHide() of s_narratorID
		narratorCurrentlySpeaking of s_currentBook = false
	end if
	if isObject (field "narrationText" of this background) = true
		hide field "narrationText" of this background
	end if
end hideCharacter
One final note: When you call a function, execution of the code containing the call will not continue until you get a value back from the call. This can be very handy when you want to halt execution until something else has happened.

Back to Top


OpenScript Tip from Jeff Rhodes

Working with Rich Text Format (RTF) Files

How do you read and write Rich Text Format (RTF) files from ToolBook? The script below demonstrates how to save the richText of a field to an external file. Notice that saving the file entails creating it, writing to it, and closing it.

narrationInfo = richText of field "narrEntry"
bookPath = ASYM_PathOfFile(name of this book)
tempFileName = bookPath & narrName & ".rtf"
sysSuspend = false
clear sysError
openFile tempFileName
if sysError = null -- file exists
	closeFile tempFileName
	request "File" && tempFileName && "already exists. Do you want to overwrite?" with "Yes" or "No"
	if it <> "Yes"
		sysSuspend = true
	end if
	createFile tempFileName
	if sysError is not null
		request "Could not create file" && tempFileName & "."
	end if
	writeFile (narrationInfo) to tempFileName
	if sysError <> null
		request "Could not write to file" && tempFileName & "."
	end if
	closeFile tempFileName
	sysSuspend = true
end if

You could then read that content during runtime if desired. This is in fact how we show the "narration text" in our “Learning & Mastering ToolBook...” series if the user turns off the sound or doesn’t have a sound card.

-- separate handler to read the file
tempFileName = bookPath & narrationName & ".rtf"
openFile tempFileName
readFile tempFileName to EOF
closeFile tempFileName
fieldID = field "narrationText" of this background
richText of fieldID = it
          to Top 


Actions Editor Tip by Cindy Kessler

Example of Using OpenScript to Change Action Sequences

One of our customers recently needed to change the key they were handling in a keyPress action sequence. The glitch was they wanted to do this across multiple objects on multiple pages as quickly as possible. They were hoping for some OpenScript they could use to change the charCode value from TAB (charCode = 9) to CR (charCode = 13) in all keyPress action sequences in the book. We wrote the following script to make the change. (This could be run in either a button or in the command window.)

The main idea is we replace the string ",value 9," with the string ",value 13," wherever it appears in a keyChar's action array. This is not the most robust code, since we don't bother to check the context of where the string appears, nor do we bother to change the corresponding OpenScript (our customer had managed to do that already). But it does provide an example of manipulating action arrays with OpenScript.

local tempArray[]
pageList = pages of this book
searchString = ",value 9,"
newString = ",value 13,"
numChars = charCount(searchString) - 1
while pageList <> null
	pop pageList into pageID
	oList = getObjectList(pageID, "", "ASYM_EA_ActionArray(keyChar)")
	while oList <> null
		pop oList into oid
		tempArray = ASYM_EA_ActionArray(keyChar) of oid
		step num from 1 to dimensions(tempArray)
			tempLine = tempArray[num]
			while searchString is in tempLine
				startNum = offset(searchString, tempLine)
				clear chars startNum to (startNum + numChars) of tempLine
				if startNum > 1
					put newString after char startNum - 1 of tempLine
					put newString before tempLine
				end if
			end while
			tempArray[num] = tempLine
		end step
		ASYM_EA_ActionArray(keyChar) of oid = tempArray
	end while
end while

Back to Top


Coming in the Next Issue of the EnterPage

  • TBCON 2002 Preview
  • Another Plug-In Pro Tool Spotlight
  • More CBT Creation Tips from Chris Bell
  • More OpenScript Tips from Jeff Rhodes
  • More Actions Editor Tips from Cindy Kessler
  • ToolBook Tip (from Learning and Mastering ToolBook Series)
  • More

Back to Top


Information on Subscriptions and Article Submissions

The EnterPage is distributed 4 times a year, with occasional special issues. Individuals who have expressed interest in Platte Canyon Multimedia Software Corporation or its products receive The EnterPage. If you do not wish to receive future issues, send an email message to EP@plattecanyon.com with the word "unsubscribe" in the subject line. New subscriptions are available by sending an email message to EP@plattecanyon.com with the word "subscribe" in the subject line and the person's name and company in the text of the message.   Suggestions for articles or proposals for article submissions are welcome. Send information to EP@plattecanyon.com. Back issues of the EnterPage are available at http://www.plattecanyon.com/enterpage.aspx.

Back to Top

This page was created by Platte Canyon Multimedia Software Corporation.

n .. Copyright © 2002 Platte Canyon Multimedia Software Corporation