The ToolBook Developer's Newsletter
Canyon Multimedia Software Corporation.
by Chris Bell
Yippee! Every CBT and WBT developer knows the rush of pride and accomplishment that comes with the final release of a completed project. We're enjoying that feeling right now from having just sent our latest effort, "Learning & Mastering ToolBook Instructor 8," to the CD manufacturer. The product will be available on April 9. We can't wait for everyone to see it!
We're also excited to announce that this issue begins the fourth year of The EnterPage. For the past three years, we have brought ToolBook news, tips and tricks to the ToolBook community. A browse through the back issues at http://www.plattecanyon.com/enterpage.aspx is a trip through ToolBook's recent history. The EnterPage announced Asymetrix's upcoming IPO, commented on the name change from Asymetrix to Click2learn, saw the introduction of the Actions Editor, and announced the first annual ToolBook User's Conference. We gave "sneak-peaks" at soon-to-be-released products such as Instructor 6.1, 7, and 8. We also announced many of the exciting new products from Platte Canyon. TBK Tracker, Answer Key, and Resources Plus were all first announced in the EnterPage. As we look to Volume 4 and beyond, we plan to continue offering ToolBook news and developer tips aimed at "Improving the Lives of Training Developers."
We've just sent "Learning & Mastering ToolBook Instructor 8" to the manufacturer. It should be ready for shipping on April 9, 2001. Our beta testers tell us that this is the best version yet. We've added information and examples on how to use HTTP Post (both with the Actions Editor and via OpenScript), FTP, incorporate and communicate with Flash™ movies, automate Office applications, print from DHTML, and more. We've also greatly expanded our Actions Editor training as well as added significant new content on OpenScript, Media, DHTML, and ActiveX. All this comes in addition to full updated content on all aspects of Instructor. The new CBT weighs in at over 26 hours with 64 "Show Me" demonstrations, 61 "Let Me Try" simulations, 109 "OpenScript Tips," and 204 "Expert Information" topics. See more information and the complete training outline at www.plattecanyon.com/tbcbt/icbt8.
Pricing for this new version remains $695. You may upgrade from the 7.1 training for $235 and from the 6.5 training for $435. We've also dropped the prices on the earlier versions. The 7.1 training is now $495 with the 6.5 training dropping to $295.
Upgrade to Instructor 8.0 with Platte Canyon for only $595 through March 31, 2001. Normal price is $695 - $895 depending on your current version. Due to our reseller agreement with Click2learn, however, we can only accept orders from the U.S. and Canada.
To order your upgrade today, go to:
Our other product development has had to take a back seat to the new Learning & Mastering release, but look for lots of activity in the next couple of months. The new Learning & Mastering ToolBook Instructor 8 is the first product to use Progress Tracker™ 2.0 and Hotword Connection™ 1.0. Look for both of these to be released to the developer community within the month. We discussed the new Progress Tracker in detail in the last EnterPage issue. Be sure to check out the Progress Tracker Reporter™ that comes on the Learning & Mastering CD.
Hotword Connection provides glossary and hotword functionality. All hotword names/text as well as definitions (in plain and/or rich text format) are stored in an Access database. If you want the ability to update the definitions at runtime or switch to a different database based on language, then you may read from the database at runtime. If not, you can store all the information in ToolBook and avoid distributing the database at all (this is what we do in the Learning & Mastering product). Hotword Connection displays popup definitions and an easy-to-use glossary. It includes lots of tools to make sure that any "non-hyperlinked" hotwords are included in the database. Hotword Connection will sell for $595.
After these two products are released, we'll focus on Content Connection™, Media Connection™, Plug-In Pro™ 6.0, Learning & Mastering ToolBook Assistant 8™, and TB Start™ 2.0.
We're pleased to announce that Platte Canyon is the worldwide exclusive distributor of Peter Jackson's new Taquin question object. This unique question type provides a combination of Multiple Choice, Ordered List, and Match Item type questions. As users sequentially select the correct answer, it moves to the appropriate location and all subsequent answers move to make room for the next correct answer. Best of all, it works in both native ToolBook and when published to DHTML. Taquin is available for $150.
We are getting into high gear preparing for the ToolBook User's Conference. This year, the event will be held in two locations:
The conference program is heating up. Here are the confirmed presentations at this point.
Preconference offerings this year will come in 4-hour blocks offered over two days. The sessions include:
For more information on the conference and to register, please browse to http://www.tbcon.com.
This column features one of the many tools available in Plug-In Pro. In this issue, we'll discuss the incredibly useful tool called "View a Page." This tool allows you to access a ToolBook page in a handy pop-up viewer. You may view a page of the current book, or you may choose to view one from any other ToolBook book on your computer.
Of course, while there may be benefit in just looking at a page from another location or another book, the real power comes from being able to copy objects from the viewed page. You can also see object properties, use the command window, and even view object and page scripts.
This handy tool was extremely helpful as we were developing the latest Learning & Mastering ... CD. For instance, we used a separate small book for testing our HTTP Post implementation. When we had the functionality just right in the test book, we used "View a Page" to copy in the buttons and their scripts to the main TBK file.
We also used it when trying to find a page in the current file to copy from. We could View a Page and then use the standard ToolBook author-level navigation buttons that are displayed in the viewer. Once we found the perfect page to copy from, copying some parts of a page was as simple as selecting and copying the objects we wanted.
Like all of the tools in Plug-In Pro, the View a Page tool was designed by developers for developers. We identified a need in our own development for this extremely helpful tool and then made it available to other developers through the Plug-In Pro.
For more information on Plug-In Pro, please browse to:
To see detailed on-line help with graphics on View a Page, please
For our latest project, "Learning & Mastering ToolBook Instructor 8," we decided to abandon the 256 color limitation we had imposed on ourselves previously. From a graphics point of view, this decision was a dream-come-true. No more were we obligated to force all of our graphics to use the same palette! This means better-looking graphics in everywhere in the book. I was very excited about this because not only were the graphics going to look better, but I was going to be able to create some PhotoShop actions to do all the dirty work of converting the graphics. (Actions are created using Photoshop's new macro recording capabilities).
To save file size, we still reduced each graphic to 256 colors. However, we could let PhotoShop select the 256 colors best suited for that particular graphic (using the optimized palette option). So a picture of a sunset would have a palette of 256 variations of yellow, orange, black, maybe purple, while a picture of a swimming pool would have a palette of 256 variations of blues and greens.
Since there were also a lot of screen captures that never originated in PhotoShop, we realized that it would be wise to run a batch process on all graphics in the book, making sure to get every graphic. Using Plug-In Pro's bitmap resource export utility, we placed all the graphics from the book into one directory. We then ran our saved PhotoShop Action to change each image into a 256 color image with an optimized palette.
After doing this, I got a big surprise: The total file size in the directory (and therefore in the book) was now larger than before I started!
After snooping around, we realized that many of the screen captures we used in the training were originally saved as 4-bit (16-color) images. When my nifty PhotoShop batch changed them to 8-bit (256 colors), I actually doubled their file size without one bit of additional quality. Instead, I worried that I should have left the images alone! Luckily I saved a back up.
Here is where it gets interesting. I created another simple PhotoShop Action to save an image in 4-bit color mode. When running this action via the Batch mode on the entire directory of newly exported ToolBook graphics, it turns out that if an image is in 4-bit mode, it will be saved that way, preserving file size. If an image is 8-bit or higher, Photoshop automatically saves it as an 8-bit image with an optimized palette! This was a perfect solution for our needs.
We then just imported the graphics using Plug-In Pro and we were back in business, with a smaller book than ever. So, it is important to note that when creating a PhotoShop Action to convert files, you may very well want to create one to save your images at 4-bit, exact palette.
from Jeff Rhodes
Initializing and Running ActiveX Controls
Making an ActiveX control run involves referencing it, initializing it, and then, if necessary, calling one of its methods. As a first example, the handler below uses the Windows Media Player (the object reference to it is already stored in the screenMoviePlayerID) to show a "screen movie" in a viewer. Notice how the code builds the file name of the video file based on a property of the calling page. It then sets the extFileName property to that path before opening the viewer containing the player. We don't need to explicitly call the extPlay() method since the control has been configured to automatically play.
to handle DCC_showScreenMovie page pageID system object screenMovieViewerID, screenMoviePlayerID system string s_bookPath system logical s_usingVideo local string fileName if s_usingVideo = TRUE fileName = screenMovieFileName of pageID if fileName <> null fileName = s_bookPath & fileName if isOpen of screenMovieViewerID = FALSE open screenMovieViewerID extFileName of screenMoviePlayerID = fileName show screenMovieViewerID end if end if end if end DCC_showScreenMovie
Another, more sophisticated, example is shown below. This code from the "Flash ActiveX Example" loads the proper Flash movie (there is one per background type) by setting the extMovie property. It then calls the extSetVariable() method to set the variable indicating which buttons are enabled, the animation level, and the sound. It then calls another method [extTCallLabel()] to tell the player to configure itself based on the variable.
to handle updateInterface system word s_FlashButtonSettings system string s_bookPath local object l_FlashNavButtonsID, l_FlashUIButtonsID local string l_navButtonMoviePath, l_uiButtonMoviePath l_FlashNavButtonsID = ShockwaveFlash "navButtons" of self l_navButtonMoviePath = s_bookPath & "flash\nav" & (name of backdrop of parent of self) & ".swf" extMovie of l_FlashNavButtonsID = l_navButtonMoviePath get extSetVariable("tbButtonState", s_FlashButtonSettings) of l_FlashNavButtonsID -- determines enabled, animation level, etc. get extTCallLabel("/", "setButtonState") of l_FlashNavButtonsID -- the above sets up the player if checked of button "nextPageButtonAnimating" of self = TRUE get extTCallLabel("/", "nextAnimated") of l_FlashNavButtonsID end if l_FlashUIButtonsID = ShockwaveFlash "uiButtons" of self if visible of group "uiButtons" of self = TRUE show l_FlashUIButtonsID bounds of l_FlashUIButtonsID = resetShockwaveUIBounds of self l_uiButtonMoviePath = s_bookPath & "Flash\uibuttons.swf" extMovie of l_FlashUIButtonsID = l_uiButtonMoviePath get extSetVariable("tbButtonState", s_FlashButtonSettings) of l_FlashUIButtonsID -- determines enabled, animation level, etc. get extTCallLabel("/", "setButtonState") of l_FlashUIButtonsID else hide l_FlashUIButtonsID bounds of l_FlashUIButtonsID = hideShockwaveUIBounds of self end if end updateInterface
Trying to get a ToolBook book ready for delivery is a pretty taxing endeavor, particularly if it is going to a CD manufacturing plant! Here are a couple command window scripts that I found useful in checking over the new Learning & Mastering book before delivery. The first searches all the pages of the current background for fields that are not activated (e.g., they allow you type into them). Once in a while, we want this. But most of the time this is an error that we want to fix. Notice the technique of holding the page number OF THE BACKGROUND in a system variable. This is because it is difficult to come up with this number otherwise. The "put" line makes it easy to fix the problem. I can just press Enter in the Command Window to execute the line -- if I'm sure that the non-activation is an error:
system word curNum step num from curNum + 1 to pageCount of this background pageID = page num of this background fieldList = getObjectList(pageID, "field", false) while fieldList <> null pop fieldList if activated of it = false go to pageID curNum = num put "activated of" && it && "= TRUE -- name = " & name of it break step end if end while end step
I used this second script to find a hotword that Hotword Connection had told me didn’t have a corresponding definition. It goes through all pages of the current background looking for hotwords whose name contains “SCORM.” This is a big timesaver.
step num from 1 to pageCount of this background pageID = page num of this background hotList = getObjectList(pageID, "hotword", FALSE) while hotList <> null pop hotList hotText = name of it if name of it contains "SCORM" go to pageID put "Found it in " & parent of it break step end if end while end step
An Example Using "On key down..."
There are three new Actions Editor events in Instructor 8 that let you handle keyboard messages:
In our new "Learning And Mastering Instructor 8," we have an example which uses "On key down..." It lets the user move a graphic around within a defined area by pressing the arrow keys on their keyboard. While the idea and implementation are relatively simple, there have been enough "key event" questions to the list that we thought it worth describing the implementation.
First, as always, when you plan to use a value repeatedly, it's a good idea to put it in a variable. This makes modification MUCH easier. In our example, we put the limiting values (the coordinates of the rectangular area in which the graphic must stay) in their own variables. We also have a global variable (gIncSize) that holds the user-determined increment size (how "far" the graphic will move with each key press).
Since the "key down" action passes in the keyCode of the key pressed, we can easily test and control the graphic's movement. Note: You can find keyCode values in the "Key constants (table)" topic of ToolBook's On-Line Help, or just put a "Display Alert" action at the top in the Key Down action sequence and have it display the keyCode; then press the key for which you want the keyCode.
A portion of our example action sequence is shown below. This key down event is handled at the page level.
-- On key down... ----------------------------------------------------- Define local variable "leftMost" (Initial value: "") Define local variable "rightMost" (Initial value: "") Define local variable "topMost" (Initial value: "") Define local variable "bottomMost" (Initial value: "") Set leftMost to 300 Set rightMost to 7122 Set topMost to 1495 Set bottomMost to 4000 If keyCode = 37 or keyCode = 100 If left of PaintObject "HDB" > leftMost + gIncSize Set left of paintObject "HDB" to left of PaintObject "HDB" - gIncSize Else Display alert: "Herman can't go further left." End if Else if keyCode = 38 or keyCode = 104 Comment: up If top of PaintObject "HDB" > topMost + gIncSize Set top of paintObject "HDB" to top of PaintObject "HDB" - gIncSize <snip> Else if keyCode = 103 Comment: left and up If top of PaintObject "HDB" > topMost + gIncSize and left of PaintObject "HDB" > leftMost + gIncSize Set top of paintObject "HDB" to top of PaintObject "HDB" - gIncSize Set left of paintObject "HDB" to left of PaintObject "HDB" - gIncSize Else Display alert: "Herman can't go further upper left." End if <snip> End if Back to Top
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|