Dare to Share - part 1


Wondering about that title? It could be my motto: I'm not afraid to share whatever I discover about Captivate as faithful fans do know. Title is not about me, it has a different meaning. With some articles, this is the first one, I want to persuade you to give the new Shared actions a try. There is very little available about them, no tutorials, two recorded webinars (guilty about both), a presentation at Adobe Learning Summit in October 2013. Rare comments on the forums or in the discussion groups I'm attending daily are mostly negative: 'Too restricted', '... not useful at all'. Quotes like that remind me of similar negative attitude when advanced actions appeared in Captivate 4 (clunky interface), when I started blogging about them after their improvements in Captivate 5. Now most intermediate and advanced users do still complain about advanced actions but... they are used more and more!

Today I start with a small sequence of articles, to get you up and running with shared actions. I will also explain limitations (of course) and have my fingers crossed, hoping those limitations will be broken down by the Adobe team in future release(s).

Get your feet wet with Hide/Show 

The statements Hide and Show are perhaps the most used in advanced actions. And as you probably know, to avoid the play head being released when such a command is executed, you will often turn to a standard advanced action instead of a simple action. I explained this extensively in a previous post: Why Choose Standard over Simple Action in which you'll also find a link to a video on YouTube showing the work flow. First shared actions that you can put in your Library and use over and over again by importing that library as external library in any project. Here is the step by step work flow for the creation of a shared action that shows two 'items'. An item can be anything: 
  • a text container, an image, audio object or any other non-interactive object like a static widget/interaction
  • a button, click box, text entry box or any other interactive object (like some interactions, widgets)
  • a group of objects
I will explain the work flow for a shared action 'Show2' that Shows two 'items'. If you want to follow along, be sure to have at least two objects on a slide, that are initially hidden by unchecking the option 'Show in Output' in their Properties panel. And... it is easier when you label them

Step by step

  • Open Advanced Actions dialog box, you'll act like for creating a Standard action
  • You can add the Action Name now or later; we will not use this action as an advanced action. If you add the name Show2 you will be able to keep it when saving as shared action or change the name.

  • Create the two statements 
  •    Show Object1
       Show Object2
  • Press the button 'Save  As Shared Action' (see first image in Gallery

In the Shared actions dialog, give a Title, Description of the shared action, description of the parameters - the parameter name is not important (those are the present object names) but description is (second image in Gallery)

In the Advanced Actions dialog box, the shared action will appear in the dropdown list for the script templates (see third image, only script template that is always available is Blank)

The Shared action will also appear in the Folder Shared Actions in the Library (see fourth image: this shared action was already applied 4 times, if you didn't apply it, number 0 will appear for Usage).

Use case: Highlight boxes

Watch this example movie, click on the green arrow in the center:

As you could see in the fourth image of the Library for this one-slide movie, taken from a presentation I did for the Adobe Education Summit in Barcelona (2013) about Flipped Classes, I used only 3 shared actions:

Hide2 is used once for the close Highlight button that appears with each highlight box

Show2 is used 4 times, triggered by the 4 shape buttons (bubbles) to show a highlight box

Show2Hide1 is used 4 times by click boxes over the collaboration circle, to show the 4 bubbles

Try to create the three shared actions. In the next part I will explain how to use them to create this slide.


Let me know if you want to learn more about shared actions, their power and limitations. You can post a comment.

In the future, I plan to offer online training about advanced/shared actions. Let me know, by sending a note to the info@lilybiri.com) if you would like to participate.

New features in Captivate 7.01


Adobe just released an update to Captivate 7. There will be a lot of talk by the Mac-users because it will now again be functional on their updated 'Maverick' system. But there is a lot more added in this update. I was agreeably surprised to see some of my requested variables, commands and advanced action features added, and some lack of congruence in interactions solved as well. Sure, lot of other Captivate users will blog about their favorites, but what did you expect from me? Variables and Advanced Actions features of course :)


In Captivate 7 we got 3 new system variables:

  • cpInfoCurrentDateStringDDMMYYYY : allowed to show the date in the in Europe usual DD/MM/YYYY format

  • cpInfoCurrentLocaleDateString: shows the date respecting the Settings of the local machine, for me 'Zondag, 17 november 2013';
    this variable was not doing very well in the original 7-release but does now in 7.01

  • cpQuizInfoTotalUnansweredQuestions: returns number of unanswered questions in real Quiz only (not in Pretest)

In Captivate 7.01 4 new system variables are added, all in the Quizzing category:

  • cpInReviewMode: a boolean (0/1) that will be toggled from the default 0 to 1 when user gets in Review mode; this long awaited and begged for variable can be very useful for actions that will show previously hidden objects (text, audio,...) when a question slide is entered in Review mode; up till now this was only possible by creating a user variable for that purpose.

  • cpQuizInfoPreTestMaxScore: returns the maximum score that can be obtained in the Pretest. The system variable cpQuizInfoTotalQuizPoints (=cpQuizInfoTotalProjectPoints) stores the sum of the total scores in pretest and normal question slides (value you can also find in the Advanced Interaction); the default score slide will show the results for the normal question slides, this number has no system variable; now with the system variables for Pretest you can create a separate score slide for the Pretest as well.

  • cpQuizInfoPreTestTotalCorrectAnswers: stores the number or correct answers in the Pretest, whereas the variable cpQuizInfoTotalCorrectAnswers stores that number for the normal question slides.

  • cpQuizInfoPreTestTotalQuestions: returns the total number of Pretest questions. The system variable cpQuizInfoTotalQuestionsPerProject stores the sum of all the questions (pretest and normal), whereas the number on the default score slide shows the number of normal questions (which has no system variable equivalent).

Variable Usage button!

Long awaited: we finally have a Usage button in the Variables dialog box. It was added to the Advanced Actions a while ago as well. This makes it much easier to clean up unused variables. But there are still some limitations. If you select a variable and click on the Usage button, these situations can occur:

  1. The variable is used in actions, advanced actions, shared actions: those actions will appear in the Usage dialog as you can see on the first image in the Gallery.

  2. The variable is used in actions but also in Text Entry Boxes (even the generic ones), in Widgets, in Interactions: only the actions will appear, usage in TEB, Widgets/Interactions will not be mentioned.

  3. The variable is only used in Text Entry Boxes (even the generic ones), in Widgets, in Interactions: the Usage dialog will appear but will be blank.

  4. The variable is not used anywhere : the warning message 'The variable is not in use' will appear (second image)

Advanced Actions 

AA dialog box enhancements

Have a close look at the third image in the Gallery and you'll see that there are three new buttons under the Decisions labels, to the right of the already existing + and - buttons that allow to add/delete decisions:
  1. The first button looks like the Duplicate button that you'll also find for Advanced Actions (top right of the dialog box), indeed tooltip is 'Duplicate Decision'. I have so been begging for it since version 5, because it happens often that you have to create a whole bunch of similar decisions where only a few statements have to be edited. Up till now this was a pain: copy/paste the statements in IF, then copy/paste the statements in the THEN section, then copy/paste the statements in the ELSE section. Now one button click gives you a complete duplicate of condition+then+else sections.

  2. The two arrow buttons next to the Duplicate Decision 'Move Left'/'Move Right' can be used to rearrange decisions, another long awaited feature! You know that sequence of the decisions is very important in Captivate. And it happened a lot to me, that after having created a long action, I discovered that another sequence would have been better, or that I wanted to add a mimicked standard action at the beginning. Now this is possible with less work using those move arrow

Even more news: there is also a new black left arrow as first button in the top row with buttons in the Advanced Actions panel: tooltip reads 'Preview'. It will open a separate window that shows you all decisions (ELSE included) of your conditional action. That Preview button is not available for Standard actions, will be dimmed. 

A Preview example is visible as fourth image in the Gallery. The window size cannot be customized, will cover up the Advanced Actions window and has same size. When necessary a scroll bar appears and you are also able to collapse all or some parts of the action. Don't look for a Print button, not there. 

New statements/commands in actions

When publishing a table with statements (commands in simple actions) available in Captivate 6 I pointed out some discrepancy between the commands available in the dropdown lists for simple actions and the ones in the advanced actions dialog box.  Someone listened to me, and this has been repaired:
  • Increment/Decrement was only available for simple actions up till now, had to be replaced by an Expression in advanced actions; that is over, now there appear in advanced actions as well.

  • Pause/Exit are now ready as statements for advanced actions (although Exit working depends on more than CP alone)

  • Toggle is a new command/statement, and you can apply it to all Boolean variables (system and user); it is a shortcut to using the Expression 'var = 1 - var' (like cpCmndMute = 1 - cpCmndMute), a time saver.

  • Lock/Unlock TOC, Show/Hide TOC, Show/Hide Playbar are alternative commands/statements that may be easier to understand than using the Toggle or the Expression 

Reusing actions between projects

We have Shared actions, but the only way up till this patch was to Export them (as cpaa files) from the Library and to Import them in other projects. I'm a fan of External Libraries and now I'm happy to announce that you can also open an External Library and just drag the shared action in the Library of the present file, just as was the case with all other objects in an External Library. 

Moreover when you copy a slide, or an interactive object that has an advanced action attached, to another project... you'll not lose the action anymore. What do you think about that?  

Other features

You have to explore the new Swatches panel, allows you to create a custom palette or import an existing palette like the ones you can create with Kuler. There are lot of other enhancements, bug fixes but with this post I wanted to focus on those related with shared/advanced actions and variables. You can have a look at http://helpx.adobe.com/captivate/kb/captivate-7-patch.html for the complete list.

Blog after Posterous? - ClickClick


As you can see, I'm slowly moving my posts out of Posterous to a new 'haven'. Posthaven did a great job importing the blogs with not too much work left to me. It is still in beta, so not everything is styled as I want, and tags cannot be added yet. But the articles at least are safe now, will not disappear in the cloud with Posterous' death. In the future, articles will be accessible from my site, once I can manage to set it up to my wish. Due to the many reactions of Captivate users, I wanted first of all to have a solution for the blog articles. And I try to get them all available ASAP.


Since a while I get a lot of worried messages by all channels: on Adobe forums, by Linkedin, comment on this blog, mail... And they all ask the same question: what will happen to your blog when Posterous is closing down? I do find it a bit strange, that such a crisis situation leads to more contact with readers then normally. This blog seems to be useful to a quite a bunch of users. When I started, about 2,5 years ago, never imagined those articles would find their way to users all over the world. And they are useful to me as well: I spare a lot of time, just pointing to a post instead of having to repeat the same answers again and again on the user forums.

Must confess that I hesitate to search for another host. I really want to keep all rights on the content (which is not the case for a lot of blogging hosts), even though some rare readers feel they are entitled to 'take over' my ideas and propagate them as their own, without any reference. 'Since it is distributed for free, it is public, no need to point to the original author in that case' must be their way of thinking. Not very ethical, but that is only my personal opinion. 

For the moment, I do not have a final solution. I already concluded that I need to look for a non-free host in the future. Keep an eye on this blog, if I take a decision about another host, will post the link here.

If you are just plunging into advanced actions, keep on reading. I describe a rather simple use case, suited for novices in advanced actions. The only problem could be the expression 'Mimicked standard action' in the conditonal action Bt_Click. For more info about that, read this article.


I used this name for a small cptx-file, built as an example for yet another use case.:

'I am trying to use a button to toggle between 3 images. I created a variable, initially set to 0. The button triggers a conditional advanced action, where I check that variable, change it and show the next image. But it always shows the first image'

Screening the conditional action I detected that the user was trapped by the fact that in a conditional action, all decisions are always evaluated in sequence. Captivate will never stop evaluating when a correct condition has been reached, but goes on with the rest of the decisions and statements. 

Learning from mistakes is very efficient, here is a description of the original conditional action; the first image Image1 is originally visible:


  • IF var is equal to 0
  • Assign var with 1
  • Show Image2
  • Hide Image1


  • IF var is equal to 1
  • Assign var with 2
  • Show Image3
  • Hide Image2


  • IF var is equal to 2
  • Assign var with 0
  • Show Image1
  • Hide Image3

If you evaluate all decisions, you will indeed end up with always having Image1 to show up: first decision results in true, but variable is changed to 1. That means that the second decision is also true, and the variable is changed again. Ultimately the last decision will also be true because of that change, so Image 1 is shown again. 

Example movie

In this one slide movie I have a version of my answer to this use case. Here you will be toggling four images, and to make it a bit playful, when you have viewed all the photos, you can play a little game pressing the Guess-button.

If you want to see the entire movie, you'll have to download it from this link: ClickClickClick. Posterous is not supporting an interactive PDF. In the SWF embedded here, you'll not see the Hangman widget, not be able to play. The Guess button will appear, but is not able to show the interaction, sorry about that. Download the interactive pdf if you are curious about the Hangman interaction.

Slide objects - variable

On this unique slide you'll see from bottom to top on the Timeline:

  1. A group with 4 photos, labeled GrFoto; will be set to invisible on entering the slide
  2. The button BtClick that will let you toggle the images, visible and will trigger the conditional advanced action Bt_Click (it is possible to have the same name, if you define the button name before the name of the action)
  3. The button BtGuess, will be hidden on entering the slide. This button will trigger the standard advanced action Bt_Guess
  4. An instance of the Hangman interaction, initially invisible.

Only one variable was needed, v_click, with a default value of 0.

Advanced actions - events


This is a standard advanced action - triggered by the On Enter event. It will hide the group GrFoto, the button BtGuess and the interaction.


This conditional advanced action - triggered On Success by the button BtClick - has 5 decisions:

  1. Always: a mimicked standard action to increment the variable v_click and to hide the group with photos. I preferred to hide the group with this first decision to save time. It is only necessary to hide the previous shown image, but if you want to do that with an advanced action you need more statements. Because all statements are always executed, I can hide the group (same statement for each click) and afterwards show the appropriate image, depending on the click number. 
  2. Click1: checks if the variable is set to 1 (which will happen due to decision Always after the first click), and shows the first photo.
  3. Click2: similar to Click1, checks if v_click is set to 2 (after second click) and shows second photo in that case.
  4. Click3: similar to Click1, checks if v_click is set to 3 (after third click) and shows third photo in that case.
  5. Click4: has more statements than the other 3 conditions. It checks if v_click is set to 4, shows the fourth image. But because all photos now have been viewed, the button Bt_Guess is shown and v_click is reset to its initial value 0. The last statement allows the user to toggle the photos again if wanted. But the button Bt_Guess will remain visible all the time from now on.


Rather simple standard advanced action - triggered On Success by the button BtGuess. It will hide the photos GrFoto, and show the interaction that was hidden. Because the interaction is on top of the buttons, it is not necessary to hide those buttons, although if you are a perfectionist, you could hide them of course.

Learned something?

If you take time to compare the original conditional action with my proposal, you'll see how important the sequence of the decisions is, and the fact that CP never stops with evaluation when a correct condition is met. I did increment the variable with a mimicked standard action, not within the real conditional decisions. This means that the variable will not change when CP is executing all the statements. 

Some timesaver tips are concealed in the actions as well: grouping of the fotos will allow to show/hide them with one statement (see EnterSlide, Always in Bt_Click and Bt_Guess). 

Using the Expression statement to increment v_click (Always in Bt_Click) is more efficient, compared with conditions + Assign combinations.

As usual, please feel free to comment. This means a lot to me, will help me to decide about accepting the transfer work to another host.

Link score to attempts in Custom questions


This time a Flemish colleague asked me to help with a Quiz that is very close to my original profession: I'm a civil engineer and this Quiz was about introducting students to technical drawing techniques, more specific, interpretation of Isometric Projection. Back to my roots!

In a recent article I talked about 'Beating the system', trying to make advanced actions easy to manage, to avoid tracking endless numbers of variables by reusing them intelligently (Be a Captivate Ecologist). And of course, I use my favourite shape buttons, either on Master slide or timed for the rest of the project to avoid having a multitude of objects and actions. Last year I presented a webinar about that subject, you can find the recording link in this blog post

Use case description

In the example, which you can watch below, there are two types of custom questions:

  1. Student has to type in a number, after screening a drawing. Originally colleague used a Short Answer Question. This was replaced by a custom question, that uses a Text Entry Box. And for 6.1 users: I limited the entry to the box to numbers only. All questions except the last use this type.
  2. Student has to identify an element in the drawing by clicking on it. Originall a hotspot question, in the custom question I used a click box. This type is used here only in the last question.

For all questions 3 attempts were provided, but the obtained score depends on the attempt:

  1. Correct on first atttempt: score = 3 points
  2. Correct on second attempt: score = 2 points
  3. Correct on last attempt: score = 1 point

Even with the new quizzing features in Captivate 6 this is not possible out of the box. That is the reason why I choose for Custom questions. The score has not to be reported to a LMS, it is more of knowledge check, but the score will be shown to the student at the end.

Colleague also asked to make it possible (for one sequence of questions) for the student to click on a button to have some Help. In this case it was a one-slide Powerpoint animation. I converted the animation to SWF and used it that way.

Moreover colleague wanted to be able to change the passing score. It was quite a challenge but fun as well.


Play with this movie to have an idea about the result. I didn't change the used drawings, nor the imported animation. You'll have to answer 10 questions...

Slides - Master slides

I used the Blank theme, main master slide has a gradient background. For the questions I created 3 master slides, one for each drawing (because they can be used for all questions concerning that drawing).

The first sequence of questions has a Help button with a tooltip. Both button and tooltip are shapes on the master slide Quest1. The shape button navigates to slide 2, which is the Help-slide with the animation. The help-slide will not be visited before the questions, for that sake I configured the button on the Intro-slide to jump immediately to the 3rd slide, which is the first question slide.

On the Help-slide you have a similar duo of shapes: a button and a tooltip (rollover shape). The button gets the user back to Last Slide Visited, to the question slide from which he asked for help.

Objects Timed for Rest of Project

On the first question slide, a lot of objects are timed for the rest of the project because they are reused all the time. Because I needed to be able to control their visibility, they couldn't be put on the master slide. Here is a screenshot of the timeline of that slide, the Text Entry Box was selected and its Properties are visible as well (watch the associated variable v_answer):

From bottom to top you see these objects:

Group Question1: has a text Quest1 and the not to be validated TEBAnswer1. Those objects are timed for the rest of the slide. These objects are visible in output.

Group TxtContainers: with the three possible text containers TxtSuccess, TxtWrong and TxtRetry. Initially they are not visible. I grouped them because it is easier to hide them all together in an advanced action. Those objects are timed for the rest of the project since they can be reused on each question slide. This will also make it possible to use less advanced actions, since they keep always the same name, ID.

Group GrpNext: has a shape button NextBt and a text container TextClickNext; the goal of the text is not only to tell the user what to do, but also to cover up the TEB's, so that they cannot be clicked another time to get the same score again. Why did I choose this instead of disabling the TEB? To disable the TEB a separate advanced action would have been needed, since each TEB has a different name. Whereas my 'cover' workaround allows me to use the same advanced action for every TEB. This group is initially invisible, and timed for the rest of the project.

Total: the banner with the obtained score, visible and timed for the rest of the project.


Variable ecology

In this use case I didn't use any system variable, and also deleted all default variables associated with the multiple Text Entry Boxes (9 of them, one for each of the first 9 question slides). I ended up with using only 7 variables. To prove it, here is a screenshot of the variables dialog box:

v_PassScore: will store the minimum percentage required to pass; I assigned a value on entering the first slide, the intro slide, with a simple action. Remember that the colleague requested to be able to change the value.

v_answer: will store the value entered in the TEB's, and is reused on each slide. This means that you have to associate this variable to each TEB to replace the default variable that normally gets the same name as the TEB (Text_Entry_Box_n). A good check: try to delete those default variables in the variable dialog box:  if removing a variable is denied, that means that you forgot to replace it by v_answer. If you are using version 6.1, you can use 'More Options' in the General accordion to limit the entry to Numbers.

v_attempts: reused on each question slide with a default value of 3, will be decremented with each attempt and also serve as question score.

v_correct: will be reused on each question slide, and populated with the correct answer on entering that question slide

v_max: starts with value = 0, not really necessary, but for lazy mathematicians, will be populated with the maximum score that can be obtained. You could also replace it by a literal, a number...

v_perc: starts with value = 0, will be used only on entering the score slide to calculate the percentage based on v_score and v_max

v_score: starts with value = 0, will store the score obtained, and will be incremented after each correct answer, taking into account the number of attempts used for the answer.

Events and Advanced actions

On Enter Slide events

are used both for the Question slides and for the Score slide.
  • Question slides: used to reset and hide what is needed, to calculate the new value of v_max and (only for the TEB-slides) to populate the variable v_answer with the correct number for the TEB-based questions. Here is an example of such a standard advanced action (for the second Question slide). Only the first statement has to be adapted for each TEB-slide.

For the click box slide (hotspot), this action is little bit different, no need to populate v_answer, but the click box has to be enabled (labeled Spot1):

  • Score slide: here a conditional action is needed which has two decisions; the first (Always) will hide unnecessary objects that were displayed for the rest of the project, and will calculate the percentage to be stored in v_perc
    Second decision (Checkup) will check the percentage and show the appropriate group (text + banner) based on that checkup:


Success event for Text Entry Boxes  triggers 'NotValidated'

All TEB's, which are not validated and have only one attempt will trigger the same advanced action, the conditional action NotValidated that has three decisions. The sequence of the decisions is important!

  1. Fout (Dutch for 'Wrong'): this situation occurs when the student has tried to answer 3 times, and didn't succeed to give the correct answer. 

    The correct feedback will appear, the group with the Next button and the coverup text will be made visible and the answer is reset (not really necessary, will also be reset on entering the next slide).
  2. Opnieuw (Dutch for Retry): will occur if the user has already given at least once an incorrect answer but the attempts are not yet exhausted.
     Correct feedback is made visible, variable v_attempts is decremented and v_answer is reset to 0. The last statement is meant to rewind the playhead to appear again before the pausing point of the TEB in its active part so that the student can answer again (see post about micro-navigation)
  3. Correct: whenever the student gives a correct answer. 
    Besides showing the correct feedback and the group GrpNext, you see that I calculated the new score that is immediately shown in the Total shape. Because of the sequence, the number of attempts left at that moment is identical to the score left for the slide.

Success event for Click Box triggers HotspotCorrect

For the hotspot question, I used both the Success and the Failure events for the click box (Spot1). Success event triggers this standard action, that is similar to the last decision Correct in the TEB-action; but here I disabled the click box to avoid the user clicking on it again :

Failure event for Click Box triggers HotspotNOK

The other situations, covered by the two decisions Fout and Opnieuw in the conditional action for the TEB's are now done by this conditional action attached to the Failure event. It has two decisions (since the third is now done by the Success action):

  • Fout (Wrong): if attempts are exhausted and the answer is wrong; very similar to the decision that is labeled the same way for the TEB's, no answer has to be checked here, only the attempts.
  • Opnieuw (Retry): after an incorrect answer, when there is at least one attempt left:



Pretty long article, I'm sorry. But wanted to offer this use case because of the the way I reused both variables and advanced actions. If I had plunged in without any preparation (or with an old version of Captivate) this probably would have led to a multitude of variables and actions.

Would really appreciate any comment, feedback.


Events and (advanced) Actions


If you have been visiting this blog already, you are aware that I'm writing a lot about (advanced) actions because they allow to push Captivate to another level, to create more engaging eLearning assets. 

In previous posts I offered:

  • list with System variables essential in a lot of (advanced) actions
  • list with Statements, the commands you can use in an advanced action, and comparing them with the commands you find in the simple Actions accordion

When helping users who start with creating actions, I often see that novices in this domain are not always aware of the process needed to trigger an advanced action: each action, whether a simple or an advanced one has to be connected to an 'Event', and that is the subject of this article. At the end you'll find a link to a list, describing all the possible events, use cases and tips.

Events - out of the box

Most events that can trigger an action are linked with interactivity, something the user has to do. This is the case for Success/Failure events for (Shape) Buttons, Click Boxes, Text Entry boxes, interactive Widgets but also for Question slides. 

Less known are the actions that can be triggered when a Quiz is completed (Success/Failure).

Also even less known is that a Rollover slidelet has even two events: on Rollover, and on Click. For the events available out of the box with Captivate this is the only rollover available to trigger an action. The backdraw is that you rarely can use both events, because when you use the On Click event you necessarily have to do the rollover as well.

Events that are not linked with interactivity are the slide events: when entering or when exiting a slide, you can have an advanced action to be executed. But not all commands (statements) can be done by such an action (see list).

Often I get the question if an action can be triggered by time or by a frame, but that is not possible for the moment with Captivate. One example: the timer widget will show a popup when time is elapsed, but you cannot execute an action immediately at that point. I have been explaining this in an old article: Timer widget.

Widgets to extend events

Jim Leichliter, aka Captivatepro/CaptivateDev has a free widget for Time Based Actions.   It can be used in some cases, but not as easily as for an 'On Frame' event that is available in Flash for programmers.

InfoSemantics developed a widget that is one of my favourites: the Eventhandler Widget. It is not free but if you are plunging really into advanced actions, please try it out because it can add as many events as you want to any object.

Both widgets are not yet supported for HTML5 output.


You can download the list from this link. I created this table, along with other lists, to use them for the workshop Advanced Actions that I coached at DevLearn 2012. Really hope to be able to do more workshops of that kind, interaction with learners is something I really miss when blogging.

First column (Event) identifies the event, second column (Assign action) shows in which Properties panel (PI) you can indicate the action to be triggered, third column is A Description. When necessary you'll find some comment/use cases in the last column, which also mentions the possible limitations for the event. 

You'll find first a table with events that can trigger only one advanced action, and next a smaller table with those events that can trigger one out of two possible (advanced) actions based on a condition: validated TEB, question slides and Quiz.

I would appreciate if you left some comment in case you find this list useful. Combine it with the lists I mentioned at the beginning: system variables, and statements/commands.

Aggregating results TEB's in Captivate


This use case is an answer to this question on the user forum Aggregate the results of four text-entry-boxes on the same slide. I thought it to be a good illustration of one of my previous recommendations when preparing advanced actions: think about all possible situations. For that reason I'll explain two different scenarios. The example is created in Captivate 6 but can easily be transformed for 5 and 5.5. To make the rewind possible in the example, I used a third scenario that will not be explained. It is the most complicated one, because I couldn't use the system variable cpQuizInfoPointsscored in this case, that variable cannot be reset.


If you read the thread on the user forum, you'll know that four Text Entry Boxes are used to ask validated entries. Each TEB has its own Submit button, and the sequence is not imposed. The user can choose to have one or more TEB's blank, by just clicking on its Submit button. If you want to avoid blank entries, have a look at an old blog post where I explain the work flow to check  that: Where is Null

When all Submit buttons have been clicked, three situations are possible:

  1. a Success text and a button to the Next section if all 4 answers were correct
  2. a Hint text with a choice between two buttons: Review or Next
  3. e Failure text with only a Review button

The example has only 3 slides:

  1. 'Questions' with the 4 entry boxes and the initially hidden text containers and buttons
  2. 'ReviewSection'
  3. 'NextSection'

Play with it to see the different situations (use the Rewind button)

Here is the cheat sheet:

  • TEB1: Brussel, Brussels or Bruxelles
  • TEB2: Dutch or Nederlands
  • TEB3: 3 or three
  • TEB4: 8 or eight

Objects on Questions slide

In the example (Captivate 6) this slide has:

  • 4 TEB's with their associated variable (which I'll not use in the actions) and Submit button; the scenario to be chose depends on the number of attempts you chose here (Action accordion); I unchecked all captions in the Options dialog
  • 4 Questions (Text Captions)
  • Review button (used a shape from button category, added text to it): not visible, triggers simple action to jump to Review section
  • Next button: not visible, triggers simple action to jump to Next section
  • Three texts: Success, Hint, Failure (used shapes - added a character Sarah); not visible


Besides the variables associated with the TEB's, that will store the chosen answer, I created  5 user variables:

  • v_1, v_2, v_3, v_4 with an initial value of 0, will get the value 1 when the user has submitted that TEB; those variables are not necessary in the first scenario
  • v_total: initial value=0, will store the total number of TEB's that have been confirmed by their Submit button

Scenario 1

For this scenario the attempts for all the TEB's are set to 1.This means that the user can click only once on the Submit button, cannot change his mind.

Events and variables 

Each Text Entry Box has two events: On Success and LastAttempt. In this scenario it is possible to trigger the same advanced action TEBCheck by both events and for each TEB. 

I used the variable v_total to count the number of times the Submit button is clicked, each one will only once result in an action because the attempt is set to 1. 

To make it possible to check the number of correct answers, I checked 'Include in Quiz' in the Reporting accordion with score left to 1point. That way the system variable cpQuizInfoPointsscored can be used to check the number of correct answers.

Advanced Action (conditional) TEBCheck

This action has 4 decisions (see screenshots in Gallery) - ELSE is never used

  1. Always: is a mimicked standard action, to increment v_total
  2. TextCorrect: checks if both variables v_total AND cpQuizInfoPointsscored have the value 4 which means that all TEB's have been submitted and all answers were correct. Then the appropriate text and the Next button are made visible (I also had to make the actor SaraSmall visible)
  3. TextHint: checks if all TEB's have been submitted (v_total =4) AND if the score (cpQuizInfoPointsscored) equals 3. In that case the appropriate text, the Next and the Review will get visible
  4. TextFailure: checks if all TEB's have been submitted (v_total =4) AND if the score (cpQuizInfoPointsscored) is less than 3. The appropriate caption will get visible and the Review button

There is no need for ELSE, if none of the conditions is fulfilled the user can just go on submitting TEB's because in that case v_total is not yet equal to 4. Also there is no need to hide text/buttons because only one of the decisions can result in a positive answer, they are mutually exclusive.

Note: I wanted to keep this scenario as simple as possible, only one advanced action that is triggered by 8 events (Success, LastAttempt for each TEB). Real programmers could blame me for this, because for the LastAttempt, which is in reality a Failure event, the second decision TextCorrect can never be fulfilled! So for the purist: create two different advanced actions, and for the LastAttempt action you can delete the second decision, which results in 3 decisions for that action instead of 4 for the Success action I described here.

Scenario 2

If you want to allow more than one attempt the previous scenario would not work because the value of v_total is increased with each click on a Submit button. Example: if you allow 2 attempts for each TEB, the value of v_total would result in 4 if both attempts were used on two TEB's, and that is not what you want.

Events and variables

That is the reason for using the variables v_1....v_4 that will be set to 1 each time the Submit button is clicked for the corresponding TEB. And the counter v_total will not be created by incrementing, but by calculating the sum of the 4 variables v_1...v_4. That way the value can never exceed 4. 

Because the variable v_... depends on the TEB, now I'll need to create an advanced action for each TEB: CheckTEB1, CheckTEB2, CheckTEB3, CheckTEB4. For the lazy user: you can use this action both for the Success and LastAttempt event; for the purist: create a slightly different action for the LastAttempt event, in which you delete the second decision TextCorrect (see note in first scenario).

Advanced Actions (conditional) TEBCheck1 .... TEBCheck4

Those actions have the same 4 decisions as in the first scenario, even better, only the first decision (mimicked standard action) has to be changed. You have to assign the value 1 to the corresponding variable v_1.... v_4 and the variable v_total is calculated with 3 subsequent Expression statements. Remember: no functions like Sum are available, and you can use only one operator (+) in a statement, hence that sequence of Expressions.

Have a look at this Always decision for the first action TEBCheck1

Use the Duplicate function to create the similar actions TEBCheck2... 4. The only editing to be done is to change the variable highlighted in the screenshot! Nothing else has to be edited, but be sure to attach the correct action to the correct events.

"Beat the system" - save time creating Advanced Actions (Captivate)


Wondering about the title? I borrowed it from the answer of the user about my solution for her problem in this thread: http://forums.adobe.com/message/4859612#4859612 'Very brilliant way to beat the system, I am impressed...'

To create that solution, I followed my own instructions described in Look before you leap... and Be a Captivate ecologist. The user had created a solution, but it was taking so  much time to duplicate and edit the advanced actions, reason why she looked for help. 

The example in this post was created with Captivate 6, in which I again used a lot of shapes because of their unique possibilities. This is not possible in previous versions, so I'll explain the changes to be made to the example for versions 5/5.5. 

Look at the end of the post: for CP6-users I offer a template with the advanced actions, that can be easily customized (instructions included). 

I extended the solution so that it also includes an answer to a question that often pops up: conditional showing of a Next button when all information has been viewed. The simple solution where this condition is not required, is also available in the template. The user was hiding/showing the play bar for that purpose, but I choose to hide/show only a Next (shape) button. For previous versions, the version with the play bar will be easier.

User wanted to have the same work flow on a lot of slides: user has to click several buttons to show Text Captions, after having clicked all buttons. She had created advanced actions triggered by the buttons to achieve her goal, but the problem is that duplicating this for a lot of slides means a lot of work because the text captions have different content on each slide, so a unique ID was needed for each of them which means tiresome editing of the advanced actions pointing to those Text Captions.


Have a look at this movie. It has only 4 content slides after the introduction slide. each of them has 4 buttons, that will show a Text container. The content of the containers is different on each slide. The Next button, that is also on the Intro-slide will only appear when all Text has been viewed.  The text container at the bottom shows the number of the content slide and doubles as a button to hide all text. The last slide has some tips for those who get the template (Captivate 6 only).

Captivate 6 solution

Slides - objects

  1. Slide Intro has a shape button BtNext, displayed for the rest of the project, placed on top and pausing at 2 seconds. 
  2. Slide Content1 has a lot of shapes, all are displayed for the rest of the project and all placed on top; look at the screenshot of that slide with the Timeline and you'll see from top to bottom:
    • BtnsGrp: object group with 4 shape buttons (Btn_One, Btn_Two, Btn_Three, Btn_Four), configured as buttons and pausing at 1,5secs each. Those buttons will trigger an advanced action that has not to be edited depending on the slide, thus allowing the Display for rest of Project tming.
    • Bt_HideAll, a shape button that shows the text 'Slide x' and is also configured as a button to trigger a simple advanced action that hides all text captions. This shape button ihas no pause, is displayed for the rest of the project, same action triggered on each content slide.
    • CaptionsGrp: object group with 4 shapes (TC_1, TC_2, TC_3,TC_4) used as Text containers. As you see they show only a variable, which allows me to display them as well for the rest of the project. The content will change if the value of the variable is changed. That is the 'trick'.
  3. Slides Content2...Content4 have no objects at all.
  4. Slide End has an Interaction (Accordion)


Be careful when creating the Text Containers TC_1... to make them big enough to show the largest text you'll have to put in, and when inserting the variable to change its length (default value = 15) so that it will show all the text


Events - triggers

Content slides: On Enter for those slides will trigger an advanced action Enter_Connectx (where x is the number of the content slide). The primary goal of that action is to populate the variables shown in the text contaners TC_n.  It will also hide some objects. The template has an alternative if you do not need that condition for the next button, and the alternative action is EnterConnectx . Those actions are different for each content slide. 

End slide:  On Enter will trigger the action EnterEnd that will hide all the objects that were displayed on the content slides and the Next button.

Bt_One, Bt_Two, Bt_Three, Bt_Four: On Success will trigger advanced actions Show_One, Show_Two, Show_Three, Show_Four. The template has also the alternatives ShowOne, ShowTwo, ShowThree, ShowFour if you do not need the condition for the Next button to appear only after having viewed all text.

BtHideAll: will trigger a standard advanced action that hides all text containers.


I created these user variables:

  • v_slide will store the content slide number that is displayed in the shape button BtHideAll; default value = 0 but I reinitialized it to 1 on the Content1 slide as well (in case user gets back to that slide)
  • v_one, v_two, v_three, v_four: variables that will contain the text for the corresponding text containers TC_1, TC_2, TC_3 and TC_4; default value=0
  • v_show1, v_show2, v_show3, v_show4: with default value 0 will be used to track if a text container has been viewed because then they'll get the value 1 (toggle)

No system variables were used in this case.

Advanced actions

Enter_Content1: a standard advanced action, triggered on entering the first content slide. It is different from the other content slides, because I assign the value 1 to the variable v_slide. The screenshot is self-explanatory: re-initialisation of the variables v_show1...4 that are reused on each slide, hiding the Next button and Captions, initialising v_slide.  The cumbersome part is assigining the text to the variables. I suggest to put the text in a text caption off stage and use copy/paste. 

Enter_Content2, ....and all subsequent content slides trigger a similar advanced action as the first content slide with the exception of the v_slide assignment that is replaced by incrementing v_slide using the Expresison statement.

EnterEnd: standard action that hides a lot of objects

HideAllCaptions: very simple standard advanced action:

Show_One and similar actions Show_Two... Show_Four

This is a conditional action with two decisions:

  1. Always: a mimicked standard action that will show the appropriate Text Container, hide the other text containers and toggle the variable v_show1
  2. Next? is the real condition, checking the values of the toggles v_show1....v_show2 and showing the Next button when all have been set to 1. You do not need Else actions.

Captivate 5/5.5 solution

You can create the same solution in those versions, with those changes:

  • You do not have object groups, so some actions will have a lot more statements because you have to hide each object by a separate statement
  • On first content slide, replace the Text Containers by Text Captions that can also be displayed for the rest of the project and placed on top.
  • On first content slide, replace the shape button BtHideAll by two objects:
    • a text caption including the variable v_slide, displayed for the rest of the project and on top
    • a click box on top of that text caption that triggers the action HideAllCaptions; that click box cannot be displayed for the rest of the project but you can copy it and paste it to all subsequent content slides in one action. since it will always trigger the same action
  • On first content slide, replace the shape buttons Bt_One... by simple buttons. Again, they cannot be displayed for the rest of the project but they will always trigger the same advanced action. So, use the same copy/paste work flow as described for the previous click box.


Template (Captivate 6)

No link to a template, sorry. Although I like blogging and sharing, I dislike the lack of communication using this blog medium. Please, if you want me to send you the template in person, you'll have to contact me and provide an e-mail address. Either you try to reach me on Twitter (will follow you so that a DM with address is possible) or you use a private message on the user forums for Captivate. Would love to hear the reason of your request...

Limit Review to Incorrect Answers (Captivate 6)

Update: you can find a new version, HTML compatible and using newer features in this post=µ:


Because this question "While in Review Quiz process, is it possible to review only the slides which have been answered incorrectly?" popped up already multiple times on the user forums, I thought it could be interesting to create an easy solution. The solution will not work with random question slides, because the On Enter Slide event is not available for such slides. 


Play this movie to see the result. It has 5 question slides of different types, some with partial scoring, most with penalties. Only one attempt on Question level but two attempts are allowed on Quiz level. I dragged the Review button under the Retake button on the Score slide, to avoid confusion After the second attempt you can click the Review button on the Score slide, and only the questions that have been answered incorrectly will be visible, the correctly answered questions are skipped automatically.

Slides and events

The movie has 8 slides: Title, Instruction, 5 Question slides and the Score slide. Here is a screenshot of the Advanced Interaction panel (F9):

In this panel you see that I used the Success and Failure events of the Question slides, they always trigger the same advanced action Questx, where is x is the number of the Question. I also used the On Enter events for the Question slides and for the Score slide.



In the actions I will use the system variable cpQuizInfoLastSlidePointScored that stores the score of the last Question slide, immediately after the two-step process to submit the answer. Because this variable is reused for every question, I have to copy its value to a user variable for each slide. For this purpose I created as many user variables as the number of questions, labeled:

v_quest1, v_quest2, .... v_quest5 with a default value of 0

Too bad that we do not have a system variable that indicates when the user enters Review mode. So I created another user variable, a boolean that has an initial value of 0 but will get the value 1 when in Review mode.

v_review boolean (0,1)

To check this mode I will use the system variable cpQuizInfoAttempts. This variable stores the number of the present attempt on Quiz level when the first question of that attempt is started. But I will check only on entering the score slide (see Advanced Actions, EnterScore).


Advanced actions

Quest1, Quest2, Quest3, Quest4, Quest5 (standard advanced actions)

Those actions are triggered both by the Success and Last Attempt events for the corresponding question slide. They have only two statements:

  1. will store the value of cpQuizInfoLastSlidePointScored in a user variable; this variable is the only word to be edited in the duplicates 
  2. because a standard action is not releasing the play head, I preferred to add the statement 'Go to Next Slide' over 'Continue' to avoid waiting time for the user

You see two screenshots: the action accordion of the Quiz Properties panel for question slide 2 and the advanced action Quest2.

EnterQ1, EnterQ2, EnterQ3, EnterQ4, EnterQ5 (conditional advanced actions)

These are triggered by the On Slide Enter event for each Question slide. The condition (IF) to be checked is an AND combination of two:

  1. Is the user in Review mode? This is done by checking the value of the variable v_review.
  2. Has the user a positive score for this question? Done by checking the value of the corresponding variable v_questx (where x = number of the question). Since some questions have partial scoring, and there are also penalties, this doesn't mean that the question was answered totally correct. If you want to skip only for totally correct answers, you have to change this second condition, asking if the score was equal to the maximum score for that question (cpQuizInfoPointsPerQuestionSlide stores that information, so the condition would then be: IF v_quest(x) is equal to cpQuizInfoPointsPerQuestionSlide). 

If both conditions result in True, the slide will be skipped ('Go to Next Slide'), else the play head just continues. Here the screenshots for the second question slide:

EnterScore (conditional advanced action)

This action is triggered on entering the Score slide and will store the value 1 in the user variable v_review when the last Quiz attempt has been taken.  At that moment the system variable cpQuizInfoAttempts will be equal to the maximum number of attempts. There is no system variable for that maximum number, so you'll have to check it and type it in as a 'literal' in the condition. 

Here is a screenshot of that action, only the IF/Then part. For Else a simple Continue statement is OK. You'll see I have also a second decision, used to show the correct feedback on the score slide. As I mentioned before, I'm a bit embarrassed by the fact that the default feedback message shifts always to Times New Roman font. So I replaced it by showing/hiding a smart shape used as text container. 


The proposed work flow can also be used for versions 5 and 5.5. The actions are rather simple, and the only cumbersome work is the duplication, editing (although limited always to changing one variable name) and attribution to the correct event. One could create a template to avoid having to recreate at least one original action and variable. 

Statements (Advanced Actions) in Captivate 6 (list)


Recently at DevLearn 2012 I coached some Captivate users for Advanced actions in a preconf workshop. Besides a cookbook, which I will not publish publicly, I also offered them a table describing all available statements in the Advanced Actions dialog box. The list with system variables has been explained in a previous article, with a link for a free download of that list. This post will describe the Statements list that you will also be able to download for free at the end.


The list with statements has 4 columns

  • Statement: as it appears in the dropdown list of the first column in advanced actions, I used the same sequence as provided there.  Sometimes statements will be greyed out in the list because they are not available in that situation.
  • Explanation: trying to explain what exactly is the meaning of the statement

  • Comments: has more explanation, warnings and tips about the statement

  • Simple action?: shows if the statement is also available as simple action in the action accordion for an event; some are only available for certain events, which explains the subdivision of this column in:
    • On Enter (slide event)
    • On Exit (slide event)
    • Object (Success or Last Attempt for an interactive object)

I added a small table on page 2 with actions that are only available as simple actions, and not in the dropdown list for advanced actions. If you do not understand the comment about 'No action' (last line), please watch this video about the difference between a simple and an advanced action.


I posted the pdf on acrobat.com; use this link  to download your free copy. Would love to see your comments.

Buttons on Question/Score Slides in Captivate 6?


On Thursday 4th of October I presented a webinar about my favourite new feature in version 6: shapes used as buttons. In this blog you could already read how to use those shape buttons on Master slides or timed for the rest of the project. Using them on question slides is a bit more tricky as I explained in the webinar. Question slides are always like difficult kids to handle, and this didn't change with regard to shape buttons. 

Individual Shape button

Inserting a shape on an individual question slide is not a problem, and there is no limltiation: you can even insert a button from the Buttons category (that is already converted to a button and has an action attached to it).

Some tips:

  • Be careful if you provide a pausing point for the shape button. A question slide has its pausing point by default at half its duration. This pause will be released after the second step in the submitting process (1st = Submit, 2nd = Y or click on slide). If the shape button pauses before the Question slide pause, clicking on it to do something (like showing a text caption, an image, playing audio) will not be possible after the second step of the submitting process is completed. If you have the shape button pausing after the question slide pause, the playhead will stop at that pausing point after the submit/Y process has been done which could confuse the user.
  • If the objects that pop up when clicking the shape button do cover up the question, do not forget to provide a possibility to hide them again, either with the same or with another button.
  • It will probably be necessary to reset everything when returning to the slide (if this could happen, perhaps for a second Quiz attempt or Review). You can use the On Enter event of the slide for that purpose.
  • It can be annoying to select an object on a Question slide that is not one of the native Question slide objects that have always priority. It is much easier to select them in the Timeline than on stage.

Shape buttons for multiple question slides

As you know from previous blog posts, the real power of shape buttons is that they can be used on master slides or timed for the rest of the project so that they can be used on multiple slides without having to copy/paste and to edit all (advanced) actions because the ID's of objects change on each slide. But here there are some problems for using those work flows on question slides as I discovered. Here is the history of my exploration, if you want to skip immediately to the example and how it was created, feel free:

  1. If you check the Timing dropdown list for a shape button on a question slide you'll see that the option 'Show for rest of project' is NOT available.Difficult kid.... you know :-) This means that the work flow where you extend the life of a shape button on a first question slide to all question slides is impossible.
  2. However it is possible to put a shape button on a Question master slide (you have to put them on all the master slides that you need for the questions). This work flow remains possible but has its restrictions: the shape button has no ID which means that it cannot be hidden/shown on discrete slides, it cannot be timed, and if you choose a pause (not to be recommended in this case) it will always be at the end of the slide. 

  3. When opening the dropdown list for the actions in the Action accordion, you'll have a new surprise: some options are dimmed, not available. You cannot show/hide anything, nor apply an effect. It is logical that Disable/Enable are dimmed as well, because none of the question slide objects can be controlled, and a shape button itself cannot be enabled/disabled. It is the only interactive object allowed on a question slide.
  4. But when you choose 'Execute Advanced Actions' and open the dialog box, you'll have another surprise: here the three actions banned from the simple actions list are available. That is a relief, isn't it? But weird...

  5. So I tried out an example - you'll see it in the movie. I wanted to offer the user a shape button that would pop up a text container (shape) showing the value of the present question slide (points attributed to it) and the score obtained until that question. For both data there is a system variable: cpQuizInfoPointsPerQuestionSlide and cpQuizInfoPointsscored. So this text container can be the same for every Question slide. The way to go is to create that Text container, display it for the rest of the project. That way it has a unique ID and can be popped up with the same advanced action on each question slide. Bummer, new surprise: you cannot time any object on a question slide, not even a text container, for the rest of the project. Why do I not use a simple text caption? A text caption can indeed be timed for the rest of the project, but.... as most objects on an Question slide it will always been stacked under the default Question slide objects like answers. And I want the popup message to be on top. And yes, this is indeed only possible with shapes used as text containers!

  6. "Never give up", trying to find a workaround. I put the text container shape on the slide before the first question slide (it is hidden anyway at the start), and.... it shows up on each question slide. So issue solved, kid (question slide) is 'tamed' by Lilybiri :-).

  7. Now up to the score slide, want to replace the review message by something that the user can pop up by clicking on a button. Trying to add a shape button to the score slide, and that is possible! I can add a rollover smart shape as tooltip without any problems. Now I add some hidden text container shapes, and I can use the Arrange menu to pull them to the front of the stack. Great! Created an advanced action to pop up the right text based on the Quiz result, works fine. But... the text containers will be behind the score text captions, another disappointment because I was able to use the Arrange menu. I also tried out to put the shape button with the action on the master slide used for the score slide, but same result: no way to get my text containers on top of the default text of the score slide. The simplest solution would be to create your own score slide, using the quizzing system variables of course.

Example movie

Watch this example: each question slide (3) has an Information button, toggling a text shape on/off. You'll read there the number of points attributed to the present question and the total score obtained so far. There is a button on the score slide (with tooltip) to show a review message.


Slide 1 (Title): has the text bubble QstInfo, that is invisible, timed for the rest of the project and put on top:

Master slides for Questions (here MCQ and Hot Spot) have a shape button (used the 'i' button from the buttons category) top right, that triggers an advanced action Quest_Info. The button doesn't pause. 

First Question slide (Q1) has a line shape StopLine that will be used to create the toggle aspect. It is timed for the rest of the project as well and placed on top like the Text bubble QstInfo on the first page.

Score slide: I deleted the review messages in Quiz, Settings, Quiz Result Messages and tucked the Review placeholder out of the way. I added a shape button InfoBt (from the buttons category as well) with another rollover shape as tooltip. Created two shapes with image and text that are initially invisible: OKReview and NotOKReview. The shape button InfoBt triggers a conditional advanced action Review

Advanced Actions

Quest_Info triggered by the shape button on the question Master slides is a conditional advanced action with one decision. To create the toggle aspect I used the approach explained in Toggle Shape Buttons - scenario 3, which needs a user variable v_visib. The more elegant scenario 4 from that article is impossible because the button is on a master slide.

Review is triggered by a shape button on the Score slide. It is again a conditional action with one decision, and self-explaining:


I hope that my struggle with the 'difficult' question slides will have led to some tips that could be useful for you. Again, shapes prove to be a game changer, even though there are still some unexplainable quirks. I'm waiting for your comments.