... ..

The EnterPage

The Source for ToolBook and VBTrain.Net News
April 16, 2003
Issue 6-02

... From Platte Canyon Multimedia Software Corporation.

In This Issue

Introduction

Top Stories
TBCON 2003 Just Around the Corner!
New Question Object Works with ASP.NET and Windows Forms
Section 508 Compliance Tool makes ToolBook's DHTML Cleaner
Web Player and Graphical Button Products Released
Shape and Graphical Text Now Include ASP.NET Versions
Books of Note
Instructor 8.6 Preview

ToolBook Tips and News
Plug-In Pro Tool Spotlight: Comments
Expert Information from the "Learning & Mastering ToolBook" Series
OpenScript Tip from Jeff Rhodes
Actions Editor Tip by Cindy Kessler
Resources for ToolBook Developers: Listserv and Web Ring
ToolBook Sessions at TBCON

VBTrain.Net Tips and News
VBTrain.Net Tidbit from Jeff Rhodes
VBTrain.Net Sessions at TBCON

More News and Information
Conference Reviews and Previews
Platte Canyon Products in the Pipeline
e-Learning Creation Tip from Chris Bell: Photoshop Actions
Coming in the Next Issue of The EnterPage
Information on Subscriptions and Article Submissions
 

   

Introduction

We have been creating VBTrain.Net products left and right the past few months here at Platte Canyon. We're quite proud of each of them and hope you'll take time to read the news pieces below and browse the vbtrain.net web site. I think that this set of products brings creating training with .NET within the reach of anyone who wants to give it a try.

It's also an exciting time for ToolBook. With a new patch/upgrade coming out of Bellevue any day now and plans for another release down the road, we can hardly wait to get together at TBCON and talk about ToolBook as well as VBTrain.Net. We're also thrilled to be selling a new tool called 508Link that improves ToolBook's exported DTHML for section 508 compliance.

This issue is packed with tips that we hope you'll just love. My favorite is Cindy Kessler's walk through of creating a Mastermind game in ToolBook using the Actions Editor. Hopefully, among all the articles here, you'll find one or two that you love too!
 

Back to Top

   

Top Stories

TBCON 2003 Just Around the Corner!

Can you believe that this will be the fifth incarnation of TBCON? We've got a dynamite program lined up for the 2003 edition of The ToolBook & VBTrain.Net User's Conference. We can't say it any better than Robin McDermott's recent posting to the ToolBook List:

"Personally, TBCON accelerates my knowledge and ability to efficiently use ToolBook by at least six months each year I have attended. I find it a very easy investment to cost-justify. And, on top of that, it is a lot of FUN!"

Add to that the opportunity to learn all about how to apply Microsoft's .NET technology to creating training, web sites, etc. and you have an unbeatable combination. Later in this newsletter we break down the ToolBook and VBTrain.Net sessions. Here are the sessions on design, standards, and related technologies that are important regardless of your authoring tool(s) of choice:

  • AICC and SCORM Demystified (Joe Martel)
  • Creating Your Own Sound Files (Don Bowyer)
  • Digital Audio -- The Nuts and Bolts (Don Bowyer)
  • Estimating Development and Pricing Products (Jeff Rhodes)
  • Installations Using the Wise For Windows Installer (Mike Cline)
  • Is That Your Final Answer? Developing and Validating Test Questions (Bill Hurley)
  • It Don't Mean a Thing If It Don't Go Ca-Ching! - Selling Your CBT (Bill Hurley)
  • JavaScript Primer (Peter Jackson)
  • Online Help with Component One Doc-To-Help (Mike Cline)
  • SCORM Conformance Testing -- Content and LMS's (Jeffrey Krinock)
  • Section 508 (Accessibility) - The Challenges and the Rewards (Joe Martel)
  • So You Want to Roll Your Own 'Simple' LMS? Part I: The Plan (Martha Weller)
  • So You Want to Roll Your Own 'Simple' LMS? Part II: The Implementation (Martha Weller)
  • The SCORM Run-time Environment--Hands-on Examples (Jeffrey Krinock)
  • User Interface Design for ToolBook and Visual Basic Using PhotoShop (Chris Bell)
  • What Part of 'Know' Don't You Understand?: Instructional Design 101 (Bill Hurley)
  • Why Wing It When You Can Plan It? (Tracey Kogelmann)

The conference will take place at Colorado College here in Colorado Springs from July 28 – 30, 2003. The conference includes all meals and, if desired, lodging on the campus. Attendees last year were very impressed with the new apartments. Here is the pricing if you sign up before June 1.

  • Off Campus ($670)
  • Loomis Double ($795)
  • Loomis Single ($830)
  • Apartment Quad ($850)
  • Apartment Triple ($870)
  • Apartment Double ($955)
  • Apartment Single ($1,030)

We have an awesome line-up of preconference training for Saturday, July 26 and Sunday, July 27:

Saturday Morning

  • A Visual Studio and Visual Basic .NET Primer (Rhodes)
  • Creating Interactions with the Actions Editor (Bell)
  • Exploring Objects in the ToolBook Catalog: Hands-on (Karns)

Saturday Afternoon

  • Creating CBT with VBTrain.Net (Rhodes)
  • Introduction to the Actions Editor: Hands-on (Karns)
  • Web Deployment with ToolBook (Bell)

Sunday Morning

  • Creating Software Simulations using the Simulation Editor - 1: Hands-on (Karns)
  • Creating WBT with VBTrain.Net (Rhodes)
  • Rapid and Robust Development Through Good Development Practices for Native and DHTML ToolBook Projects (McDermott)
  • User Interface Design with PhotoShop (Bell)

Sunday Afternoon

  • Advanced OpenScript, ActiveX, and Visual Basic (Cline)
  • Configuring and Customizing Tracker.Net (Rhodes)
  • Creating Software Simulations using the Simulation Editor - 2: Hands-on (Karns)
  • Hack Ack Boot Camp (Graphics, Multimedia, and Programming) (Rech)
  • Integrating Flash with ToolBook and VBTrain.Net (Bell)

Preconference pricing varies by the number of sessions you attend: 1 ($150), 2 ($285), 3 ($420), or 4 ($555).

Hope to see many of you there!
 

Back to Top

New Question Object Works with ASP.NET and Windows Forms

The new VBTrain.Net Question allows you to easily create multiple choice, true/false, or fill-in-the-blank question objects in either ASP.NET or Windows applications. Load content from a database, generate SCORM runtime information, provide multiple levels of feedback, and more!

Drag either the Windows or ASP.NET version onto your form, bring up its intuitive Designer, and quickly set up the question. Or load any or all of it from a database. The Question automatically configures itself to be either multiple choice (with either single correct answers or a combination of answers that need to be correct), true/false, or fill-in-the-blank. And each of these question types can be configured as buttons, check boxes, hyperlinks, or more. As you resize the Question, all of its objects resize with it! Both answer and question-level feedback is supported, with unique feedback possible with each try. Not only can answers be randomized, but they have four distinct states: reset, selected, correct, and incorrect. The developer can set unique graphics, fonts, colors, and Cascading Style Sheet (CSS) classes [web version only] for each state. Limit the time and/or tries if desired; the question locks itself once the limit is reached.

The $495 price includes both the Windows and ASP.NET version.

http://www.vbtrain.net/productdisplay.aspx?id=9

Back to Top

Section 508 Compliance Tool makes ToolBook's DHTML Cleaner

Here's the scoop: ToolBook does not do an optimal job when exporting DHTML content that needs to be Section 508 compliant. (Section 508 is a part of the Americans with Disabilities Act that deals with accessibility of software).

The best way to fix the problem is to go through the generated HTML pages by hand and perform all appropriate checks and corrections as you go. The problem with this approach is that it's incredibly time consuming and tedious.

508Link is a new tool that solves this problem. We are thrilled to sell this exciting product written by Jocelyn Martel and the folks at Sunset Learning. 508Link processes ToolBook's exported DHTML looking for 508 compliancy issues. Some issues are fixed automatically while other issues generate a prompt to the developer. The prompt will provide the developer with an area to enter the proper information.

More information and a link to order is available at:
http://www.plattecanyon.com/508Link.aspx

Price is $695, but we are offering it for $625 if you order by May 15, 2003.

Back to Top

Web Player and Graphical Button Products Released

The new VBTrain.Net Web Player™ ($145) allows you to dynamically embed a Windows Media® Player, Flash™ Player, RealPlayer®, or just plain text into your ASP.NET applications. Set the URL to the desired media from a database or allow the user to turn off the media and display "closed captions" instead. You can specify the exact player and version to be used or you can tell the Web Player to automatically adjust to the extension assigned to the MediaUrl property. So the exact same ASP.NET page can be WMP, Flash, RealPlayer, or even just text based on a single property. Store your media file names in a database with no problem. Allow the user to choose the media type or turn off media completely (and in that case show "close captions" instead). Control your media with server-side properties or code (VB, C#, etc.) rather than editing HTML tags and writing JavaScript.

http://www.vbtrain.net/productdisplay.aspx?id=10

Who wants old-style gray buttons or static links in their Windows or ASP.NET training applications? The new Graphical Button™ ($145) control allows developers to assign graphics to the various button states and then automatically swaps the graphics for dynamite "rollover" buttons. For ASP.NET, it allows you to set properties for the various button states and then automatically creates the associated JavaScript. The Graphical Button even preloads all your images. For Windows Forms, it has special objects and associated editors for each situation: images embedded within the application, resources that are built into the .exe but than can be overwritten at design time, or external graphic files in a wide variety of formats. In either case, all you do as a developer is define the images. Graphical Button does the rest.

http://www.vbtrain.net/productdisplay.aspx?id=8

Back to Top

Shape and Graphical Text Now Include ASP.NET Versions

The path-breaking Shape™ and Graphical Text™ objects ($145 each) now include corresponding ASP.NET objects. They will dynamically create image files on your web server or even stream the image directly to the browser! Both products now have awesome Designers as well. We've added intuitive Designers to both of these products as well as their Windows-only training versions: Training Shape™ and Training Text™.

Back to Top

Books of Note

Never been able to figure out how to use the Actions Timer, or Time Markers of the Universal Media Player? What about the assortment of Question Object types in the "Various" category? Denny's new book "ToolBook Catalog Objects - Fully Explained" will remove the mystery from all of the objects in the catalog, letting you know what they are really for. It offers detailed descriptions of the various settings and options for each object. Download a free peek at the book today.

http://www.toolbookhelp.com/books/CatalogObjects

Want to learn more about SCORM, AICC, ADL, and many other acronyms related to online learning. Then check out "E-Learning Standards: A Guide to Purchasing, Developing and Deploying Standards-Conformant E-Learning."

http://www.elearning-standards.com/book.htm

Back to Top

Instructor 8.6 Preview

Instructor 8.6 is scheduled to be released any day now. We've tested it out and it rocks. Note that this can easily be called a service pack rather than a true upgrade, but there are new things as well. Here is a list of the key new features:

  • Works well under Sun's Java Runtime or the Microsoft one
  • Works well with Windows Media Player 9
  • Can HTTP Post from one server to another
  • Works better with Jaws screen reader (but for a full fix, see the 508Link product mentioned in this newsletter)

We're very happy to see this new version. We’ve tested our ToolBook product line with the new release and all was smooth. We think you’ll find the same for your applications. Nice job Click2learn!

Back to Top

   

ToolBook Tips and News

Plug-In Pro Tool Spotlight: Comments

We have previously talked about Sticky Notes as a great way for developers to communicate information back and forth as they share a book. But what if they aren't sharing a book? Rather, one person always has the "master" version but others are reviewing it. What you need then is a nice way to make notes about a page. At one point, we used Notepad or Word for this task, but we would often neglect to write down the page name or number, making it difficult for the developer to match up the comment with a page. Even if comments had page numbers, there is no guarantee that the number will be the same by the time the developer is ready to make the correction.

"Comments" is an easy-to-use Plug-In Pro tool that reviewers can use to enter notes in a document. These notes automatically include page name, page number, and page id. The recipient of the notes can easily match up each comment with the page it is referring to. If the recipient is using ToolBook to look over the comments, he or she can even use the Plug-In Pro to launch the comments document in Word.

We have found that this streamlined utility makes a big difference for lots of developers.

See the online help for Comments at:


Learn more about Plug-In Pro at http://www.plattecanyon.com/pluginpro.aspx.

Back to Top

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

by Jeff Rhodes

When you are deploying natively with ToolBook and need to do a software simulation, you can use a menu bar resource to simulate the application's menu. This is what we do in our "Learning & Mastering ToolBook" series for the "Let Me Try" simulations. But how do you handle the messages that go with all those menu items? The standard way would be to have a separate handler for each message such as the ones shown below.

to handle cbtSave
	-- do something here
end cbtSave

to handle cbtPrint
	-- do something here
end cbtPrint

-- etc.
But this is not very efficient when you have a 50+ different menu items. In this case, it is much better to handle the menuItemSelected message.
to handle menuItemSelected string mMenuName,
	string mAlias
	local string bookPath, tarWinName

	-- anything that gets here is not part of
	-- the scenario
	tarWinName = name of targetWindow
	conditions
		when tarWinName = "letMeTry"
		when tarWinName = "cbtToolbar"
		when tarWinName = "cbtCatalog"
		when tarWinName = "cbtSystemDefaultProperties"
		when tarWinName = "cbtRightClickMenu"
		when tarWinName = "cbtScriptEditor"
		when tarWinName = "cbtBookProperties"
		when tarWinName = "cbtViewerProperties"
		when tarWinName = "cbtFieldProperties"
		when tarWinName = "cbtButtonProperties"
		when tarWinName = "cbtStageProperties"
		when tarWinName = "cbtDisplay"
		when tarWinName = "cbtSharedActions"
			conditions
				when mAlias = "cbtExit"
					close targetWindow
				when mAlias = "clear"
					forward
			else
				in viewer ID 0 of self
					send letMeTrySelection mMenuName, mAlias to this page
				end in
			end conditions
	else
		forward
	end conditions
end menuItemSelected
Since the menuItemSelected message is sent by ANY menu (including author level menus), we first check to see if one of our simulation windows is open. If so, we in general send a message to the main training page telling it what was selected. If this is the right answer, the page will handle it by showing a viewer, displaying the "Congratulations" box, displaying the next dialog in the sequence, giving more feedback, etc. If not, the message passes back up to the book script, where the default answer is that the choice is "not part of your task." Notice also the use of multiple "when" statements to make an OR statement. This is much easier to follow (and code in the first place) than using OR.

Back to Top

OpenScript Tip from Jeff Rhodes

We've been working on a custom ToolBook application that involves collecting information and generating electronic forms that can be both printed and uploaded to a web server. As part of this, Cindy created the following command window scripts. The first one is used after the special "forms" book has all the bitmaps of the forms imported as resources (using Plug-In Pro of course). Now we needed each form to have a corresponding background with the resource set as the backdrop. We send the newBackground message to system to avoid the "New Background" dialog box. You can skip this dialog from .ini settings as well, but we only wanted to disable for this one script.

-- create backgrounds with backdrops from resources
r = resourceList("bitmap", this book)
while r <> null
	pop r into rid
	rName = name of rid
	send newBackground to system
	pid = this page
	bid = this background
	name of pid = rName
	name of bid = rName
	backdrop of bid = rid
	backdropStyle of bid = "stretch"
	rInfo = resourceInfo of rid
	hSize = (item 1 of sysPageUnitsPerPixel) * (item 2 of rInfo - 1)
	vSize = (item 2 of sysPageUnitsPerPixel) * (item 3 of rInfo - 1)
	size of bid = hSize,vSize
end while
In testing, Cindy discovered that there were display problems when the page and background was shown in a viewer and scrolled. Switching from the backdrop to a button on the background fixed the problem, so she now needed a script to do this conversion.
-- change from backdrop to graphic button
b = backgrounds of this book
while b <> null
	pop b into bid
	go to page 1 of bid
	send background
	rid = backdrop of bid
	if rid <> null
		draw button from 0,0 to 6000,6000
		borderStyle of selection = "none"
		fillColor of selection = white
		excludeTab of selection = true
		enabled of selection = false
		highlight of selection = false
		transparent of selection = true
		drawDirect of selection = false
		caption of selection = null
		name of selection = null
		normalGraphic of selection = rid
		position of selection = 0,0
		rInfo = resourceInfo of rid
		hSize = (item 1 of sysPageUnitsPerPixel) * (item 2 of rInfo - 1)
		vSize = (item 2 of sysPageUnitsPerPixel) * (item 3 of rInfo - 1)
		size of selection = hSize,vSize
		sharedScript of selection = sharedScript "lockedImageButton"
		clear backdrop of bid
	end if
end while
These scripts saved a ton of time as you can imagine!

Back to Top

Actions Editor Tip by Cindy Kessler

Broadcast Functions - Coping With Non-Dynamic Object References
See an on-line demo of the application discussed here at:
http://www.plattecanyon.com/ep/ep602-mastermind-demo/index.html

Download the source ToolBook application at:
http://www.plattecanyon.com/ep/ep602-mastermind.zip

I recently created an Actions Editor version of the game Mastermind to gather fodder for this article. It was a great project since it required sending a lot of messages to a lot of objects, and as many of us know this meant dealing with the issue of non-dynamic object references.

So I decided to experiment with the closest "dynamic" reference I knew of...TARGET.

What if I had ONE function that "broadcast" User Event to all objects I wanted to do anything with? Then I would only have to list all the objects one time, in this one function. I could make the User Event parameter the name of the function I wanted executed. Then in User Event of every object I would just call a single shared action, passing along the function name as the parameter. Voila! In the one shared action, TARGET was now the object I wanted to perform the function on. So by calling my one "broadcast" function and varying the "functionName" parameter, I was able to show objects, enable objects, reset objects, etc., but only list all the objects ONE time in ONE place.

Sounds convoluted, but it worked! Here's an example.

The Mastermind games has 8 "colors" that are simply color-filled buttons. I wrote a "broadcast" shared action that accepts one parameter "functionString." This shared action sends User Event to each color button, passing along functionString as the parameter:

*******
-- Shared Actions "BroadcastToColors" ------------------------------------------
Send User event to Button "color 1" of Page "Mastermind" with value: functionString
Send User event to Button "color 2" of Page "Mastermind" with value: functionString
Send User event to Button "color 3" of Page "Mastermind" with value: functionString
Send User event to Button "color 4" of Page "Mastermind" with value: functionString
Send User event to Button "color 5" of Page "Mastermind" with value: functionString
Send User event to Button "color 6" of Page "Mastermind" with value: functionString
Send User event to Button "color 7" of Page "Mastermind" with value: functionString
Send User event to Button "color 8" of Page "Mastermind" with value: functionString
*******
Next, I wrote one shared action, "ColorFunctions," that operated on "target." This shared action performed any functions I needed on the color buttons, but operated only on target. It accepted a single parameter, "functionString." Sorry to muddy the waters, but functionString can be a comma-delimited list of values. The first value is always the name of the function, the other values are parameters of the function. So the first thing I do is split the functionString parameter into an array of values (via another shared action, "ListToArray"). Then the first value of the array (g_tempArray[1]) is the "function name."
*******
-- Shared Actions "ColorFunctions" ---------------------------------------------
Set colorNum to characters 7 to charCount(name of target) of name of target
Execute Shared Actions "ListToArray"; store return value in returnValue
If returnValue > 0
  Set functionName to lowercase(g_tempArray[1])
  If functionName = "show"
    If g_tempArray[2] = "true" and colorNum <= g_numColors
      Set visible of Target to true
      Set enabled of Target to true
    Else
      Set visible of Target to false
    End if
  Else if functionName = "disable"
    Set enabled of Target to false
  Else if functionName = "cleartext"
    Set caption of Target to ""
  End if
End if
*******
One more trick. My color buttons are grouped, so I put the execute command for ColorFunctions in the User Event of the group. This meant the call only needed to be in one place, and since User Event is forwarded, the target went through fine (it remained at the button, not the group).
*******
Actions for Group "colorGroup" of Page "Mastermind"
--------------------------------------------------------------------------------

-- On User event... ------------------------------------------------------------
Execute Shared Actions "ColorFunctions"
*******
That's it! So what did this accomplish? It allowed me to eliminate specific object references when showing, disabling, clearing text, etc. When I wanted to clear the text of all the buttons, I just executed shared script "BroadcastToColors" with a "clearText" parameter. When I wanted to hide all buttons I executed "BroadcastToColors" with a "show,false" parameter, etc. It gave me a single location (ColorFunctions) where I could add any functions I needed to perform on these objects. And I never needed to list object references beyond the one "BroadcastToColors" script. Maybe not a lot in this case, but I think it has potential!

Back to Top

Resources for ToolBook Developers: Listserv and Web Ring

It always amazes me how many ToolBook developers I meet who do not subscribe to the ToolBook Listserv. When I ask why they don't, they often say they have just let it go by accident and that they'll be back on there soon. I also hear that getting all that email every day is a pain to deal with even if their mail client has the ability to automatically sort messages into folders based on rules. I'm here to say that it *IS* worth it! And more than that, there are lots of easy ways to participate in the listserv without getting all the email messages.

Use the web interface.
Access the web interface to the ToolBook list at http://www.plattecanyon.com/list.aspx Now you can browse the messages as you please and even respond or post a new message, all via the web.

Subscribe via Newsgroups
If you are familiar with newsgroups, you can subscribe to the toolb-l newsgroup at bit.listserv.toolb-l.

Note, that before you can send a message to the group via either of the above methods, you will still need to be subscribed to the list. But you can subscribe to the list and still not receive any mail. This is called the "nomail" option and it can be set via the web interface (http://www.plattecanyon.com/list.aspx).

Also remember the ToolBook web ring. This is a collection of web sites that may be browsed in succession. The easiest way to find the web ring is to go to the Platte Canyon site:
http://www.plattecanyon.com

Scroll to the bottom of the page, and you'll see the Web Ring logo. Click on any of the links inside the Web Ring logo and you'll be on your way.
 

Back to Top

ToolBook Sessions at TBCON

This list of the sessions directly related to ToolBook will make you wish the conference were tomorrow!

  • A Close Look at the Simulation Object in Instructor 8.5 (Tom Hall)
  • A ToolBook Makeover (Robin McDermott)
  • Actions Editor - A Look at the More Complex Features of the Actions Editor (Denny Dedmore)
  • Adding Flexibility to ToolBook with XML and ASP.NET (Mike Cline)
  • An Introduction to the Actions Editor in Instructor 8.5 (Tom Hall)
  • Ask the ToolBook Experts (Tim Barham & Denny Dedmore)
  • Automating DHTML Production (Mauro Rech)
  • Basic to Advanced OpenScript (Bliss Bignall)
  • Behind the Scenes of ToolBook Instructor's Actions Editor (Tim Barham)
  • Building Custom Tools for Traditional and DHTML ToolBook Applications (Jeff Rhodes)
  • Case Study: Dynamic ToolBook Questions with Delivery via Neuron (Jeff Rhodes)
  • Communicating via the Internet with Instructor (Chris Bell)
  • Connecting to Databases in ToolBook Using ADO (Jeff Rhodes)
  • Creating Hyperlinks from a .NET Application to ToolBook Application Using.NET Reflection (Tomas Lund)
  • Creating ToolBook Editors (.spb files) for Making Changes to Actions Editor Sequences (Lee Jay Karns)
  • Customizing Progress Tracker to Fit Your Organization's or Customer's Brand (Tracey Kogelmann)
  • Denny's Top 10 List of ToolBook Problems Reported To Technical Support (Denny Dedmore)
  • Don't Do It Over and Over. Automate It! (Bliss Bignall)
  • Getting More from ToolBook's DHTML (Peter Jackson)
  • How to Build Training Courses for Mobile Devices with ToolBook Instructor (Oliver Pincus)
  • How to Manage Hundreds of Software Simulations with ToolBook Instructor (Oliver Pincus)
  • Incorporating Animations Created in ToolBook and Other Packages (Virginia Bender)
  • Incorporating Flash into ToolBook (Chris Bell)
  • Integration of Flash Components to enhance ToolBook: Part I (Greg Johnson)
  • Integration of Flash Components to enhance ToolBook: Part II (Greg Johnson)
  • Introduction to ActiveX and ToolBook (Chris Bell)
  • Introduction to ADO for Native ToolBook Applications (Martha Weller)
  • Menus for the Beginning ToolBook Developer (Virginia Bender)
  • Methods for Converting Native ToolBook Applications to the Web (Tomas Lund)
  • More Lessons from Camp Hard Knocks: 25 Tips for DHTML Deployment (Robin McDermott)
  • Multimedia Tricks and Techniques (Mauro Rech)
  • Quiz Tricks and Tips (Virginia Bender)
  • Storyboarding ToolBook Applications with a .NET Front End (Jeff Rhodes)
  • The HTTP Post Action in Instructor 8.5 (Tom Hall & Ralph Spencer)
  • ToolBook: A Look Ahead (Tim Barham)
  • Top 10 Tips and Tricks of the Software Simulation Editor (Lee Jay Karns)
  • Troubleshooting DHTML Runtime Errors (Denny Dedmore)
  • Using Graphic Images in ToolBook - The Secrets Revealed (Denny Dedmore)
  • Using the Microsoft Agent Characters in ToolBook Using OpenScript and JavaScript (Virginia Bender)
  • Viewers for Software Simulation and More (Tracey Kogelmann)

Visit http://www.tbcon.com/tbconsessions.aspx for a complete list and session descriptions.

Back to Top

 

   

VBTrain.Net Tips and Tricks

VBTrain.Net Tidbit from Jeff Rhodes

What does "server-side" code really mean? One example is the scoring page for the Question object (http://www.tbcon.com/demos/StartExam.aspx and then take and score an exam). After the user selects the exam to be scored, she clicks "Score" button. That "posts" the page and allows the server-side Click handler written in Visual Basic to run::

Private Sub ScoreExamBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles ScoreExamBtn.Click
	Dim QCollectionId As Questions = Me.QuestionCollectionReference

	If IsNothing(QCollectionId) = False Then
		UpdateQuestionDataGrid()	' Update First in case resetting test

		Dim scoringFormatSetting As Score_FormatOverrideEnum = _
CType(System.Enum.Parse(GetType(Score_FormatOverrideEnum), _
Score_FormatOverrideBox.SelectedItem.Value), Score_FormatOverrideEnum)
		Dim roundingDigits As Integer = CInt(RoundingDigitsBox.Text)
		Dim testScoreArray() As Decimal = QCollectionId.ScoreTest(scoringFormatSetting, _
roundingDigits, LockTestBox.Checked, 			ResetTestBox.Checked, _
TestIdBox.SelectedItem.Value)
		Dim testMessage As String = String.Concat("Normalized test score = ", _
(testScoreArray(0) * 100).ToString, "%. Raw test score = ", _
testScoreArray(1).ToString, " out of a maximum score of ", _
testScoreArray(3).ToString, ". The minimum possible score was ",_
 testScoreArray(2).ToString, ".")

		StatusLabel.Text = testMessage
	End If
End Sub

The QCollectionId variable is a reference to the entire "collection" of questions that have been visited. This is stored in the Session object. We then call our own UpdateQuestionDataGrid (see below) handler to show the questions, answers, scores, etc. We then figure out if want to override the scoring format (e.g., count partial scores as completely right or completely wrong) and how many digits to round the score. We when call the collection's "ScoreTest" function with this data as well as whether to lock or reset the exam after scoring it). This returns an array that gives us the normalized, raw, min, and max score that we then display in a Label control.

Private Sub UpdateQuestionDataGrid()
	Dim tableId As New DataTable("Results")
	Dim rowId As DataRow
	Dim columnId As DataColumn
	Dim testId As String = TestIdBox.SelectedItem.Value
	Dim entryId As DictionaryEntry
	Dim questionId As Question
	Dim QCollectionId As Questions = Me.QuestionCollectionReference

	With tableId.Columns
		.Add("QuestionText", GetType(String))
		.Add("Score", GetType(Decimal))
		.Add("Min Score", GetType(Decimal))
		.Add("Max Score", GetType(Decimal))
		.Add("Selected Answer(s)", GetType(String))
		.Add("Correct Answer(s)", GetType(String))
		.Add("Time Spent (seconds)", GetType(Integer))
		.Add("Number of Tries", GetType(Integer))
	End With

	For Each entryId In QCollectionId
		questionId = CType(entryId.Value, Question)
		If questionId.Test_Id.Contains(testId) = True Then
			rowId = tableId.NewRow
			With questionId
				rowId("QuestionText") = .QuestionText
				rowId("Score") = .Score_Current
				rowId("Min Score") = .Score_Min
				rowId("Max Score") = .Score_Max
				rowId("Selected Answer(s)") = CreateResponseList(.Responses)
				rowId("Correct Answer(s)") = CreateCorrectAnswerList(.Answers, 
.Answers_Weight)
				rowId("Time Spent (seconds)") = .Time_Current
				rowId("Number of Tries") = .Tries_Number
			End With
			tableId.Rows.Add(rowId)
		End If
	Next
	' Now bind to DataGrid
	With ResultsGrid
		.DataSource = tableId
		.DataBind()
	End With
End Sub
Here's the UpdateQuestionDataGrid method:
Private Sub UpdateQuestionDataGrid()
	Dim tableId As New DataTable("Results")
	Dim rowId As DataRow
	Dim columnId As DataColumn
	Dim testId As String = TestIdBox.SelectedItem.Value
	Dim entryId As DictionaryEntry
	Dim questionId As Question
	Dim QCollectionId As Questions = Me.QuestionCollectionReference

	With tableId.Columns
		.Add("QuestionText", GetType(String))
		.Add("Score", GetType(Decimal))
		.Add("Min Score", GetType(Decimal))
		.Add("Max Score", GetType(Decimal))
		.Add("Selected Answer(s)", GetType(String))
		.Add("Correct Answer(s)", GetType(String))
		.Add("Time Spent (seconds)", GetType(Integer))
		.Add("Number of Tries", GetType(Integer))
	End With

	For Each entryId In QCollectionId
		questionId = CType(entryId.Value, Question)
		If questionId.Test_Id.Contains(testId) = True Then
			rowId = tableId.NewRow
			With questionId
				rowId("QuestionText") = .QuestionText
				rowId("Score") = .Score_Current
				rowId("Min Score") = .Score_Min
				rowId("Max Score") = .Score_Max
				rowId("Selected Answer(s)") = CreateResponseList(.Responses)
				rowId("Correct Answer(s)") = CreateCorrectAnswerList_
(.Answers, .Answers_Weight)
				rowId("Time Spent (seconds)") = .Time_Current
				rowId("Number of Tries") = .Tries_Number
			End With
			tableId.Rows.Add(rowId)
		End If
	Next
	' Now bind to DataGrid
	With ResultsGrid
		.DataSource = tableId
		.DataBind()
	End With
End Sub
We have quite a lot happening here in very little code. We create our own database table in the first line and declare some other variables. We add columns for each piece of data we want to display (QuestionText, Score, etc.). We then loop through all the questions in our selected test and add a row for each one. We then populate the appropriate columns with the corresponding properties of the question. Finally, we "databind" the table to a special DataGrid object for display. It automatically takes the space it needs to display the all the questions. Note that the code is almost identical for the Windows version of this page.

Back to Top

VBTrain.Net Sessions at TBCON

Curious about the excitement or ready to dive into .NET? Either way, there are sessions for you:.

  • Adding Flexibility to ToolBook With XML and ASP.NET (Mike Cline)
  • Adding Media to Your VBTrain.Net Applications (Chris Bell)
  • An Introduction to Visual Studio and Visual Basic .NET (Jeff Rhodes)
  • Anatomy and Use of the VBTrain.Net Question Object (Jeff Rhodes)
  • Building Custom Components in VBTrain.Net (Jeff Rhodes)
  • Building Web Sites with ASP.NET (Jeff Rhodes)
  • Creating "Rich-Client" CBT with VBTrain.Net (Jeff Rhodes)
  • Creating Hyperlinks from a .NET Application to ToolBook Application Using.NET Reflection (Tomas Lund)
  • Creating Web-Based Training with VBTrain.Net (Jeff Rhodes)
  • Database Access in VBTrain.Net (Jeff Rhodes)
  • Flash Development Basics (Chris Bell)
  • Secrets Behind Tracker.Net (Jeff Rhodes)
  • Storyboarding ToolBook Applications with a .NET Front End (Jeff Rhodes)
  • VBTrain.Net: Some Introductory Ideas on How to Create Training (Chris Bell)
  • What is this VBTrain.Net Stuff Anyway? (Jeff Rhodes)
  • Working with Graphics and Text in VBTrain.Net (Chris Bell)

Visit http://www.tbcon.com/tbconsessions.aspx for a complete list and session descriptions.

Back to Top

 

   

MORE NEWS AND INFORMATION

Conference Reviews and Previews

LOOKING AHEAD: PREVIEWS

Learning & Training Week
April 28 – May 1, 2003
Washington D.C.

Jeff will be presenting "Creating a Learning Management System in ASP.NET" on Tuesday April 29, 2003 at 8:15 AM.

http://www.learningandtrainingweek.com

 

Education & Training Technology
August 6 - 8, 2003
Arlington, Virginia

Jeff will be presenting "Creating SCORM-Compliant, Database-Driven Content in ASP.NET" on Wednesday, August 6, 2003 at 2:15 PM.

http://www.salt.org/conference/et_general_info.htm

 

Online Learning
September 22 – 24, 2003
Los Angeles, California

Jeff and Chris will be presenting "A Whirlwind Introduction to Creating Training with ASP.NET" on Monday, September 22, 2003 at the Expo Educational Stage at 2:30 PM.

Chris will be presenting "Techniques for Creating Online Learning" on Monday, September 22, 2003 at 8:30 AM.

Jeff & Chris will be at the Platte Canyon booth (#313) the rest of the time.

http://onlinelearningconference.com



LOOKING BACK: REVIEWS

SALT New Learning Technologies
February 19-21, 2003
Orlando, Florida
and
ASTD TechKnowledge
January 28 -30, 2003
Orlando, Florida

It was kind of surprising that there were two great e-Learning conferences a month apart and both held in Orlando, but the difference between the events was night and day. The ASTD event was filled with eager attendees from corporate training departments asking questions centered around tools and techniques. The SALT event had a more academic bent to it, though attendees were equally interested and energetic. They seemed to be more interested in the design aspects of the training. TechKnowledge was also bigger – I figure there were about 2000 attendees compared to New Learning Technologies' 200. But the quality of both events was phenomenal. I learned a ton and had a great time introducing everyone to the whole VBTrain approach to training. They were both so good that I hope to return in future years.

Back to Top

Platte Canyon Products in the Pipeline

First up on the agenda is Tracker.Net 1.5. We'll be adding supervisory levels and possibly other enhancements. We're also planning a massive update to our Learning & Mastering ToolBook series in support of the next release of ToolBook.

Back to Top

e-learning Creation Tip from Chris Bell: Photoshop Actions

If you are a PhotoShop user and you're not using Actions, boy do I have some good news for you! Actions were first introduced in PhotoShop 5 but the fully-realized capabilities of the version 7 actions are amazing. And the beauty is that they are quite easy to use. It is just a matter of recording keyboard and mouse actions and then tweaking it as necessary.

To get started, show the Actions tab (View, Actions). You will see a collection of Actions already recorded for you. Check these out by double clicking on each.

Now to record your own action, get your document ready, and then at the top of the Actions palette, click the right-arrow and choose New Action from the options. Name the action, and if you think you will be using this actions a lot, assign it a key combination that will run the action.

Now that you see your action highlight it in the Actions window and click the red "record" circle at the bottom of the palette. While recording, every *meaningful* thing you do will be recorded. I say "meaningful" because you could move your mouse all over the screen and it won't be recorded. But if you move a layer or click a tool, that is recorded.

After you have recorded your whole sequence, expand and review it in the Actions window. I always place a check mark in the Dialog Toggle for saves just to make sure that I have the option of saving it as just the right thing. Are there any steps you'd like to remove? no problem just select the step and delete it. If you flubbed a step, no problem here either; just delete that step and then record that single step again. You'll see it appear in the steps of your action.

I hope that this little primer will encourage you to think about automating any you do that is repetitive. I sure have found it useful.
 

Back to Top

 
   

Coming in the Next Issue of the EnterPage

  • 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, 2003.