... | .. |
The EnterPage The Source for ToolBook and VBTrain.Net News |
... | From Platte Canyon Multimedia Software
Corporation.
In This IssueIntroduction
IntroductionIt'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. TBCON 2002 CD Ready for OrderWow! 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: To order the CD from our new online store, go to: Also, you can see details on Conference CDs from previous years at:
Or buy more than one CD and take advantage of these special offers:
You can order any of the above CD’s and bundles by going to:
TBCON 2002 ReportWhat 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! ToolBook & VBTrain.Net Training Classes Coming Up SoonPlatte Canyon's popular classroom training series is in full swing for this fall semester with the following dates:ToolBook Instructor for Internet Deployment Learning & Mastering ToolBook Instructor: The Class
VBTrain.Net™: Creating Computer and Web Based Training with Visual Basic® .NET
ToolBook Instructor for Internet Deployment Learning & Mastering ToolBook Instructor: The Class
VBTrain.Net™: Creating Computer and Web Based Training with Visual Basic® .NET More information including a full schedule is available at: OnLine Learning 2002 PreviewJeff 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: Click2learn ToolBook Design Award WinnersCongratulations 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! VBTrain.Net Product ReleasesOur 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: Platte Canyon Products in the PipelineWhile 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! Plug-In Pro Tool Spotlight: Delete Pages and ResourcesWhen 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: Prices:
To order, to go: https://outlaw.securewebs.com/plattecanyon/store/ProductDetails.aspx?ProductID=398 CBT Creation Tip from Chris Bell: Perfect Edges with PhotoShopIn 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:
Expert Information from the "Learning & Mastering ToolBook..." SeriesURL 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. OpenScript Tip from Jeff RhodesWe 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 Actions Editor Tip by Cindy KesslerCustom 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:
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! VBTrain.Net Tidbit from Jeff RhodesHandling 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. Coming in the Next Issue of the EnterPage
Information on Subscriptions and Article SubmissionsThe 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. |