How to Show a different slide and its current “states” on rollover

I am attempting to use a smart shape rollover state, or even a standard rollover, on slide “A” to show slide “B” and its current state(s). Slide “B” needs to be visible on rollover in an area on Slide “A”.  (Slide “A” and “B” are in the same project).  It would be preferable to have all functionality available on the Slide “B” “projection” though not mandatory.

The purpose is to view “visited” states on Slide “B” within a smaller image area on Slide “A” so the participant can readily see what links from Slide “B” have or have not been visited.

My experimentation with Rollover Slidelets has been fruitless so far 			</div><!-- .entry-content -->
	<footer class=

Make A Blinking Light – While Loop

In this project, I thought I would try to create a blinking light – you know – because blinking lights have some sort of special place in my heart. 

Actually, I was trying to think of ways to utilize the WHILE capabilities of CP2017 and a blinking light is what came to mind.

Maybe someone could use it to make turn signals for a vehicle or something.

The working link is below – along with screenshots of the variable check and while loop advanced action setup.

As always – feel free to ask any questions that you may have.

The post Make A Blinking Light – While Loop appeared first on eLearning.

Listen only once to the narration – micro-navigation


In a previous post I explained the possible workflows to force the learner to view a slide completely before the Next button appears, but only on first visit. This new use case is similar but for another goal. Most courses will have narration explaining how to use the functionality of the course: how to navigate, how to use the TOC, how to pop up extra information, how to use a dashboard/dynamic menu etc.  When the learner is free to come back to those slides, it can be annoying if she/he has to listen to the audio again. To avoid this I will explain two possible workflows:

  1. Using the On Enter event to trigger an advanced action, which will use the Play Audio command based on checking which visit it is to the slide. It is an easy workflow, with one drawback: for the Play Audio command it is not possible to use the Closed Captioning feature packed with Captivate.
  2. Since Closed Captioning is only possible with Slide audio, this alternative workflow will use micro-navigation to jump to a frame after the end of the audio timeline. If you didn’t read my introduction to Micro-navigation, please use this link.

Both workflows can be watched in this interactive movie. Be sure to check out later visits by using the Back button. As explained in the previous post, we’ll need a tracking user variable. It starts with a default value of 0 and is incremented with each visit to the slide.

Workflow 1: Play Audio

For each slide where you want to use this action, you’ll need a tracking variable. For the slide in the movie where this action was used, the variable was labeled v_visit_PlayAudio. Look at the Preview of the action, which is triggered by the On Enter event of the slide:

It has two decisions:

  • TrackVar is not conditional, will increment the tracking variable (which started at 0).
  • CheckVisit checks the value of v_visit_playaudio. If the value is greater than 1, which means it is not the first visit, nothing will happen (Continue), if it is not greater than 1, which means the first visit, the audio clip will be played.

Workflow 2: Skip frames

Look at the timeline of the slide with the Touareg salt caravan (Ténéré desert):

The Next button appears at 16,5secs. If the visit is not the first, all frames in 16,5secs have to be skipped. We need a tracking variable, which will be labeled v_visit_SlideAudio. It is not possible to reuse the variable which tracked the visits to the previous slide where workflow 1 (Play Audio) was used. I suppose  free navigation is possible, hence tracking visits will need a variable for each slide where you want to use the workflow. However, the variable v_skip, which is used to store the number of frames to be skipped, can be reused for each slide where you want to use this second workflow. It doesn’t matter if you want to skip part of the slide to avoid an audio clip to be played the second time, or to avoid that animatios are playing the second time. As you see in this screenshot, the advanced action looks very similar to the one in the first post ‘Force first view’.

It is so similar that it was possible to create this action as a duplicate from the one in the post ‘First View’. If you are not familiar with duplicating an action, have a look at  Advanced Actions Dialog Box.


Such a situation with two (or maybe more) similar actions,  immediately triggers this question for me: can I make this easier, can I save time if using this action multiple times. Two possibilities:

  1. Change the advanced action so that the same action can be applied to both situations? There are two differences in the situations: the literal which is the duration in seconds to be skipped (was 10sec in the first post, 16,5sec in this timeline) Second difference is the tracking variable. For the literal a solution could be found, but that is not the case for the tracking variables because they have to be unique for each slide. This approach is not possible for the present situation.
  2. Convert the advanced action to a shared action, with as little parameters as possible. That would also make it much easier to transfer the action to future projects, and – as you learned from my webinar (see summary in this interactive movie) – due to the presence of the shared action in the Library, much easier to manage. How to do the conversion and use the shared action, will be the topic of my last post in this sequence.

The post Listen only once to the narration – micro-navigation appeared first on eLearning.

Force View of Slide on First Visit


The question appears often everywhere: how can I force the user to view the slide completely before the Next button appears; but when revisiting the slide the Next button should appear immediately. From a pedagogical point of view, I don’t think this will improve the efficiency of the learning, but that is off topc.

Please click and watch this movie: forcing view is used on the slide with the animated dices. The workflows for the audio slides will be explained in a future blog post.

I will explain the analysis before creating the necessary variables and advanced action.


Look at the timeline of the animated dices slide in the movie previously mentioned:

This particular slide is just an example. Each dice is animated, and the Next button (which is a shape button) appears after the last animation has finished, the learner is forced to watch everything that happens on this slide before getting control. We don’t want to put him/her throught the same ordeal when revisiting the slide. Here are some possible workflows:

  1. Create two Next buttons: the one at the end (visible at first visit) and another hidden button, with a timeline that starts from the start of the slide. That second button has to be made visible on second and later visits, whereas the first button will be hidden. Advantage: learner can watch the animations if he wants to, but also skip them by clicking the Next button.
    Problem: this will not be possible in responsive projects with Fluid boxes if you want the two buttons in exactly the same location. I have explained this workflow a while ago.
  2. One Next button, timed from the start of the slide. Use the On Enter event to check tf it is a first visit. If that is the case, hide the Next button, use the command ‘Delay Next Actions by….’ and enter the time that you want to keep the Next button invisible, then Show the Next button. This looks like a good workflow but you should avoid  the possibility  to pause the slide (like with the playbar or with an interactive object). The Delay command will never honor a pausing (look at my articles about the Timeline or watch this movie). If  you cannot figure out how to script this second solution, send me a note.
  3. Third workflow: on later visits jump directly to the start of the Next button’s timeline. That means that everything will be in place – make sure that you have timed the objects for the rest of the slide- and  that animations/effects will not be repeated. That is a use case for micro-navigation. If you did not read my introduction to Micronavigation, click this link. Since there is no stacking, this will also be possible in responsive projects developed with Fluid Boxes. Focus of this post is on this workflow. For use case of the screenshot, the jump should be to 10secs in the slide which is where the Next Button timeline.starts.

All workflows need to track if the learner visits the slide for the first time or not. That can be done by a user variable. We could use a Boolean, or a variable that is incremented with each visit. It is the increment approach that will be used here.

Advanced Action + Variables

The variable that will track the vistt is v_visit, with a default value of 0. It will be incremented with 1 on each visit. Evetually you can show the number of visits by inserting that variable in a text container.:

The time to jump is 10secs, has to be converted to frames. For that purpose we can use the system variable cpInfoFPS. We’ll use another variable v_skip to store the number of frames:

v_skip = 10 * cpInfoFPS

The advanced action will have two decisions, as you can see in this Preview:

In the first decision ‘Always‘ which is not conditional, the number of frames is calculated and the tracking variable v_visit is incremented. The second decision ‘JumpFrames‘ is conditional: if it is not the first visit, the playhead will jump as many frames ahead as calculated in v_skip. Since this action is triggered On Enter of the slide, the system variable cpInfoCurrentFrame corresponds with the first frame of the slide.


How will you manage if you have a lot of slides that need to get this ‘Forced view’ action?  What can be reused? Will you duplicate and edit the actions? What has to be edited? Look out for a future post where I’ll try to answer those questions and offer a time-saving solution.

The post Force View of Slide on First Visit appeared first on eLearning.

Variables and Conditional Actions – Some Encouragement

This is my attempt at encouraging you, if you are somewhat new to the whole designing with Captivate thing, to study and practice the use of variables and conditional actions. In my opinion, this is one of the hoops you’ll need to jump through to pass from a beginner to an intermediate to an advanced Captivate user.

Variables and conditional actions are an extremely powerful combination if you understand how they work and recognize that behaviors in your project can be made reliant on the values that one or more variables hold.

Understanding variables and conditional actions can truly unlock a new level for you and your projects. I honestly think the best thing for you is to dive in and play around with some ideas in a non-high-stakes sort of way.


Variables, by definition, are things that can change. So maybe think of variables as a basket that holds some value for you. Maybe it is the number ‘437’ or maybe it is the word ‘false’ or maybe it is the name ‘Peter’. As the learner interacts with your course, decisions they make will change the contents of your baskets. All you have to do is have a basket ready and make sure that Captivate knows when to place the different values into the baskets. To create a variable, select Project from the menu bar and then choose Variables…

Once you open the variable window, select  Add New on the right.

Then you will do one or more of the following…

  1. Give the variable a name
  2. Assign the variable default value
  3. Provide a description of what the variable is for
  4. Save

Really – only steps one and four are required.

Once you have saved your variable – you should see it in the list below.

Now that you have a variable, you can find ways to put a value into it.

Conditional Actions

This is where we tell Captivate what to do with the values in our baskets. In other words, IF a certain condition exists, (or does not exist), THEN perform the following…

To get at the heart of conditional actions, you have to pretty much be thinking in terms of “If this, then that” – cause and effect style. We do this in our everyday lives without giving it much thought but sometimes it can be a challenge to use this sort of thinking when it comes to choice dependencies or branching scenarios in Captivate. You have to be thinking ahead – if the learner does this, then this will happen. Actions have consequences.

Here are some everyday examples…

“If I flip the switch, then the light comes on.”
“The problem is 5×7. If I put the answer to the problem as 23, then I am wrong.”
“If I am right, then the teacher will give me a sticker.”
“If I am wrong, then the teacher will give me more homework.”
“If I pull out the pan in the oven, then I will burn my hand.”
“If I put on the protective mitt before I pull out the pan, then I will not burn my hand.”

We are pretty much doing the same thing when we design our conditional actions. We create variables to keep track of all the “If choices” that the learner makes. Then we create the resulting consequences based on that choice.
“If the learner selects ‘A’ – add 5 points.”
“If the learner selects ‘B’ – add 10 points.”

Sometimes a result is the consequence of many variables that come together just right. In these cases, the “If this, then that” statement becomes much more complicated. Consider this example…

IF all of your homework is done  AND  IF  the trash has been taken out  AND  IF  it is not past 7 o’clock  AND  IF  you eat all of your supper  THEN  we can go to the ice cream shop.

IF the learner selected difficulty level 1  AND IF  the learner selects ‘A’ – add 5 points.
IF the learner selected difficulty level 5  AND IF  the learner selects ‘A’ – add 1 point.

Perhaps the biggest challenge is role playing out all the possibilities. Maybe that is the easy part for you. In your case, maybe it is the setup in Captivate.
Mastery of variables and conditional actions can help you to achieve what you are looking for. To begin working on your actions, go to the Menu bar and select  Project – followed by  Advanced Actions…

Going through the actual setup is in-depth enough to warrant a post on its own.

Variable Checking

This is what can be the challenging part from a setup standpoint. When we want Captivate to make decisions between things based on our variables – I refer to this as a variable check. The more complicated the decision-making, the more important our sequence of operations becomes. You may have to have Captivate check multiple variables and the order in which they are checked becomes crucial to the success of the outcome you are looking for. If you are new to this, my advice is to start small and work your way up as you get more comfortable and feel more adventurous.

Working Sample

In my simple example, the participant will get to see a different shape on the right based on the selection that they make on the left. The result is determined all through the click of a single button to check the variable. The code on the button simply says “Hey! Take a look at the value of that variable over there and put up the shape that matches the value. If it is ‘1’, show an arrow. If it is ‘2’, show a circle. If it is ‘3’, show a triangle. If it is ‘4’, show a square. If it is ‘5’, show a pentagon. Thanks.”

It is sometimes very helpful to keep an eye on what your variables are doing. You will notice I have a box that displays the current value of the variable. You should see it change as you select one of the numbers on the left. I expanded the box so you could see the full text  –   $$varShape$$   –  that is the format used to display a variable. This is great for troubleshooting and determining if variables are being assigned the way that you expect them to. It can also help to label them by variable and perhaps advanced action that they are used in so you know right where to go to look for errors. I will typically delete or simply hide them when I am finished with the project.

**I noticed after uploading the published files that I had copied the 5 button to use as my troubleshooting window and neglected to uncheck the ‘use as button’… so when you hover it will show the text and if you click it will change to 5 – I did not bother to re-upload all my files because I didn’t want to go over my upload limit. LOL but it still works for what I wanted you to see.**

Hopefully this was some useful thinking for you. I am happy to entertain any questions that you have about this.

The post Variables and Conditional Actions – Some Encouragement appeared first on eLearning.

Check if TEB is empty (Where is Null?)


One of my most visited blog posts published 7 years ago (Captivate 5, 5.5)  is Where is Null?

Beware: the embedded movie is a SWF, you need a browser with enabled Flash Player to watch that movie. Everything worked fine for SWF output also in later versions. However it is now partially broken for HTML output in CP9 and CP2017. Several users contacted me to ask for a solution, hence the reason for this new post.

Use Case

The use case can be split up in two phases:

  1. Checking the entry in the Text Entry Boxes): user has to enter something, but it is not to be validated, cannot be empty. Because the way Captivate is treating the value of variables, you need to create an empty variable, which I use to label ‘v_null’. If the TEB field(s) is (are) empty, a warning should appear for the user.
    That part described in the old blog post is still valid!  For that reason I will restrict the explanation in this post to one TEB on the slide.
  2. Reactivating the Text Entry Boxes) to allow a new attempt for the learner. Once the Submit button is clicked the TEB is deactivated by default. It is this second part that is no longer functional in recent versions for HTML output.  Focus will be on this second part.

Example Movie

You can watch the example movie by clicking this link. In the near future it should be possible to embed interactive movies published with Captivate to HTML output in this community.


Workarounds for Reactivating TEB

I propose two workarounds: the first workaround uses the dummy slide as described for another use case in a recent post as Tip 2 (Reset Slide). Since you will re-enter the slide, you can use the On Enter event to restore the initial settings. The second workaround uses micronavigation, which was also used in the original setup. But in this case micronavigation will be not be used to move the playhead before the pausing point of the TEB, but to re-enter the slide.

Solution 1: Using Dummy slide

In the movie this solution is on slide 3, the dummy slide (duration 0,1sec) is slide 2. You see the slide numbers at the bottom in the movie. That is the biggest drawback of this solution, you will have extra slide(s). Three events are used on slide 3:

  • On Enter event triggers the advanced action EnterEmpty which resets the situation when re-entering the slide: clears the TEB associated variable v_MyName, hides a Group Gr_Retry (message + button) which will be shown when the TEB is empty and hides another group Gr_OK (message + Next button) which will be made visible when the TEB has an entry.
  • Success event of the TEB triggers the shared action Check_TEB which is also used in the second workflow. It has 3 parameters: the variable associated with the TEB, what (group or object) has to be shown when the TEB is empty, and what (group or object) has to be shown when the TEB variable has a value. In this case the two last parameters are groups: Gr_Retry and Gr_OK.
  • Success event of the Retry button has the simple action ‘Go to Previous Slide’.

Solution 2: Using micronavigation

You see this solution on slide 4. This solution needs one more user variable v_start to store the first frame number of the slide, using the On Enter event of the slide. The Retry button will use this number in combination with the system variable cpCmndGotoFrameAndResume to navigate the playhead to one of the last frames in the previous slide. This will avoid the creation of extra slides as with the first solution But the workflow is a little bit more complicated.  The used events and actions are now:

  • On Enter event triggers the advanced action EnterEmptyBis which resets the situation when re-entering the slide: clears the TEB associated variable v_myName, hides a Group Gr_RetryBis (message + button) which will be shown when the TEB is empty and hides a message  Tx_Welcome_20 (kept the generic name) which will be made visible when the TEB has an entry. It also defines the value of v_start with the current frame number, which will be the first frame of the slide.
  • Success event of the TEB triggers the shared action Check_TEB  used in the first workflow. It has 3 parameters: the variable associated with the TEB, what (group or object) has to be shown when the TEB is empty, and what (group or object) has to be shown when the TEB variable has a value. In this case third parameter is not a group but the message Tx_Welcome_20.
  • Success event of the Retry button triggers an advanced action RetryAct with two commands: clears the variable v_myName, and calculates the frame number that is 2 frames less than the start frame of the slide. I prefer 2 instead of 1 frame because there could be a small delay which makes v_start equal to the second frame number of the slide.


Drawback of both proposed workarounds, compared with the original solution (broken now) is possible flickering when the slide is re-entered. I have tried a lot of ideas to avoid that flickering which is an annoying issue since many versions (if my memory is correct since version 6): transitions (not slide transition which is unsupported for HTML output), Delay command, delay on timeline etc..

Drawback of the first workaround is that the total number of slides (cpInfoSlideCount) and the current slide number (cpInfoCurrentSlide) cannot be used directly to indicate slide progress due to the inserted dummy slides.

For the second workaround: if you want to apply this to multiple slides, it is possible to reuse the variable v_start which stores the first frame of each slide. If you use the shared action, the variable v_null is not defined as parameter. That means it will be automatically created when import or drag this action to the Library of a new project. As you probably know I am a big fan of shared actions. Maybe I will post some of my tricks to save time with shared actions. in a future post.

The post Check if TEB is empty (Where is Null?) appeared first on eLearning.

Advanced Action TEB issue with letters P and R when used as Literal If Statements

Hi Captivate gurus,

I’m building a crossword puzzle for one of our courses. I have it set up with a text box on top of each square where the user can add a letter, and I have an advanced action that changes the color of the box when the user clicks “Submit” – green for correct, red for incorrect. The action currently works for everything accept for the letters R and P. I imagine there must be some other item interfering with this, but I can’t figure it out.

An example of a working Advanced Action is:

  • If A1_G (the Variable of the text box) is equal to Literal G, change the state of A1_G_Space (the box) to Correct (green). Else change the state of A1_G_Space to Incorrect (red).

Meanwhile, the exact same Advanced Action for the letters P and R don’t work, as this example illustrates:

  • If A1_P (Variable of text box) is equal to Literal P, change the state of A1_P_Space (the box) to Correct (green). Else change the state of A1_P_Space to Incorrect (red).

The P and R boxes always show green, even if an incorrect answer is given. For some reason the Then statement is being activated every time. I imagine it has something to do with my naming conventions or a Captivate shortcut key, but I’ve tried multiple tweaks with no luck.

Any wisdom you can share would be appreciated!

The post Advanced Action TEB issue with letters P and R when used as Literal If Statements appeared first on eLearning.

Delay next’s how I used this handy action

I ‘m  always on the look out to try different actions and delay next action seemed a good one to try.  I’m currently creating a Food Safety course and I wanted to put sound to a roller shutter door opening I found a good one on You Tube and converted it into an mp4. So far so good. ed the sound in a button


I placed the sound in a button that had the action to go to the next slide with the shutter open, revealing the contents of a lorry,  but on preview realised that the sound was being superceded by the action.


I had a problem to solve (there’s probably a better workflow here, but it was my chance to use the delay action) The audio is just under 4 seconds. Iplaced the action in between the play audio and jump to slide actions and..voila. Sound effect plays before jumping to slide.

How would you use this action?


The post Delay next’s how I used this handy action appeared first on eLearning.