... ..

The EnterPage

The Source for ToolBook and VBTrain.Net News
August 20, 2002
Issue 5-04

... From Platte Canyon Multimedia Software Corporation.

In This Issue

Introduction
TBCON 2002 CD Ready for Order
TBCON 2002 Report
ToolBook & VBTrain.Net Training Classes Coming Up Soon
OnLine Learning 2002 Preview
Click2learn ToolBook Design Award Winners
VBTrain.Net Product Releases
Platte Canyon Products in the Pipeline
Plug-In Pro Tool Spotlight: Delete Pages and Resources
CBT Creation Tip from Chris Bell: Perfect Edges with PhotoShop
Expert Information from "Learning & Mastering..." Series
OpenScript Tip from Jeff Rhodes
Actions Editor Tip by Cindy Kessler
VBTrain.Net Tidbit from Jeff Rhodes
Coming in the Next Issue
Information on Subscriptions and Article Submissions

Introduction

It's nice to be settled in here at Platte Canyon. Coming off TBCON 2002, some of us took a bit of vacation to rest up. Now we're back -- refreshed and excited about all the big things happening around here! This issue highlights many of these exciting things including the TBCON 2002 CD, new product releases, and an upcoming conference workshop.

As always, this issue also offers tips for developers. We hope that these are helpful. We're especially excited about Cindy Kessler's Actions Editor tip in this issue. She gives an example of Custom Action Methods, an unofficial part of Instructor 8.5. Cindy took what she learned at TBCON from Tim Barham and Denny Dedmore and created a sample application using Actions. See her Actions Editor Tip for a step-by-step approach and for a link to the sample file.

Back to Top

TBCON 2002 CD Ready for Order

Wow! The Official CD of the 2002 ToolBook & VBTrain.Net User’s Conference is a doozy! Crammed full with sample applications, supporting documents, conference highlights and much more, using this CD is the next best thing to actually being at the conference.

In addition to the sample applications and supporting documents from conference sessions, the CD also includes all of the entries into the Hack Ack contest. The theme this year was "Make something fun," and the participants did just that! The CD also features tons of photos and videos from the conference, some bonus material provided by presenters, and even a feature that will let you quickly identify someone in the group photo.

More details on the 2002 CD are available at:
http://www.tbcon.com/cd/cd2002.htm

To order the CD from our new online store, go to:
https://outlaw.securewebs.com/plattecanyon/store/ProductDetails.aspx?ProductID=421

Also, you can see details on Conference CDs from previous years at:
http://www.tbcon.com/cd

Pricing:
2002 TBCON CD: $50
2001 TBCON CD: $35
2000 TBCON CD: $20
1999 TBCON CD: $15

Or buy more than one CD and take advantage of these special offers:
Conference CD Bundle (2002, 2001, 2000, and 1999): $95
The TB 8 Bundle (2002 and 2001): $75

You can order any of the above CD’s and bundles by going to:
https://outlaw.securewebs.com/plattecanyon/store/default.aspx and selecting “TBCON.”

Back to Top

TBCON 2002 Report

What a wonderful few days we had together at the end of June! The ToolBook & VBTrain.Net User’s Conference was a treat again this year. Developers gathered at the now familiar Colorado College campus in Colorado Springs to learn lots, swap stories, and unite with friends old and new.

Monday evening’s social was another success, and Tuesday evening’s Hack Ack competition was especially popular. Mauro Rech took first prize again -- this year with John Hall helping out. Don Bowyer’s fun web-enabled Connection’s game took second, while Simon Price and Chet Kenisell finished third. The judging was especially difficult this year, with the whole pack finishing tightly together. Other Hack Ack participants were Ron Wincek, Virginia Bender, Bill Armstrong, and Peter Jackson all of whom created and presented some wonderful applications. All six Hack Ack entries plus "exhibition only" entries from Denny Dedmore and Michael Brophy are distributed on the conference CD. Interspersed with the Hack Ack presentations, everyone witnessed some outstanding and memorable Karaoke performances as well! Karaoke stars included Connie Koskinen, Tim Barham, Tomas Lund, Ellen Blackmun, Denny Dedmore, Chet Kenisell, Robin McDermott, and others.

While the evenings were fun, the crux of the conference happened while the sun was up. There were more technical sessions this year than in any previous year, and the topics were phenomenal. It was a real treat to have so many powerful developers all presenting on their expertise at the conference. The addition of the VBTrain.Net track gave experienced ToolBook users something new to sink their teeth into, while an expanded beginner track appealed to first-time attendees. Of course, the advanced topics sufficiently awed even the most jaded developer. At the end of the conference, there were many heads full of brand new ideas just waiting to get back home to execute.

Plans are already underway for TBCON 2003 July 28 - 30 (preconference training July 26 and 27). We hope you will be able to join us!

Back to Top

ToolBook & VBTrain.Net Training Classes Coming Up Soon

Platte Canyon's popular classroom training series is in full swing for this fall semester with the following dates:

ToolBook Instructor for Internet Deployment
September 16-20, Phoenix

Learning & Mastering ToolBook Instructor: The Class
September 16-21, Phoenix

VBTrain.Net™: Creating Computer and Web Based Training with Visual Basic® .NET
October 14-18, Colorado Springs

ToolBook Instructor for Internet Deployment
November, 25-29, Phoenixv

Learning & Mastering ToolBook Instructor: The Class
November 25-30, Phoenix

VBTrain.Net™: Creating Computer and Web Based Training with Visual Basic® .NET
December 9-13, Colorado Springs

More information including a full schedule is available at:
http://www.learningandmastering.com

Back to Top

OnLine Learning 2002 Preview

Jeff Rhodes and Chris Bell will be at the OnLine Learning conference again this year. We're looking forward to sifting through the hype on the expo floor and attending some sessions. We'll also be presenting a full day Postconference workshop called "Tools and Techniques for Online Learning." More information on this conference is available at:
http://www.vnulearning.com/about-oll.htm

Back to Top

Click2learn ToolBook Design Award Winners

Congratulations to Teach Concepts AG and Guido Walter for winning the Click2learn ToolBook Design Award in the category of "Most Creative Use of ToolBook." Their beautiful application, "Tutorial db-direct MC 3.0," was selected for its thorough realization of training needs.

Congratulations also to QLogic Corporation and Duane Engle for winning the "Best ToolBook Online Training" category. Due to a logistics mix-up with conference staff, this entry was not reviewed at TBCON but the award was made after the conference.

Thank you to Click2learn for sponsoring this contest and Scott Anderson of Click2learn for organizing the judging!

Back to Top

VBTrain.Net Product Releases

Our first set of .NET products focuses on adding functionality for “Windows Forms” applications. The VBTrain Shape™ and Graphical Text™ controls are targeted at all flavors of .NET developers. The associated Training Shape™ and Training Text™ controls are designed to provide extra functionality of interest to training developers. Here’s a short blurb about each:

The Shape control ($145) gives you the ability to easily create the shapes you want. Want a circle on your training screen? Drag the Shape from the Toolbox. Change its dimensions by resizing its bounding rectangle. Use the Properties window or your code to set its shape type, fill and border effects (linear gradient, path gradient, texture, etc.), colors, "smoothing," and more. Create ellipses, rectangles, lines, arrows, triangles, and other polygons. Change shapes instantaneously.

The Training Shape control ($245) gives you all the functionality of our Shape control plus the ability to set the "selection event" (Click, MouseEnter, etc.), the cursor, and the border/fill color for "completed," "currently selected," and "reset" situations. Each time a Training Shape is selected, it raises an event that you may handle in your code. You can determine the number of Training Shapes on a form via a shared property. You can even specify a method to call when all the Shapes have been selected. The Training Shape control is a training developer's dream.

Gain full power over your text with the Graphical Text control ($145). Rotate it; apply gradients and other fills to it; stretch it vertically or horizontally; even allow word wrap on your graphical text. And your text can be completely cut out (providing full transparency to the background and other objects behind it).

The Training Text control ($245) gives you all the functionality of our Graphical Text control plus the ability to set the "selection event" (Click, MouseEnter, etc.), the cursor, the effect (gradients and brushes), and the border/fill color for "completed," "currently selected," and "reset" situations. Each time a Training Text is selected, it raises an event that you may handle in your code. You can determine the number of Training Text objects on a form via a shared property. You can even specify a method to call when all the Training Text objects have been selected. The Training Text control will greatly expand the envelope of your training.

You can learn more at:
http://www.vbtrain.net/productdisplay.aspx?id=1

Back to Top

Platte Canyon Products in the Pipeline

While we wait with baited breath for a ToolBook 9 alpha copy (we don’t have a date for this in case you are wondering), we are concentrating our new product development efforts on the VBTrain.Net side of the house. First out of the chute will be the LmsApi object. This object will allow ASP.NET training content to communicate with a Learning Management System (LMS) via the Sharable Content Object Repository Model (SCORM) Run-time specification. You, as a developer, tell the LmsApi object what SCORM method you want to call (such as LMSSetValue) and the object generates the appropriate JavaScript for you. Look for this object in September 2002.

Also coming in the next couple of months are ASP.NET versions of the Shape™ and Graphical Text™ controls mentioned in the previous section. These controls will automatically generate the appropriate shape or text graphic, store it on the web server, and embed it in the page. All this from server-side code executed before the web page is generated!

Back to Top

Plug-In Pro Tool Spotlight: Delete Pages and Resources

When is the last time you started from a totally blank ToolBook book? It has been a long time for us. Instead of starting from a blank book and needing to add code and pages and graphics that we use all the time, we often start with a book from a similar project. This is a great time-saver. But there's a catch!

When you delete a page, the associated resources used on that page are not deleted. So, if you're not careful, you could end up with a 4 page shell that is as large as the 200 page book you started from. Now you need to go in to the resource manager and delete each bitmap resource manually. You'll need to do the same with cursors, icons, and shared scripts. (Of course, Resources Plus from Platte Canyon could help with this, but that's another story!)

Wouldn't it be nice if you could say, "delete pages 5 – 55 and delete all the resources used on those pages as well!" Well, as you might guess, you can! Plug-In Pro's Delete Pages and Resources tool does just that.

You specify the range of pages you want to delete and then highlight the types of resources you want deleted with the pages. Any resources used exclusively on those pages are removed from the resource manager. Your 4-page shell is now teeny and ready for you to move forward with your new project!

More information on Plug-In Pro is available at:
http//www.plattecanyon.com/pluginpro.aspx

Prices:
$495 Plug-In Pro version 6
$165 Plug-In Pro upgrade from Plug-In Pro 5
$330 Plug-In Pro upgrade from Version 4 and older

To order, to go: https://outlaw.securewebs.com/plattecanyon/store/ProductDetails.aspx?ProductID=398

Back to Top

CBT Creation Tip from Chris Bell: Perfect Edges with PhotoShop

In some of my presentations at TBCON 2002, I showed a technique to get perfectly smooth edges in Photoshop that can be used with ToolBook's Chromakey settings. Dr. Marcelle Bessman asked, "Are these steps going to be available on the conference CD?" I said, "No," and I've regretted that answer ever since. I went right to work and created a quick step-by-step sheet and included it with the conference CD!

I thought it might be useful for others to hear of this approach to get the best of antialiasing (smooth edges) and chromakeyed graphics (transparent portions). Here they are:

  1. Draw the shape on a different layer than the background. You want your shape to have antialiasing turned on so it looks nice and smooth on your background.
  2. Once the shape is the way you like it, you want to create a selection that includes all of the shape and all of its invisible pixels. DO NOT just Control-Click on your shape’s layer, because this will select the semi-transparent pixels “semi-transparently.” So if you have a pixel on an edge that is 50% your foreground image and 50% your background, it will only select 50% of that pixel.

    Do this. Select the magic wand tool and make sure it is set to 0 tolerance and that Anti-aliased is unchecked.

    With your foreground image as the active layer, click outside of your graphic. This will select everything that is NOT your graphic.

    Now reverse the selection (Ctrl-Shift-I) and you have every pixel of your object selected, including all the semi transparent ones that are showing part of the background through them.
  3. Now you need to save this selection somehow. I suggest saving it in the channels palette.
  4. Deselect now (Ctrl-D) and flatten your image (make sure you have a back-up first). I actually use a Fake-Flatten action so I can maintain the flattened image as one layer but still have the other layers intact. I have included a Fake Flatten action in the Platte Canyon actions with this CD.
  5. Now that the image is flattened, you want to use your selection from before to select your graphic including any parts of the background that you need to achieve the antialiased look. Just load your saved selection (control-click your saved channel).
  6. Copy this selection to a new document. Put it on its own layer.
  7. Make the background layer of the document a color that can easily be chromakeyed out in ToolBook (such as our bright pink which has an RGB value of 255, 0, 255).
  8. Flatten the layers and save it out as a BMP.
You’re all set! This is the perfect graphic, antialiased to your background so its edges are smooth, but with the benefits of transparency so you can put two or more images atop one another and they’ll still look good.

Back to Top

Expert Information from the "Learning & Mastering ToolBook..." Series

URL Hyperlinks from a LAN Deployment

Deploying a CBT with URL hyperlinks on a local area network (LAN) can cause an expected problem when users have different browsers or installation locations. The reason is that when a user clicks on a URL hyperlink, ToolBook goes through various steps to identify and launch the default browser. To avoid having to repeat this step with the next hyperlink, it tries to create a file in the ToolBook runtime directory called tb80r.ini/tb85r.ini and store this information in it as shown below:

[Web Browsers]
exe1=e:\miscel~1\netscape\COMMUN~1\Program\Netscape.exe,Netscape,,Netscape 4.08
exe2=H:\MISCEL~1\INTERN~1\iexplore.exe,iexplore,Internet Explorer_Frame,Microsoft® Internet Explorer \

[Internet Apps]
http=H:\MISCEL~1\INTERN~1\iexplore.exe,iexplore,Internet Explorer_Frame,Microsoft® Internet Explorer 

 

So if the URL is an http address, ToolBook first looks in the file for the "http=" line. If this entry is there, ToolBook uses it (Internet Explorer in the file above) and won't continue the search. The problem on a LAN is that ToolBook will read the same file for the next user. If she doesn't have Internet Explorer or it is not in the same location, none of her URL hyperlinks will work.

What is the solution?

What is the solution?The best bet for this is to make the runtime directory read-only. That way, ToolBook won't be able to create the file in the first place.

An Aside: This issue is the same reason ToolBook's built-in bookmarking is inadequate on a LAN environment (unless you are storing the runtime on the local machine). Since the bookmark files are common to all users, the next user returns to where the PREVIOUS user left off.

Back to Top

OpenScript Tip from Jeff Rhodes

We use the "centerViewer" handler below in our Learning & Mastering ToolBook... training series to display viewers in a specific spot relative to the screen regardless of the screen resolution (e.g., 1024x768 or 800x600). Using the default position property of viewers, you would be unable to have the viewer show up in the correct spot at all resolutions.

Notice that the conversion function varies depending on whether the viewer is maximized: pageUnitsToFrame() versus pageUnitsToScreen() .

This handler also demonstrates a technique for putting the identifier for an object into a variable (viewerID1 and viewerID2).

to handle centerViewer string viewerName,
	string viewerToName, string isModal
	local object viewerID1, viewerID2
	local page pageID
	local background backgroundID
	local book bookID
	local point rectanglePos, pos

	viewerID1 = viewer viewerName of this book
	if viewerToName <> null
		viewerID2 = viewer viewerToName of this
			book
	else
		viewerID2 = mainWindow
	end if
	if isOpen of viewerID2 <> "true"
		if showErrors of this book = "true"
			request viewerID2 && "must be open."
		end if
		break centerViewer
	end if
	in viewerID2
		rectanglePos = position of rectangle
			viewerName of this background
	end in
	if state of viewerID2 = "maximized"
		pos = pageUnitsToFrame (rectanglePos,
			viewerID2)
	else
		pos = pageUnitsToScreen (rectanglePos,
			viewerID2)
	end if
	if isModal <> null
		show viewerID1 as modal at pos
	else
		show viewerID1 at pos
	end if
end centerViewer

Back to Top

Actions Editor Tip by Cindy Kessler

Custom Action Methods – Creating a Bank

Note: Custom Action methods, and arrays as array elements, are not officially supported by Click2Learn.

Acknowledgements: Thanks to Tim Barham and Denny Dedmore of Click2Learn for presenting these concepts at the 2002 ToolBook and VBTrain.Net User’s Conference.

Sample File: The sample file that Cindy built for this article is available for download at:
http://www.plattecanyon.com/ep/customActionMethods.zip

A great new (unsupported) feature of Instructor 8.5 is the ability to create Action methods. This means you can create a sequence of actions on an object and then call the sequence from another object. Although the User Event action provides similar functionality, there is only one User Event per object and it only accepts a single parameter. You can have multiple custom methods and define multiple parameters per method.

For this example, suppose you have an application that needs a Bank object that can open new accounts, accept deposits, make transfers, etc.

First create a button and name it "Bank." Now we’ll create a Bank method called "createAccount." In the command window, we type:

send ASYM_EA_editActionMethod button "bank", "createNewAccount"

This will open the Actions Editor to the method "createNewAccount" of our "Bank" button.

To create parameters we use the Action menu – Define Parameters and Variables item. We add three parameters: firstName, lastName, and initialDeposit. We add a global array variable called accounts, and a global simple variable called numberOfAccounts with an initial value of 0. Also add a local array variable called newAccount.

Now add the following action sequence to the "createNewAccount" method:

Set numberOfAccounts to numberOfAccounts + 1
Set newAccount["lastName"] to lastName
Set newAccount["firstName"] to firstName
Set newAccount["balance"] to initialDeposit
Set accounts[numberOfAccounts] to newAccount
Display alert: "Account opened for " & accounts[numberOfAccounts]["lastName"] & ". \
Balance is: $" & accounts[numberOfAccounts]["balance"]
Set returnValue to numberOfAccounts

Note that the accounts[numberOfAccounts] element is itself an array, so it’s an array element that contains an array. We can reference values of this element using double-indexing as shown (e.g., accounts[numberOfAccounts]["lastName"]). Be warned that I have had problems with this technique (e.g., if you remove the "alert" action this sequence will error), but the code as shown works fine.

Note also that we set the method’s returnValue to numberOfAccounts. We will use this as our account number.

Let’s add one more method, "makeDeposit." In the command window type:

send ASYM_EA_editActionMethod button "bank", "makeDeposit"

We add two parameters: accountNumber and amount, and then create the following action sequence:

Set accounts[accountNumber]["balance"] to accounts[accountNumber]["balance"] + amount
Display alert: "New balance is: " & accounts[accountNumber]["balance"]

We now have a Bank object with two methods: createNewAccount and makeDeposit. How do we call these methods?

Create a new button named "openAccount" with caption "Open Account." Open the Actions Editor to the "On click" event for this button. Create a global variable called myAccountNumber. Now we’ll create an action to call the createNewAccount method and store the return value in myAccountNumber.

Use the Insert menu – Action – Object – Execute Method item. This will open the "Properties for ‘Execute Method’ Action" dialog. Select the button "Bank" as the object, and the "createNewAccount" method. You are prompted to enter parameter values. Let’s make a new account for "Richie Gold" with an initial deposit of 500; set the returnValue to go to myAccountNumber. Your action should look like:

myAccountNumber = createNewAccount() of Button "bank"

Save and exit the editor.

Similarly, to call our makeDeposit method we create another button called "lottoDeposit" with caption "Hit the Lotto: Deposit $100,000!" Create an "On click" action sequence for the button using the Insert menu – Action – Object – Execute Method item, selecting the "Bank" object and the "makeDeposit" method, and entering myAccountNumber as the accountNumber and 100000 for the amount. Save and close the editor.

That’s it! You can now create an account and hit the lotto to see how everything works. Note that we did not include any error checking whatsoever so this is a flimsy application, but it demonstrates the idea.

Thanks for the new functionality Tim!

Back to Top

VBTrain.Net Tidbit from Jeff Rhodes

Handling Markers with the Windows Media Player

As many of you know, you can embed “markers” in your sound and video files and then detect these markers when playing the media in the Windows Media™ Player. How do you accomplish this in a .NET application?

If you are doing a native Windows application (Windows Forms), you can put code such as the following on your form. Your “play” button would then call the playMediaFile handler shown:

Private Sub playMediaFile(ByVal mediaFileName As String)
	With MediaPlayer
		.Stop()
		.FileName = String.Concat(c_videoPath, "\", mediaFileName)
		.Play()
		If .MarkerCount > 0 Then
			markerPanel.Enabled = True
			numMarkers.Text = .MarkerCount.ToString
			markerCommentary.Text = "Awaiting first marker"
		Else
			markerPanel.Enabled = False
			numMarkers.Text = "0"
			markerCommentary.Text = "No markers in this file."
		End If
	End With
End Sub

Those of you most familiar with OpenScript syntax might find the notation confusing at first. The “With” keyword allows you to avoid referencing an object over an over. So the .Play() line is equivalent to this OpenScript: get extPlay() of MediaPlayer.

If you are doing a web (ASP.NET) application, you must currently control the Windows Media Player with JavaScript. So the equivalent code looks like this:

function updateFileNameAndMarkers(fileNamePath)
{
	mediaPlayerID.FileName = fileNamePath;
	if (mediaPlayerID.MarkerCount > 0)
		{
			markerCountID.value = mediaPlayerID.MarkerCount;
			markerNameID.value = "Awaiting first marker.";
			markerTimeID.value = "0";
		}
	else
		{
			markerCountID.value = "0";
			markerNameID.value = "N/A";
			markerTimeID.value = "N/A";
		}
}

In this case, I’ve passed the complete URL for the media file to the updateFileNameAndMarkers function.

Back to Top

Coming in the Next Issue of the EnterPage

  • OnLine Learning 2002 Report
  • 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
  • More VBTrain.Net Tidbits from Jeff Rhodes
  • ToolBook Tip (from the "Learning and Mastering ToolBook..." Series)
  • More

Back to Top

Information on Subscriptions and Article Submissions

The EnterPage is distributed four 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, please 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.

All content Copyright Platte Canyon Multimedia Software Corporation, 2002.