The ToolBook Developer's Newsletter
Canyon Multimedia Software Corporation.
by Chris Bell
It's a big Platte Canyon product time right now. We are enjoying spreading the word about our three new releases. And we are in the midst of working on some very exiting new products to come out over the next few months. While working on ToolBook-related products is practically our favorite thing to do around here, we also like meeting up with other ToolBook developers.
It was a treat to see so many developers at the ToolBook User's Conference. It's always fun to see what wonderful applications people are creating with ToolBook. If we didn't get a chance to hook up at the ToolBook User's Conference, please stop by our booth or one of our presentations at OLL Europe or OLL. We'd love to see you.
This issue of the EnterPage covers our newest product releases as well as giving an early preview about the newest products to come out from Platte Canyon. And, as always, you'll also find a collection of tips and information for ToolBook developers.
The ToolBook User's Conference finished its three-day run on June 28, but we have continued to receive unsolicited comments from attendees ever since. As a group, these comments provide a good picture of the event. Here are selections from the comments:
"I had a wonderful time at the conference!! Besides it being very informative, I really enjoyed the opportunity to talk with all of the users of ToolBook and hear about the exciting new ideas they have."
"I came back so motivated."
"TBCON was well organized and enriching."
"I turned in a survey but I would also like to add that the conference has been a real help in my job. I found tons of hints and tips there and will be back in the future."
"The conference was a great success. We have wasted no time incorporating ideas from the conference into some of our projects."
"Great Users Conference! I had a great time, accommodations were surprisingly comfortable (Loomis Hall), food was out of this world and of course the session themselves were A number 1!"
"I very much enjoyed the conference -- it was very well organized, and I liked the "small" feeling of it with easy access to the presenters and other attendees. The scope of material covered was very good too. I'm looking forward to the CD as well!"
"It was a great conference just loaded with real solutions not promises of what you should be able to do."
"This was one of the smoothest running, best organized, valuable, and fun conferences I have ever been around."
"We brought away a wealth of useful information."
"I had a great time at the conference and look forward to next year. I found something of value in every session I attended."
For those of you who couldn't attend the conference or would like extra copies, conference CD's will soon be available for $50 plus $5 shipping & handling ($10 outside of the U.S.). To place an order, go to https://outlaw.securewebs.com/plattecanyon/store/ or call us at 888-866-5251.
Plan ahead for next year's conference: ToolBook User's Conference 2001 Colorado Springs, Colorado July 30 to August 1, 2001
We'll be spreading the preconference over both Saturday and Sunday (July 28 and 29) next year with the idea that most people will attend one day or the other.
See pictures from the 2000 conference and watch for more information on the 2001 event at www.tbcon.com.
We have been busy updating products designed to meet our company goal of "Improving the Lives of Training Developers." Since the last EnterPage, we have released three major upgrades to our products. Here are some product descriptions:
Stop by and see us at these upcoming conferences:
OnLine Learning Euro 2000
OnLine Learning 2000
What products can you expect to see from Platte Canyon in the next six months or so?
Shared Actions cannot use variable object references
One technique frequently used in OpenScript that is NOT available in the Action System is the use of variables to reference objects.
Consider the following OpenScript code that sets the caption of six buttons:
step num from 1 to 6 caption of button ("button" && num) = "Step" && num end step
To do this same thing in a shared action, you need to provide the object reference for each button to the page level:
set caption of button "button 1" of page "Steps" to "Step 1" set caption of button "button 2" of page "Steps" to "Step 2" set caption of button "button 3" of page "Steps" to "Step 3" etc.
This clearly has an impact on the re-usability of shared actions since you cannot use these same actions to modify buttons on a different page.
One alternative: Create a shared action that receives the name of each button as a parameter and returns a caption based on that name. Then call the shared action from each button, passing "name of self" as the parameter. Assign another action that sets the caption of self to the returnValue. This allows you to duplicate and rename the buttons without changing the action.
CBT Creation Tip from Chris Bell: Flash and ToolBook
Macromedia's Flash product has made a splash. The program is an excellent animation package that even allows some interactivity ... and it works perfectly inside of ToolBook. Once you create a Flash Movie, there are several ways of getting it to work inside of ToolBook, the simplest is to use the Universal Media Player.
To do so, simply drag the Universal Media Player from the catalog to your page and set its extended property to point to the Flash file you created. It is best to have the Flash file and ToolBook file in the same directory. That's it! Set up is complete.
The biggest advantage to using the Universal Media Player is that the Flash animation will export to DHTML without requiring any additional developer setup. Also, the Action System works with the Universal Media Player, so you can add interactivity and communicate back and forth between ToolBook and the Flash movie.
It is important to realize, however, that when deploying a native ToolBook file (rather than exporting to DHTML), all users will need to have the Macromedia Flash ActiveX control installed on their system. While it is likely that many users will already have the Flash ActiveX control on their system, it is not guaranteed. Therefore, at the very least, the developer should alert the users that they need to download the Flash player from the Macromedia Web site.
For professional CD-ROM based applications we advise creating an installation routine that installs the ToolBook Runtime files and then automatically checks the system to determine if the Flash ActiveX control is installed. If it is not installed, the setup routine would install it automatically. This requires a license to distribute the Flash Player ActiveX control, which is available free form Macromedia. This type of installation routine requires a professional installation package such as InstallShield Pro.
Array Properties, System Variables, and Maximum Size
Although arrays can be stored as user properties, you can't read or write the individual elements of them directly. You must first assign the array to a local or system variable. If you need to change it, then you must save it back to a property again. To avoid this, I store all frequently used arrays as system variables. However, system variables initially have no value when you start up your application. If the array has a reasonable amount of data that doesn't change from session to session, a good way to initialize the array is to set the system variable to the contents of a user property on enterApplication, and then update it through the session solely as a system variable. Here's an example from our Progress Tracker.
to handle setUpChapters book bookID system chaptersAndSections [maxChapters of bookID] -- this is called as part of enterApplication -- other code deleted here chaptersAndSections = chaptersAndSections of bookID -- rest of handler end setUpChapters
At this point, specific student tracking information is read from external files into this chaptersAndSections array.
The answers, feedback, and other information in ToolBook's CBT question objects is stored in user properties of each individual object. In order to change the content of these (e.g., to change the language to French or Spanish), you have to assign the array property to a local property as shown below.
to handle populateQuestionContent object objectID, word num system string s_currentPageQuestionContent local tempAnswerArray, tempDelayedFeedbackArray -- code skipped for clarity tempAnswerArray = asym_wid_ansArray of objectID tempDelayedFeedbackArray = asym_wid_summaryFeedback of objectID -- make changes to the tempAnswerArray and -- tempDelayedFeedbackArray here asym_wid_ansArray of objectID = tempAnswerArray if hasFeedback = true asym_wid_summaryFeedback of objectID = tempDelayedFeedbackArray end if end populateQuestionContent
One final piece of information on arrays: Each element can contain up to 64K of data. This is the same as a single local or system variable. Thus, arrays are a good way to avoid some of the built-in limits of ToolBook.
One of the challenges in creating the TBCON 2000 Conference CD was creating a ToolBook page for each session and a corresponding directory on the CD to hold that session's files. As with many other ToolBook challenges, using OpenScript helped tremendously. The code below is part of a "Generate Pages and Subdirectories" handler accessible from the author-level "TBCON" menu. I had previously read both the session names and desired directory names from an Access database into the sessionArray variable. We then use a "source" page that is the first page of the background (this is variable sourcePageID). For each session that doesn't already have a corresponding page, we copy the source page and set some relevant properties. We then do the same thing for the directory: check to see if it's there and, if not, create it.
backgroundID = background "presentations" linkDLL "tbfile32.dll" INT createDirectory32(STRING) INT setCurrentDirectory32(STRING) end linkDLL numDirs = 0 numSessions = item 1 of dimensions(sessionArray) sourcePageID = page 1 of backgroundID numPages = pageCount of backgroundID pagesCreated = 0 step num from 1 to numSessions sessionName = sessionArray[num] pageName = removeSpaces(sessionName) pageName = trimPageName(pageName) if isObject(page pageName) = FALSE -- create page pageID = copyObject(sourcePageID, (page numPages of backgroundID)) increment numPages increment pagesCreated arrayNum of pageID = num name of pageID = pageName end if newDir = s_bookDir & sessionArray[num] sysSuspend = false clear sysError get setCurrentDirectory32(newDir) if sysError <> null or it <> 1 clear sysError get createDirectory32(newDir) if sysError <> null or it <> 1 request "Error in creating directory:" && (name of pageID) && "Error = " && sysError else increment numDirs end if end if end step sysSuspend = true
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.
This page was created by Platte Canyon Multimedia Software Corporation.
|n||..||Copyright © 2000 Platte Canyon Multimedia Software Corporation|