Adobe Connect User Community


Send this page





Bookmark and Share

Home >  Learning Center >  Tutorials >  Developing a Flash Wrapper for Adobe Captivate and Presenter Content

Developing a Flash Wrapper for Adobe Captivate and Presenter Content

Andrew Chemey, Adobe Systems

March 2009

Expertise Level: Intermediate

  
3 Votes

This document describes a custom component that can be used to create Flash-based wrappers for Adobe Captivate and Adobe Presenter. The component allows wrappers to launch, control and track content published by Captivate and Presenter. The Flash wrapper can monitor the data from the content as it is playing, such as the status, score and interaction data. Typically, this is used to build a single [Flash] course to launch and track multiple content files created in Presenter and Captivate.

The component is built for integrating Captivate and Presenter content with Flash. The Integration Component called CpPrFlashIntegration is the same component described in another article used to add Flash-based certificates to Captivate and Presenter. While the component is exactly the same and the methods/properties are the same; some of the methods and properties are intended specifically for one purpose (e.g. polling for the completion status) than use-cases described in other articles.

Note: The Captivate and Presenter Integration Component is based on ActionScript 2.0 and is not currently available in ActionScript 3.0. The current version of the Integration Component can not be loaded into any Flash project that uses ActionScript 3.0. This version of the Component also recommends the use of Flash Player 8 or higher.

The component is provided as-is and may or may not be suitable for your environment or use. It has been tested with Adobe Presenter 6 and 7; and Captivate 3 and 4. It should be noted that the eLearning Suite could be used for future development. Please see more information on the Adobe eLearning Suite. This component may or may not work with future versions of Adobe Presenter or Adobe Captivate, but is an extremely easy way to develop Flash-based wrappers in the current versions.

In this article, the Captivate and Presenter Integration Component may simply be referenced as component.

Requirements

  • Flash 8 or higher is recommended
  • Flash Player 8 or higher is recommended
  • Familiarity with ActionScript is recommended
  • Adobe Acrobat Connect Pro account is recommended (for LMS integration)
  • Sample Files associated with this document are available for download (briefly described in the Sample Files section, below). These files may be compressed in .zip format and may require you to install an extraction program such as 7-Zip available from http://www.7-zip.com.

Overview

Launching Captivate or Presenter content from Flash is not difficult nor is it a new concept. In addition, there are methods and/or properties that have been reported to allow Flash to control the Captivate or Presenter files (common web-search engines can help find websites with this information). However, this component extends this capability, because it allows the ability to actually poll the Captivate or Presenter content for data. The data could include the score or status of the content.

The data could be used for many purposes. The data can be used for building a certificate, building a Flash-based wrapper for communicating to your own proprietary tracking system, or building a Flash-based wrapper for launching and tracking one or more Captivate or Presenter files (which could be used to communicate to an LMS or proprietary tracking system). The component simply helps capture the data. What is done with the data is up to you.

Figure 1: Example of a Flash Wrapper launching/tracking multiple Captivate/Presenter content files
Figure 1: An Example of a Flash-based Wrapper for Launching Multiple Captivate/Presenter Files

In figure 1 above, this is an example of building a Flash-based wrapper for launching and tracking multiple Captivate/Presenter content files. Actually, the wrapper could launch other content, too, but the intent is that the wrapper can detect when a content file hasnt been launched; has been launched, but not completed; has been launched and completed. The scores of the Captivate/Presenter content is not necessarily shown in this screen capture, but they could be used to build a cumulative score for tracking to an LMS or other tracking system.

The component provided with this article is an easy way to build Flash-based files which can communicate with Captivate or Presenter content for controlling basic navigation or polling the content for data. By using the component, developers only need to know how to use the properties and methods provided to communicate with the Captivate or Presenter content.

Note: I have not personally tested all possible combinations of Captivate and Presenter. For example, its possible to create a Captivate file and insert it into a Presenter file and then create a Flash-based wrapper to launch and control the Presenter file and expect the controls the affect the Captivate file on the appropriate slide.

Using the Captivate and Presenter Component for Flash

The Captivate and Presenter Component for Flash is built as a SWC component. It knows how to interact with Adobe Captivate and Adobe Presenter content files. This SWC, when inserted into Flash provides a number of properties (variables) and methods (functions) about the Captivate and Presenter file. This allows developers to control the Captivate or Presenter content launched from Flash or capture data from the content.

To use this component, you simply need to perform a number of simple steps:

  • Extract (unzip) the contents of the component into the appropriate folder where Flash is installed
  • Insert the component into a Flash project
  • Use a MovieClip in Flash to load Captivate or Presenter published content
  • Use the methods of the component to capture data from the Captivate or Presenter content in Flash
  • Optionally, the component can be used to also control basic navigation of the Captivate or Presenter content

Installing the Captivate and Presenter Component for Flash

The download of the component, above, provides two different development processes: A SWC file which can be manually copied to the Components folder where Flash is installed; and a FLA which can either be imported or manually copied to the Common Libraries folder where Flash is installed. Only one of these steps needs to be followed, though they provide two different experiences within Flash. Follow one or both of these steps based on your development standards.

Copy the SWC file to the Components folder of Flash, if using Components
On Windows, navigate to the following location, replacing the term <username> with the login name for your computer and with the appropriate version of Flash to install the component:

C:\Documents and Settings\<username>\Local Settings\Application Data\Adobe\\en\Configuration\Components\

NOTE: Make sure you have set your Windows Explorer's View options to show hidden files and folders. Otherwise, you may not see the Local Settings and Application Data folders.

On a Macintosh, go to the following location, replacing the term username with your login name, and System Disk with the name of your system hard drive (i.e. Macintosh HD) and flashversion with the appropriate version of Flash to install the component:

System Disk: Users: username: Library: Application Support: Adobe: flashversion: en: Configuration: Components

In the Components folder, you can create new folders for your own custom components. If a new folder is not created, components appear in a Standard Components grouping in the Components panel of Flash. Copy the CpPrFlashIntegration.swc you downloaded to this new folder (or the root of the Components folder).

Figure 2: Components Panel in Flash
Figure 2: Integration SWC in the Components Panel

After you have copied the file, go back to Flash. You can either restart Flash to see the new component listed in the Components panel, or you can click the options menu in the top right corner of the Components panel and choose Reload. You should now see a new grouping called either Standard Components (if the component was not copied to a new folder) or the name of the new folder created, above. Inside this grouping, you will see a component named CpPrFlashIntegration.

Copy the FLA file to the Common Libraries folder of Flash, if using Libraries
A .fla file of the component (CpPrFlashIntegration.fla) has also been provided, for developers that prefer to use Libraries in their Development. The best way to use shared library files is by copying files to the Common Libraries folder.

The .fla file can either be imported (File > Import > Open External Library) command or by copying the .fla to the Common Libraries folder and then referenced by the Common Libraries (Window > Other Panels > Common Libraries > CpPrFlashIntegration) menu item.

Inserting the component in Flash

To insert the component in Flash, simply drag the CpPrFlashIntegration component from the Components panel to the stage. Give the component a unique Instance Name, which will be used to reference the methods and properties for the certificate.

Figure 3: Captivate/Presenter SWC component
Figure 3: Integration Component

Using the properties and methods of the component

In order to be used, the component needs to be inserted into a Flash file and given a unique Instance Name. Its this Instance Name and component which ultimately provides access to the methods and properties of the Captivate or Presenter file the certificate will be inserted.

Figure 4: Captivate/Presenter SWC component on Stage
Figure 4: Integration Component on Stage (with Instance Name CpPrIntegration_mc)

In the screen capture, above, the component has been inserted on stage and given an Instance Name CpPrIntegration_mc. Lets use this as we continue to look at this example.

Just the act of inserting the component, in this use-case, does NOT start to instantiate the component. This is different than using the same component for creating certificates. In this case, the component needs to know the Object or MovieClip that contains the Captivate and/or Presenter file. The component has to explicitly have a method called where its passed the Instance Name of the MovieClip that will load the Captivate/Presenter file. For example, if using ActionScript to create a MovieClip, the code might look like this:

this.createEmptyMovieClip("CpPr_mc", this.getNextHighestDepth());
CpPr_mc.loadMovie("content/viewer.swf");

In this example, a new MovieClip named CpPr_mc has been created at the current level. A file called viewer.swf (which is the file to load from Presenter-based content) is loaded into that MovieClip from a folder called content.

At this point, if the file is published, the Presenter file would start to be loaded into the new MovieClip CpPr_mc. The Loading Screen for Presenter would appear as the various XML files are read and the content is downloaded enough to start presenting the content to the learner.

Figure 5: Presenter Loading Screen
Figure 5: Loading Screen for Adobe Presenter

This is a critical point, because the Presenter file is not fully loaded its just begun its process of initializing and preparing the file and downloading the content to the local machine for playback. Thus, the component would not be able to provide any meaningful data, because the file its tracking against is not even fully instantiated.

However, the component could start polling the MovieClip to start to wait for it to be fully loaded. The component needs to know that its the CpPr_mc MovieClip that contains the Captivate/Presenter (in this case, Presenter) content. The method to initialize with the component to pass it the name of the MovieClip Object is: waitForContentLoad, though the appropriate mechanism to call this method is by pre-pending the name of the component and passing the parameter of the Instance Name of the Captivate/Presenter MovieClip. So, it would look more like:

CpPrIntegration_mc.waitForContentLoad(CpPr_mc);

This method will:

  • Provide the component with the Instance Name of the Captivate/Presenter MovieClip
  • Starts a process where the component is looking to see if that Instance Name contains a valid Captivate/Presenter file
  • Causes the component to wait for the Captivate/Presenter file to be fully loaded into the MovieClip and will set a property isLoaded_bln when the file is loaded and at the first slide/page of the content

Well need to wait for the content to be loaded, by waiting for the variable isLoaded_bln to be true. When this variable is true, the file has been fully loaded and has reached the first page of the content. There are several ways to wait for the variable to be true, but in this example, well use a polling mechanism setInterval. For example:

var interval_var = setInterval(waitForContent, 100);
var status_str = ;

function waitForContent()
{
if(CpPrIntegration_mc.isLoaded_bln)
{
clearInterval(interval_var);
// Wait for the last slide here
CpPrIntegration_mc.watch('isLastSlide_bln', waitForContentCompletion, this);
}
}

function waitForContentCompletion(prop, oldVal, newVal)
{
if(newVal == true)
{
CpPrIntegration_mc.unwatch(prop);
// Do something with the data
status_str = CpPrIntegration_mc.getLessonStatus();
}
}

The code snippet above is constantly polling the method waitForContent, waiting for the isLoaded_bln to be true. Once isLoaded_bln is true, the polling mechanism is stopped (clearInterval) and the code starts to wait for another variable to be true (isLastSlide_bln), via a Watch mechanism.

Note: The watch mechanism is another way to wait for the status of a variable to be a certain value. The purpose is so a Flash watch can be called to wait for the property value to change. For more information on setting a watch, search for Object.watch in the Flash help system.

There are other variables that we could watch or check the values of, including isCompleted_bln among others. Its important to note that some variables may be set even under conditions that you wouldnt expect. isCompleted_bln is a good example. isCompleted_bln might be set when:

  • Learner has completed the file (in Presenter, this could be they viewed *every* slide)
  • Learner has completed the file by answering all of the questions correctly
  • Learner has exited the quiz

The latter two might lead to unexpected conditions. If the quiz is set to passed (or completed) based on the learner receiving a mastery score of 80%, this means the file would be completed upon the learner answering 4 out of 5 questions correctly. Its also possible the learner has exited the quiz by either navigating to a slide BEFORE the first slide in the quiz, or exited a quiz by navigating to a slide AFTER the last question in the quiz. Both of these would have a completed (and potentially failed) state. This is something to keep in mind while evaluating the various values from Captivate and Presenter.

Once the content is fully loaded, the various methods and properties (defined below) can be checked to look for either conditions or values that will help you capture the data necessary for your Flash wrapper.

Special consideration may need to be taken when launching multiple Captivate / Presenter content files. Assuming the same MovieClip is used to launch all of the Captivate/Presenter files, the component isnt necessarily aware (though that could change in the future) that a new file is being launched in the MovieClip. So, imagine the first content file is loaded in the component the value of isLoaded_bln is true. However, if launching a new file in the MovieClip:

CpPr_mc.loadMovie("newcontent/viewer.swf");

Then immediately checking the value of isLoaded_bln:

CpPrIntegration_mc.isLoaded_bln

would probably return true. Not because the new content is loaded and available, but because the existing content hasnt been cleared from memory or the MovieClip, yet. A timer may need to exist between loadMovie calls OR the URL of the content should be analyzed before checking the isLoaded_bln or other properties/methods of the component.

Properties

This section covers the properties available in the Captivate/Presenter Integration component. These properties are mostly available for setting up a watch or checking their values for use in capturing the data from a Flash-based wrapper.

Property

Description

isLoaded_bln

Indicates whether the Captivate or Presenter file is loaded. This is typically not used in a certificate use-case. This property is for building a Flash wrapper that launches Captivate/Presenter files.
Returns: Boolean (true or false).

isInitialized_bln

Indicates whether the Captivate or Presenter container has been found (if true, the Flash file has been loaded into a Captivate or Presenter file).
Returns: Boolean (true or false)

isReady_bln

Indicates that the current page is the last page in the Captivate/Presenter file.
Returns: Boolean (true or false)

isQuizzing_bln

Indicates that the file contains quizzing components.
Returns: Boolean (true or false)

isLastSlide_bln

Indicates whether the current page is the last page in the file. For this use-case, it actually is set to true, when the page that contains the certificate (or the Flash file that uses the component) is the current page.
Returns: Boolean (true or false)

isCompleted_bln

Indicates whether the file status is set to completed. This only checks the completion status and not the success status (whether the file is passed).
Returns: Boolean (true or false)

isPassed_bln

Indicates whether the success status is set to passed. Its possible the file has been completed (where the learner answered all of the questions in the quiz or viewed all of the pages) but did not receive a passing score (did not answer enough questions correctly). In this case, the learner has answered enough questions correctly to receive a passing score (but the completion status should be checked to determine whether they have viewed enough pages).
Returns: Boolean (true or false)

isFailed_bln

Indicates whether the success status is set to failed. Its possible the file has been completed (where the learner answered all of the questions in the quiz or viewed all of the pages) but did not receive a passing score (did not answer enough questions correctly), thus their success status is failed.
Returns: Boolean (true or false)

isQueueEmpty_bln

Indicates whether the LMS tracking queue is empty. This is primarily used when quitting the file. If there are still items waiting to be sent to the LMS, it might be bad to close the content or try to close the content. Before exiting the content (which might be facilitated by the contentQuit method, explained in the methods, below), this value could be checked to confirm the queue is empty before loading another movie or otherwise exiting the content.
Returns: Boolean (true or false)

isAdobeConnect_bln

Indicates whether the LMS that launched the Captivate or Presenter file is Adobe Connect. This value should be true whether it was Adobe Connect, Adobe Connect Pro or an Adobe Connect Meeting.
Note: Special consideration should be made if launching a Captivate or Presenter file so it tracks directly to an LMS. This is typically only made if there is only ONE Captivate/Presenter file that the Flash-wrapper is launching (and the purpose of the Flash-wrapper is to potentially capture and send data to another tracking mechanism).
Returns: Boolean (true or false)



Methods

This section covers some of the methods available in the Captivate/Presenter Integration component. Please review the sample files for examples of how some of these methods are used.

The properties/methods described below are all prefaced with the Instance Name of the component. Most of the samples set the instance name as CpPrFlashIntegration_mc, though the ActionScript tends to create a reference to the component as CpPr_mc. For example:

var CpPr_mc = CpPrFlashIntegration_mc;

This reference is recommended, so that the actual Instance Name of the component can change, but the ActionScript requires only a one line change to accommodate your development style or naming convention.

Method

Parameters

Description

waitForLoad

Object: Instance Name of the Adobe Captivate or Presenter Movie Clip.

This method is required for this use-case. It is intended to perform two tasks:

  • Let the component know the MovieClip that contains the Captivate or Presenter content (this is use for being able to control and/or poll that object for appropriate values)
  • Wait for the Captivate or Presenter object to load. The properties/methods of the Captivate or Presenter file arent available until the file has been completely loaded.

The Flash-based wrapper is not able to control or respond to values in the Captivate or Presenter file until the content is completely loaded. The component does not search through your entire Flash-based wrapper so it needs a starting point or what MovieClip contains the Presenter/Captivate file.

componentInitialize

Object: Instance Name of the Adobe Captivate or Presenter Movie Clip.

Starts a process to initialize the component and check whether an appropriate child (Captivate or Presenter file) has been found.
NOTE: This method should not need to be called, as it is explicitly called when the component is loaded on stage.
Returns: Nothing. Typically the properties and methods that indicate whether the child content has been found (initialize) is set to 0 or 1 after this method is called.

isChild

None

Returns whether the flash wrapper is a child or a parent of the Captivate or Presenter file. In this use-case, this method should return false. The Flash-based wrapper is the PARENT of the Captivate/Presenter file (its not a child)
Returns: Boolean (true or false)

isCaptivate

None

Indicates whether the child container is a Captivate file.
Returns: Boolean (true if the child container is a Captivate file; or false)

isPresenter

None

Indicates whether the child container is a Presenter file.
Returns: Boolean (true if the child container is a Presenter file; or false)

getInitialized

None

Indicates whether the Captivate or Presenter child container has been found (if true, Captivate or Presenter file is loaded in the child container).
Returns: Number (integer): -1 (still searching), 0 (no container found) or 1 (container found).

getReady

None

Indicates that the current page of the Captivate or Presenter content is the last page. This method and the property isLastSlide_bln perform the same function.
Returns: Number (integer): -1 (still waiting for the last page), 0 (current slide is not applicable not expected in this use-case) or 1 (current page of the Presenter or Captivate content is the last page).

isLMS

None

Indicates that the current Captivate/Presenter file was launched from an LMS.
Note: Special consideration should be made if launching a Captivate or Presenter file so it tracks directly to an LMS. This is typically only made if there is only ONE Captivate/Presenter file that the Flash-wrapper is launching (and the purpose of the Flash-wrapper is to potentially capture and send data to another tracking mechanism).
Returns: Boolean (true or false)

getLessonStatus

None

Status by (and from) the Captivate or Presenter content. Typically the return value should be completed or incomplete.
Returns: String

getLessonStatusSuccess

None

Success status (passed or failed) by and from the Captivate or Presenter content.
Returns: String

getScore

None

Score from the Captivate or Presenter content..
Returns: Number

getScoreRaw

None

Raw score from the Captivate or Presenter content.
Returns: Number (raw score)

getScoreMax

None

Max score from the Captivate or Presenter content.
Returns: Number (max score)

getScoreMin

None

Min score from the Captivate or Presenter content.
Returns: Number (min score)

getTimeInSession

None

Time spent from the Captivate or Presenter content.
Returns: Number

getStudentID

None

Student ID as sent by the LMS.
Note: Only returns a value when launched in an LMS. May require additional JS code in the HTML wrapper, if not launched from Adobe Connect. Special consideration should be made if launching a Captivate or Presenter file so it tracks directly to an LMS. This is typically only made if there is only ONE Captivate/Presenter file that the Flash-wrapper is launching (and the purpose of the Flash-wrapper is to potentially capture and send data to another tracking mechanism).
Returns: String

getStudentName

None

Student name from the Captivate or Presenter content..
Note: Only returns a value when launched in an LMS. May require additional JS code in the HTML wrapper, if not launched from Adobe Connect. Special consideration should be made if launching a Captivate or Presenter file so it tracks directly to an LMS. This is typically only made if there is only ONE Captivate/Presenter file that the Flash-wrapper is launching (and the purpose of the Flash-wrapper is to potentially capture and send data to another tracking mechanism).
Returns: String

getNumberOfQuizzes

None

Returns the number of quizzes in the Captivate or Presenter content.
Returns: Number

getNumberOfQuestions

Number: QuizNumber

Returns the number of questions in a particular quiz of the Captivate or Presenter content.
Returns: Number

getInteractionData

None

Returns the number of interactions as answered by the learner in the Captivate or Presenter content. This returns an array. The first value in the array is the first quiz. The sub-value of the first array is also an array, which represents the number of questions in that quiz. Finally, the items returned for each question.
Note: This method returns a single array for each question in every quiz presented in the file.
Returns: Array

getCourseTitle

None

Returns the Course Title (if available) from the Captivate or Presenter content.
Note: Especially for Captivate, may require additional JS code in the HTML wrapper.
Returns: String

getCurrentDate

None

Returns the current date as: Month{space}Day{comma}{space}Year
For example: January 1, 1999
Returns: String

getCurrentMonth

None

Returns the current month formatted as a full month (e.g. January).
Returns: String

getCurrentDay

None

Returns the current day.
Returns: String

getCurrentYear

None

Returns the current year.
Returns: String

getContentSlideNum

None

Returns the current slide number in the Captivate or Presenter content.
NOTE: This value is 0-based, so the first slide in the file is 0.
Returns: Number

getContentSlideMax

None

Returns the total number of slides in the Captivate or Presenter content.
NOTE: This value is 0-based, so if the file contains 5 slides, this method returns 4 (since the first slide is 0).
Returns: Number

contentQuit

Boolean: closeBrowser_bln

This method waits for the LMS queue (if there is an LMS) to be empty and then sets a property isQueueEmpty_bln to true.
If the method receives the optional parameter (closeBrowser_bln) then it attempts to close the browser window.
NOTE: Closing the browser window is something that is based on Internet Explorer hacks and usually dont work in Mozilla-based browser such as Firefox. Closing the browser window might also require additional JavaScript to be inserted into the launching HTM file.
Returns: Nothing

contentPause

None

Attempts to pause the Captivate or Presenter content. Does nothing if the content is already paused OR if the Captivate or Presenter content has intentionally disabled the pause button.
Returns: Nothing

contentPlay

None

Attempts to play the Captivate or Presenter content (from its current location).
This method does nothing if the content is already playing OR if the Captivate or Presenter content has intentionally disabled the play button.
Returns: Nothing

contentPrevious

None

Attempts to navigate to the previous slide in the Captivate or Presenter content.
This method does nothing if there is no previous slide or if the Captivate or Presenter content has intentionally disabled the previous button.
Returns: Nothing

contentNext

None

Attempts to navigate to the next slide in the Captivate or Presenter content.
This method does nothing if there is no next slide or if the Captivate or Presenter content has intentionally disabled the next button.
Returns: Nothing

contentMute

Boolean (Optional: Captivate, only)

Attempts to mute the Captivate or Presenter content.
This method does nothing if there is no audio or of the Captivate or Presenter content is already muted.
Returns: Nothing

contentUnmute

Boolean (Optional: Captivate, only)

Attempts to un-mute the Captivate or Presenter content.
This method does nothing if there is no audio or of the Captivate or Presenter content is not muted.
Returns: Nothing

hidePlaybar

None

Attempts to hide the playbar of the Captivate or Presenter content.
Note: This method disables the ability for the learner to scrub through the file or use the playbar for navigation.
This method does nothing if there is no playbar or if its already hidden.
Returns: Nothing

showPlaybar

None

Attempts to display the playbar of the Captivate or Presenter content.
This method does nothing if there is no playbar or if its already displayed.
Returns: Nothing


Component Files

The component is a relatively simple solution and is also relatively easy to use. You can certainly incorporate the component into your own Flash-based wrappers files and call the available methods. This section will review the various files that comprise this component solution.

NOTE: At this time, there isnt an installer, though that may change in the future. The steps are manual to copy and/or backup existing files for this solution.

Here are the files of the prototype:

  • SWC Component (File)
  • SWC Library (File)

SWC Component

The SWC Component is the file that needs to be available in each of the Flash files used as a Flash-wrapper to launch or track Captivate/Presenter-based content. It can be copied (and available) to appear in the Component panel of Flash or in a Common Library. From the Component panel, it needs to be dragged to each Flash file and given a unique Instance Name for use in Flash wrappers.

SWC Library

The SWC Component can also be made available to appear in the Common Library folder where Flash is installed. Once copied properly, the library is available from the Window > Common Libraries panel. The SWC then needs to be dragged to each Flash file and given a unique Instance Name for use in Flash wrappers.

Sample Files

There is currently one example file provided with this article, though there are two sets of files; one for Captivate and one for Presenter. The example uses the component with a basic framework for common functionality of navigation and retrieving data. This section provides a brief description of the sample.

Sample1_BasicNavigationWithDataDump

This sample provides a basic infrastructure for launching a single Captivate and Presenter file in a Flash-based wrapper. When the content reaches the last slide, its automatically hidden and a data dump is displayed within the Flash wrapper.

Note: I have written a separate article on building a Flash-based certificate that can be imported into Captivate/Presenter. This particular sample does NOT use a certificate imported into the actual Captivate/Presenter file, but rather displays the data within the Flash wrapper itself. I dont have any recommendations on whether to import a certificate into Captivate/Presenter or whether to create/recreate a certificate within the Flash wrapper itself.

This sample provides three common buttons (previous page, next page, and pause/play).

The code for this example is found in the actions layer of the root timeline of the certificate.

Conclusion

These prototype files are provided as-is, though I expect to be making changes to them. Feel free to contact me with any updates and suggestions you might have for these files.



Member Comments

Share your thoughts. Tell us what you think about this tutorial.


SEPTEMBER 15, 2009

Andrew,

Thank you. Great tutorial. Just what I was looking for. I had lost hope.

I have made great progress in setting up a custom player to loads in the wrapper. Do you know how to make a button take the user to a specific slide? I am able to see in what slide I am as I navigate my course using: _root.m_controlBar.m_currSlide._slideNum

However, is there a way to go to a specific slide? I want to put a drop down menu with chapters, when the user clicks on a chapter, they go to a specific slide. Any help would be great, thank you.

Luis

SEPTEMBER 19, 2009

Luis,

I'm sorry for the delay - I didn't receive a notice that someone had posted a comment.

I would hope you use: getContentSlideNum() instead of _root.m_controlBar.m_currSlide._slideNum to retreive the current slide. I would also hope that you don't use a hardcoded "_root" as that is relative to how a file is loaded.

I hadn't exposed or implemented some methods and setting the slide was one of those methods. However, I do have an updated component that I haven't uploaded to ConnectUsers.com that provides that particular method. It contains some additions and some changes to the methods used in this component. If you contact me off-list I can provide you with the updated SWC until I get the article updated.

Regards,

Andrew

SEPTEMBER 22, 2009

Any idea if there is an AS3 component now...trying to wrap this thing so I can control things and get info is getting pretty tedious and aggravating.

SEPTEMBER 23, 2009

The AS3 component isn't available now. However, I'll see what I can do.

OCTOBER 07, 2009

Andrew,

Thanks for the response. I will change my code so it uses getContentSlideNum(); I was looking for additional help and saw you had answered my first post. I was able to get the wrapper to take me to any slide I wanted. I have done a lot of progress. I wanted to share the project I am working on. I will have it available only for a couple more weeks, then I'll take it down. Here is the link: http://www.leadcm.com/ipoe

I actually came back to this post to see how I could mute/unmute the presentation. I am being able to mute it using contentMute(); however, contentUnmute() is not bringing the audio back. I tried contentUnMute() but no luck. I'll check back later to see for any replies. I'll keep on it to see if I can figure out why it's not working.

OCTOBER 07, 2009

I just noticed contentMute() and contentUnmute() are only for Captivate. Darn!

OCTOBER 08, 2009

Andrew,

I was able to mute/unmute the presenter movie using the sound object in the main timeline like so:

var globalsound = new Sound();
globalsound.setVolume(0); // mute
globalsound.setVolume(100); //unmute

Hope this info helps other users.
Luis.

NOVEMBER 10, 2009

What license are these components released under?

NOVEMBER 28, 2009

Hi Great Peice of Kit.

The demo files you have uploaded work fine, but I am experiencing one problem when I try to use Captivate 4 files. I am getting an error message saying that "MMTracking.swf" cannot be found. Any idea as to whats happening.

Thanks

Tiggaa

DECEMBER 02, 2009

Tiggaa - You'll get that message anytime you attempt to load Captivate files. It's from Captivate and the message is benign; the file doesn't need to be loaded.

DDavisLeader - If the component works, use it.

Luis - The "mute" API's should work for Presenter. I'd double-check my functions (the reference to the 'only available in Captivate' is for the optional parameter). I would NOT use a global variable, but whatever works.

Regards,

Andrew

DECEMBER 06, 2009

Andrew,

Thanks for the info, I had inserted theMMTracing.swf into the product directory.

Now I am receiving an Output message saying:

"AEC: creating external adapter
AEC: starting createExternalAdapter: trackingObj = [object Object]
in createExternalAdapter, could not create adapter, preferred adapterType = SCORM"

I have tried using SCORM 2004 and SCORM 1.2 varients but I receive the same message.

Any ideas what I am doing incorrect??

Thanks

Tiggaa

DECEMBER 06, 2009

Tiggaa - Did you launch the content from a SCORM-compliant LMS?

DECEMBER 07, 2009

Andrew,

I refer to the message within the output area in Flash CS4, whilst I test my FLA. The captivate files I am trying to load are local copies of packages already run on a docent 6.5 LMS.

I wondered if I needed to do anything in particular to the output preferences in Captivate 4 in order to use it with this component.

Thanks in advance and sorry if I am asking a bone question.

Tiggaa

DECEMBER 07, 2009

Tiggaa - Contact me off-list.

JANUARY 11, 2010

Does any of the passing of variables out from Connect work if you are using the Adobe Servers? I need to do something like this in order to update our proprietary LMS. I also have a major problem with how to get back from the server to my 3 regions (development, test & production) without hardcoding a Flash button (which is how I have been doing it in the past when I only had one region). I keep thinking something like the above might be my solution.

AUGUST 02, 2011

Andrew,

Is this still working with Captivate 5?

Thanks.

SEPTEMBER 01, 2011

soccermatrix,

This particular article and the example files are AS2-based. They won't work with Cativate 5. However, I do have updated components that are AS3-based (I just haven't published the articles, yet).

-Andrew

SEPTEMBER 13, 2011

Andrew,

I would be extremely interested in any work you've done on an AS3 version of this project. I am currently looking into using the aggregator to make an huge project (170 slides) work on the company computers (they can't handle it in one chunk.)

I'm hoping that you can update this tutorial soon so I can make use of it!

Thanks for your hard work! :-)

OCTOBER 24, 2011

Andrew, I have been tasked with creating a simple cookie-based "resume where you left off" feature for Adobe Presenter 7 modules. It seems in your note to Luis that your updated wrapper might help do this.

Is this so? Or is there a way to communicate with the presenter swf file with Javscript to simply instruct it to go to slide x?

Many thanks for any help

jon@jnh.at
Log in to leave comments


<< Back to Tutorials main menu.

?>