One Submit button for Multiple Text Entry Boxes?


Yesterday I published an article explaining in detail a use case that I worked out, based on the question of someone on the Captivate forums. Here is a link to the thread, because I think it is an interesting 'conversation'; this article is not an answer to the original question, so please scroll down in the long thread:


She wanted to create a slide with multiple Text Entry Boxes to be filled in by the user. The entry should be validated and only one correct entry possible, with multiple attempts allowed. But the sequence of the fields was to be chosen by the user, not imposed. And the use should be able to check at any moment if his entries were correct/incorrect, by using a unique Submit button. Only after having all entries correct, a button Continue should appear. If possible, the shortcut key TAB could be used to navigate between the text fields, as well as clicking in the text fields to start input.


You will be able to watch the result. But I did simplify a little bit:

  • I worked it out for only three Text Entry Boxes on the slide, but it can easily be extended to more of course.

  • The user can choose the sequence, but he has to click in the text field. Only then the sequence is not imposed. The principal reason is however that it is not possible to assign the same shortcut key to different objects on one slide as I explained in this blog post: Warning tip: shortcut keys. You cannot use TAB twice or more on the same slide as shortcut key.

  • There is a unique Submit button. The user can click it whenever he wants: after filling in 1, 2 or 3 Text Entry Boxes to get feedback.

  • I choose a symbol (correct/incorrect) as feedback. Those symbols can easily be replaced by Text Captions if wanted, work flow will be the same.

  • After validation of the three entries, a second button Continue appears that triggers (in my example) the action 'Go to Next slide'. But of course it is possible to trigger another action.

Published SWF

Watch this movie to check the functionality. It has 3 slides. On the Welcome slide you will find the correct entries for the Text Entry Boxes on the second slide. Try out the second slide: fill in text fields, click the Submit button to check input. Whenever a Text Entry box is validated, it will be disabled, you cannot change the entry anymore. When all entries are correct the Continue button appears that gets you to the last slide.
There is an extra button on the slide 'Show/Hide'. It is a copy of the toggle button, explained in a previous blog post, that will show/hide a text caption with the values of different user variables. This will normally not be done, but it shows how I do a debugging of an advanced actions by observing the way user variables are reacting to actions on the slide.


De tailed explanation of my work flow, for the user variables and advanced actions can be found in this article:
Multiple TEB's - one Submit
You will see, as a reaction to one of the last questions,that I created user variables to store the correct entries. That way the advanced action will be more easily be reused in other projects. My work flow, to save time and avoid typos was:
  • define the user variable and add the value (= correct entry)

  • copy the value to the clipboard

  • define the Text Entry Box, and paste the clipboard content as entry to be validated in the HUD

Toggle button


In this blog posting To blog or not to blog (scroll to the end of the text please) I offered a tip to create a toggle button to turn on/off audio, playbar etc. This tip works only if a Boolean type system variable is available. Such a variable has in Captivate only two possible values: 1 (= true, yes) and 0 (= false, no).

Yesterday got this question on the user forum: How can I create a toggle button to show/hide a text caption? And I thought offering my answer in a blog post could be useful for other users. Moreover, I remember when starting this blog that it was meant to offer small tips, but now I see that a lot of my postings are not small at all :-)


To realize such a toggle, I transformed the forementioned tip a little bit. Since there is no system variable that stores the visibility of an object like a Text Caption I started by creating a user variable that would take over that role. Like the system variables (examples like cpCmndShowPlaybar,cpCmndCC, cpCmndMute) this user variable should store the value 1 when the object is visible or 0 when it is invisible. I labeled this variable  v_visib.


Advanced action

The advanced action to be triggered by the toggle button is a conditional action with one decision. In the Image Gallery you'll find the script for this action, labeled Toggle.

Condition is simple: check the value of v_visib


v_visib is equal to 1

If this condition results in a positive answer, this means that the object (here the tekst caption labeled MyTC) is visible. It has to be made invisible (using the Hide command). Then you have to change the value of the user variable v_visib to 0. This can be done with a Assign command, but I used the same Expression as in the previous blog post about toggle, because it saves me some time: the scripts for THEN and ELSE are now identical with the exception of the first statement.  To avoid that the playhead moves on after releasing the pause of the button I rewind the playhead using the system variables rdcmndGotoFrame and rdinfoCurrentFrame.  






v_vsib = 1 - v_visib



rdcmndGotoFrame with rdinfoCurrentFrame

If this condition results in a negative answer, this means that the object (here the tekst caption labeled MyTC) is invisible. It has to be made visible (using the Show command). Then you have to change the value of the user variable v_visib to 1. To avoid that the playhead moves on after releasing the pause of the button I rewind the playhead using the system variables rdcmndGotoFrame and rdinfoCurrentFrame






v_vsib = 1 - v_visib



rdcmndGotoFrame with rdinfoCurrentFrame


More ideas

  • This toggle is not limited to show/hide captions only of course, you can use it for any object and even for more objects, edit first statement and/or add similar ones.
  • You can use a similar script for Enable/Disable too.
  • Pity that it is not possible yet to export/import small scripts like this example. However you can add the script to a template. That is a way to be able to reuse the script and not have to create it all the time.

Tiny Timeline Tidbits


No one can doubt about the importance of the timeline panel in Captivate projects, but from frequent questions during webinars and on the forum, it seems that not all aspects, functionality are that well known. With this posting I want to explain a little bit and offer personal tips. Screenshots are from Captivate 5 but a lot  is also valid for version 4.

Timelines in Captivate  (illustrated by Image Gallery)

Captivate has different kind of timelines:
  • Slide timeline, which is really the timeline for the background of the slide: Question slides (including Score slide) and Full Motion Recording slides (when created by Captivate during capturing) by default have only this timeline, although you can add objects later on.
    Have a look at image 1 (SingleTimelines) that shows a FMR, a Question slide and a Score slide. All other images have the slide timeline at the bottom of the stack (example in image 2: Normal).
  • Audio timeline: if there is audio on the slide it will have its own timeline, and this will be under the slide timeline; audio attached to an object has not an individual timeline, you have to look for a small audio-icon next to the object.
    An audio timeline (and audio attached to an object, in this case TEBChoice) is visible in image 3 (EffectsAudio)
  • Object timeline: on most slides you will have objects on the background, each object has its own timeline and the location in the stack defines the priority (Arrange command or dragging allows you to change which object will be in front). Have a look at the object timelines in image 2 (Normal) and watch the color code and information on those object timelines.
  • Effects timeline (only in CP5) is visible in image 3 (AudioEffects); duration of this timeline is synchronized with the duration of the object timeline. 
  • Slidelet timeline: a rollover slidelet has its own timeline as you can see in image 4 (SlideSlidelet)
  • Pro ject created from a Powerpoint-Presentation, before adding any object will have typically one of the timelines you'll see in the image 5: if you choose to use 'Automatically advance' on creation, you will have a slide timeline with a duration that is taken from Powerpoint. This is really a FMR-timeline, because animation will be included, but the typical red bar doesn't show up here. If you choose to use 'On Mouse Click', there will be a click box inserted at the end of the slide (0,3sec before end) that pauses at the end of the slide. If you want to have the possibility to click earlier, change the start time of this click box. Both typical timelines are visible in image 5 (PPTImport).
There are also timelines in the Audio and Video edting dialog boxes.

Color code of timelines

Yellow = mouse object  (not in CP6 it is more 'beige')  
Grey = slide background, audio
Blue = if no action from user necessary: Text Caption, Highlight box, Drawing object, Text Animation, Animation , Video
Green = when action from user: Zoom Area, Rollover Text/Image, Rollover slidelet, Click box, Button, Text Entry Box

In CP6: selected timeline will be dark blue. Groups of objects are light grey.

Tiny buttons and symbols

 The timeline panel has a lot of tiny buttons/symbols. Watch this Captivate-SWF where I try to explain the functionalities of those buttons.

Hiding is not always hiding?

On the timeline by clicking on the dot under the Hide and the Lock heading you can hide or lock. I had to answer different questions like 'Why should you hide/lock something on the stage? What are the consequences? What is the difference with desetting the visibility for an object ?

Lock is easy to explain: if you lock a slide, you cannot edit anything on that slide, no moving, no resizing no adding/deleting/editing objects.
If you lock an object: you cannot select, duplicate, move, resize, edit nor delete that object. This feature is useful when editing slide to avoid accidentally editing.
Locking slides/objects has no consequences whatever on your published SWF, no need to unlock before publishing.

Hide is a different 'beast':
  • If you hide a slide (click the Hide dot on the level of the slide Timeline) it will not be visible when previewing, not when published. It has the same effect as using Hide Slide from the right-click menu on the slide in the filmstrip or the stage. Shortcut is SHIFT-CTRL-H. In all the cases an 'eye' icon will appear in the filmstrip under the hidden slide.
  • If you hide an object by clicking on the Hide dot on the level of the object timeline, the object becomes invisible on the stage but not in the filmstrip. Moreover: when previewing or after publishing to SWF you will see this object. This 'Hide'-action is totally different from setting the visibility of the object to false. It is meant only to make selecting and editing of objects on a complicated slide easier. If you have such a slide there will be a lot of timelines and it is not easy to select an object that is under other objects in the stacking order of those timelines. You can always select the object on the timeline, or you can hide objects that are on top of other objects. One example: you have a click box on top of the timeline that covers up all the slide, you will not be able to select any other object on the stage in that case.  No need to unhide those objects before publishing normally, except when you want output to a Word-document: hidden objects will not be printed. That can be welcome if you want to hide some success/failure captions on the printed output.

Shortcut keys

Perhaps you know already that love using shortcut keys. And the timeline panel has a lot of them.

Zooming : In CP4 you could zoom in/out on the timeline using CTRL-mousewheel but that is no longer possible in CP5.  In CP4 there was also a menu (loupe icon with several settings) to change the zoom of the timeline, this is gone in CP5 too. You have to use the slider at the bottom of the Timeline panel in CP5. But for exact timing the timing part in the Properties panel is of course always available.

Spacebar or F3: alternative shortcuts for the play button on the timeline panel; use this for editing timing, for synchronizing but do know that it is not a real Preview like the other options under Preview! Use this 'Slide Preview' (you can also scrub) to position the Playhead, and you can then easily synchronize start times of objects with this Playhead position. If you insert a new object it will always have its start time set to this Playhead position.

CTRL-E: to extend the duration of a selected object till the end of the slide

CTRL-L: to move the start of an object timeline to the Playhead position, a great way to have multiple objects appearing on the same moment  (still waiting for CTRL-R to align end of timeline with playhead)

CTRL-P: to move the start of an audio timeline to the Playhead position

LEFT/RIGHT: moves start of an object timeline 0,1sec in the indicated direction, works also for audio timelines (they do not have a Timing part in the Properties panel)

CTRL-LEFT/CTRL-RIGHT: moves start of an object timeline 1sec in the indicated direction (also audio timelines)

SHIFT-LEFT/SHIFT-RIGHT: decrements/increments duration of slide timeline or object timeline with 0,1sec

SHIFT-CTRL-LEFT/SHIFT-CTRL-RIGHT: decrements/increments duration of slide timeline or object timeline with 1sec


Tips for Advanced Actions

Reader, known or unknown, accept my sincere wishes for an exciting, healthy and peaceful 2011.

And for myself, sorry for the repetition I do hope to have more interaction with you. Please curse me, correct me, tell me blog postings are too long, too short, too many, too few, too serious, too much/bad images, missing audio, missing information about me, ... anything you want. I do welcome any comment, suggestion, question, issue, usecase.

Some people on the Captivate user forum asked how I did learn to use advanced actions and variables? To be honest, my way of learning is mostly by jumping in, bumping my head, making mistakes, restarting, trying to avoid those mistakes, etc. Since I started using Advanced Actions, by that process of trial and error I came to adopt a certain workflow. And in this blog post, I want to offer some tips to let you perhaps avoid some bumps on the head ;-). Here I suppose that the Captivate slides themselves are already created, that you have decided how to put up the project.

1. Prepair
  • Take time to "write" a detailed description (I do use Evernote or Onenote, but a piece of paper is also OK) of what you want to realize, and take into account every possible situation that could occur.
    Examples (situations): multiple attempts, going back, typos by user.

  • Initializing: is often needed for variables, for (in)visibility of objects etc; has this to be executed only once, or several times?
    Movie is linear (going back not allowed): no need for an advanced action to initialize.
    Going back allowed: initialize using an advanced action (on entering slide)

  • Identify system variables you will use

  • Redaction of a list of necessary user variables, choose labels for them

2. Identify triggers/events

Advanced actions have to be triggered, to be attached to events. It is easier to create several advanced actions on different triggers than one complex advanced action on one trigger. But the number of available triggers is limited, and moreover some triggers do not support all possible statements in an advanced action. To see which statements in an Advanced action will be possible, open the drop down list in the Properties panel, region Action for this trigger. Here is the list of possible triggers in your project:
  • On Enter slide: normally any statement can be added to an Advanced action attached to this kind of trigger. Very suitable for initializing, for preparing the objects as you want them to look on this slide. Only limitation: "Show" statement is only possible for objects that do exist on this slide (not for objects on another slide that are timed to display for the project - you can use the "Hide" statement however). On Exit slide:you cannot use the "Show" statement, not even for objects that are on that slide. You cannot use the "Hide" statement either! This trigger is suited for calculating variables that are changed by (user) actions on this slide, to increment/decrement a counter etc.

  • Button/Click Box: can trigger an advanced action on Success and another one on Failure (after last attempt); same kind of statements as for entering a slide, with moreover jump to other slides possible.

  • Text Entry Box: can also trigger both on succes and on failure, if you validate the user entry. If you do not validate the entry only the success action is available as trigger.

  • Question slides: can trigger an advanced action on Success and another one on Failure (after last attempt); this action will be executed, not when the user clicks the Submit button, but when he clicks on the slide or uses the shortcut Y (if you keep the default Success/Failure captions).

3. Choose proper action type

Which advanced action(s) do you need?
  • Standard action: if you need a sequence of actions to be performed, be sure to choose the proper sequence because statements will be executed from top to bottom. If such an action seems not to work well, it can help to add as last statement the action 'Continue'. You can create AND, OR combinations, but also customized conditions (AND + OR, watch the sequence and logic in that case).

  • Conditional action: if the actions to be executed depend on a question (decision), there are at least two sequences of statements needed:
      If you only need two sequences, use a single decision and put one in the THEN, the other in the ELSE part
      If you need more sequences, use multiple decisions, and only the THEN part.

  • Combination Standard+Conditional action: be sure to put the standard action in the first decision. I discussed this situation in this article

4. Label

I blogged already about the importance of good labeling. Some extra tips:
  • Prefer short names, starting with really identifying characters (works better in dropdown lists).

  • Normally you will have similar objects, variables, advanced actions where you will use the Duplicate functionality and do some editing; choosing small, significant differences in the names (1 or 2 characters) makes editing a lot easier.

  • If you have a lot of advanced actions, using characters in the name that indicate the trigger that it has to be attached to, will avoid a lot of searching.
    Examples: EntSlide1, ExtSlide1

  • Do not start user variables with r or c (both are first characters for system variables), but use another first character.

5. Create user variables

You can start creating user variables with Project, Variables. This dialog box has all the functionalities. There are two other possiblities:
  • To create a user variable to be associated with a Text Entry Box, you can use the small X in the Properties accordion, region General. It is a pity that the defautl associated variable (something like Text_Entry_Box_x) is not replaced by this better labeled user variable (see below: cleaning up the list with variables).
  • If you forgot to create one user variable, you can also do it using the button Variables in the Advanced Actions dialog box. But: although the look of the opening Variables dialog box is identical to the one that opens with Project, Variables, you will not be able to remove variables if you choose this workflow.
Please, clean up your list with user variables (use Project, Variables), when you have finished creating your properly labeled variables. It is always easier to manage a shorter list.

6. Create advanced actions

  • Use the Save/Update button as often as possible (pity that there is not a shortcut like CTRL-S)

  • If you have similar actions - where you will use the duplicate action functionality - create one of them, test it thoroughly before duplicating; that will you save a lot of time.

  • If you have a complex conditional action, do not put in all decisions, start with one, test it, add a second, test it etc. Sometimes I even test out first a sequence in a standard action, then copy the statements to the conditional action regions.

7. Test, test, test..

No one likes this, but please do test all situations. It will help for testing to put up on the slides some (temporary) Text Captions showing the user variables you are manipulating. This makes it easier to trace them and to detect bugs.

Did you read everything up till now? Congratulations! Whow, this was the most difficult post I wrote since I started blogging. And I'm very curious how it will be received. I should have added audio, images or a worked out project as an illustration. I have tried to "compilate" what is floating in my head, but am not sure this compilation is OK. Anyone to help with the debugging? Other suggestions? If you want me to apply what I described to one of your projects, add a comment. Please?

Creating a Game Results Board with Captivate 5


This question (from the forum)

"I'm trying to create a board for a game.  In the game there is a red team and a yellow team.  Once a team has control of the "board" the subsequent points earned should go to that team"

sounded like a challenge. And I like challenges, certainly when advanced actions in Captivate have to be used. Until today I had never imagined using Captivate for such a goal. And I had some difficulties to understand the rules of this game. The user gave me his graphics and was very patient explaining those rules. It took less time to create the advanced actions :-) . For those interested in the creation of the actions, I did publish an article explaining in detail those actions, here is the link:

 Creating a Game Results Board

In the article you can download the cptx-file and the cheat sheet for the moderator.

Game rules

The resulting SWF is displayed later on. But let's start explaining the rules (as I understood them):
  • The board is used by the moderator of the game, not by the teams
  • Two teams are playing: the 'yellow' and the 'red' team
  • A toss decides which team is starting: the moderator enters the result by clicking on the red or yellow rectangle
  • Each round corresponds with one slide and has one question
  • There are different correct answers, but not always the same number (first round has 5 correct answers, second 6, last 3); a round is finished when all correct answers have been given; total score for each round is 100 points, but the score for each correct answer is different.One example for first question: since 'dog' is the most popular pet it gets a much higher score than a 'rabbit' that is less popular.
  • The moderator has a cheat sheet, with the place of the correct answers; if the team gives a correct answer he clicks the corresponding rectangle: the answer is displayed with the corresponding score and this score is added to the result of the team.
  • If the answer is incorrect, the moderator clicks the last rectangle (bottom right); a big black cross shows up with the number of attempts left. When the team has given 3 incorrect answers, the other team can continue and gets the score already obtained by the first team.

Cheat sheet

Included a pdf with the cheat sheet for the moderator. There are 3 rounds with these questions:
  1. What are common household pets?
  2. Which day of the week is the most relaxing?
  3. What is a common side dish for lunch?
I got the explanation that the scores for the answers are based on statistics.

Game Results Board - result
Try it out please:

Some ideas

I' m thinking about creating a template for this scoreboard. It would allow customizing, for the backgrounds as well as for the questions, when using placeholders. Important is to have the advanced actions available in the template and an easy way to adapt them. It should be possible too to replace the textual answers by graphics.

What is your idea?

Quiz showing Elapsed Time


Today's posting is about advanced actions but not complicated. This is why this is very well suited for users who want to start with advanced actions and variables. I'm trying to answer a question from the Captivate user forum: "I would want the total time taken for the quiz to be displayed...".


Play with this example to see a possible solution, realized with some advanced actions. After the introduction slide the time spent on each question slide will be stored and displayed on the next slide. The total time spent on the quiz will be visible as well. Both will be showed in seconds. On the score slide the total time of the quiz is displayed, either in seconds or in minutes. If it is a really long quiz, it would also be possible to display in hours of course  :-). I will explain briefly the variables and advanced actions used. In the Gallery you'll find a screenshot of each advanced action.


I used the system variable cpInfoElapsedTimeMS and created some user variables:
  • v_start will store the start time for a question (in milliseconds), reused on each question slide
  • v_end  will store the end time for a question  (in milliseconds), reused on each question slide
  • v_duration will store the time spent on a question (in seconds), reused on each question slide
  • v_total will store the time spent on the quiz so far (in seconds)
  • v_help is a variable used to transform the total time to minutes 
  • v_minutes will store the total time spent on the quiz in minutes
On the second question slide, a text caption, labeled InfoTime shows the value of the variables v_duration and v_total. This Text Caption is set to display for the rest of the project and will be hidden by an advanced action on entering the Score slide. For the moment there is no possibility to have a 'mask' to display the time, sometimes you'll see a lot of decimals.

Advanced actions

I have included all the advanced actions as screenshots. Have a look at the image gallery. There are 3 advanced actions:

1. SetStart

This standard action is executed on entering the first Question slide. It populates the variable v_start with the value of the system variable cpInfoElapsedTimeMS at that moment. 

2. StartNext

This standard action is executed on entering all Question slides with the exception of the first one. There are more activities here:
  1. the user variable v_end gets the value of  the system variable cpInfoElapsedTimeMS at that moment;
  2. the variable v_duration is calculated from  v_end and v_start; it is in milliseconds after this statement
  3. the variable v_duration is translated to seconds
  4. the variable v_total is recalculated (in seconds)
  5. the variable v_start is reset to the  value of  the system variable cpInfoElapsedTimeMS at that moment to start the chrono for this question

3. EnterScore 

This conditional action is triggered on entering the score slide. It has 2 decisions, the first Standard is really a standard action, the second Minutes is a conditional action. If you are puzzled about this combination of standard and conditional action, please check this article Combining Standard and Conditional in one Advanced Action.

3.1 Standard decision
  • hides the Text Caption TimeInfo (that was displayed for rest of project)
  • repeats the statements 1-4 of the action StartNext; we do not need 5, because there is no question slide anymore
3.2 Minutes decision
On the score slide you have 2 Text Captions to show the total time spent on the Quiz; initially both are invisible: 
  • YesMinutes shows the total time in minutes and will be set to visible if the total time is greater than 60 sec; you'll find this in the Then part of this decision
  • NoMinutes to show the total time in seconds, will be set to visible if total time is smaller than 60 sec;  you will find this in the Else part of this decision
Let me know if you disliked or liked this explanation. And if you have more questions, do not hesitate...

Strings, Text Entry Boxes and Associated Variables

On the Captivate blog recently two tips for using advanced actions were published: Few tips on Advanced actions. If you have been watching my blog, you'll know that advanced actions is my favourite subject. And after reading the Captivate blog posting, I felt some more details about the first tip would be welcome. If that tip was perfectly clear to you, please do not continue reading this post.

The forementioned tip is about checking the possible emptiness of a variable by comparing it with an empty user variable, which is indeed the proper, even the only way. The basic reason is that in the simple Captivate scripting language a string shouldn't be included in double quotes as is the case in other scripting languages, at least not when the string is only one word. If it contains more than one word, double quotes will be automatically added by Captivate, no need to type them. Here are some examples of conditions (words starting with v_ are always user variables in my self-imposed scripting grammar):
  • v_counter is equal to 12
  • v_name is equal to Lieve
  • v_score is greater or equal to 20
  • v_name contains Lieve
  • 1 is equal to 1
  • Lieve is equal to Lieve
Those examples work perfect and here quotes are totally missing, there is no visible difference bewteen a string and a number. The two last (absurd) examples can be used to create a decision to simulate a standard action that has to be combined with conditional action(s) as explained in the second tip of the Captivate blog. A couple of weeks ago I published an article about this workflow:
The tip about the empty variable is illustrated by a user variable associated with a Text Entry box. For those users who did try out advanced actions in the previous version (Captivate 4) I thought it appropriate to explain the changes concerning Text Entry Boxes and associated variables. This change has been puzzling me when I started with advanced actions in Captivate 5, and maybe I'm not the only one ;)

In Captivate 4, when you create a Text Entry Box, it will be labeled by Captivate like any other object. The default label for the first created Text Entry Box is TTextEntryItem1.  Immediately an associated variable is provided too, and it gets the default label TTextEntryItem1Var. That is great, because you can insert the variable later on in a Text Caption. I include a screenshot to show those default labels. Personally I will always attach a more significant label, you know me already as a labeling freak. 

In Captivate 5 however, both the Text Entry Box and the associated variable will get the same label. Have a look at the second screenshot with a partial view of the Properties panel. I highllighted (in yellow) both the TEB-label and the label of its associated variable. If it is the first Text Entry Box, both object and variable will get the default label Text_Entry_Box_1. Although I'm always complaining about the fact that so many different ID's are needed in a CP-movie,  I do not really like this situation where one label covers two different 'objects. When both are used in advanced actions it can be confusing. Perhaps an example can better explain my "dislike":
Three statements of an advanced action:
    1.  Assign Text_Entry_Box_1 with Lieve  
    2.  Apply Effect Text_Entry_Box_1 Fly In From Bottom Left
    3.  Assign Text_Entry_Box_1 with "Lieve Weymeis"

In this action the first statement will give a value to the user variable Text_Entry_Box_1. If you have a Text Caption visible with this user variable inserted, you will see the content (Lieve). The second statement has the Text Entry Box flying in. Later the user will type an entry for the TEB and the variable Text_Entry_Box_1 will change to this new value. In the last statement the content is changed again, and double quotes will be inserted by Captivate because there are two words.  Perhaps you'll understand now why I was confused. But luckily, in the Properties panel of the Text Entry Box you can immediately create another user variable: in the second screenshot watch the green highlighted X which will open a small dialog box where you can enter a new variable name. This workflow however is not possible in Captivate 4, where you have  to create the user variable first (in the Project, Actions dialog box) before being able to associate it to a TEB.
BTW will publish shortly another article about Advanced actions, to create a game control panel. And it has some examples of standard actions combined with conditional actions. Watch this blog, I'l post the movie to play with and a link to the article.

Stack Order and Master Slides


When preparing the usecase for a previous blog post about creating cleaner Captivate-files (Playing Hide-and-Seek with Captivate objects), by using the possibility to show non-interactive objects for the rest of the project, and hiding them with advanced actions, I bumped into an issue that puzzled me. So I turned to the proper place, the Captivate user forum and opened a thread. I did not have to wait long, Ashwin Bharghav (from Adobe) answered and offered a workaround.  And I want to explain the issue and its solution. 


For the pretest, one of the usecases in this previous posting I wanted to streamline the workflow in a template because its re-usability.  It meant not having to recreate the advanced actions all the time. To make the template as versatile as possible I decided:
  • not to use one simple image for the Yes and No buttons, but to split them up in a Shape + Text. Both for localizing, and adapting the formatting this is an advantage. I appreciate a lot the roundtripping feature with Photoshop in the - eLearning Suite 2 (such as being able to import layer comps) :-)

  • not to choose a background image for the master slide, but inserting an image on top of the background to enable swapping and editing the image in Captivate. In the example I used an image with both saturation and alpha adapted (alpha to about 40%).

In this usecase, a lot of non-interactive objects were timed to 'Display for the rest of the Project': the images of the buttons (both shapes and Text) and the questions. And when previewing or after publishing I did see this phenomenon: on slides where the objects were not really inserted but showed up because of their timing, they took over the alpha of the Image on the master slide. Have a look at the first picture included: watch the questions and buttons;  the last question and buttons are on the slide itself, the previous ones are on previous slide but display on this slide, and they are partially transparent!


I quote the answer of Ashwin
 "By default when the objects are timed to display for rest of the project, they will have the lowest order on other slides in the project. So as per this logic the objects are shown under the master slide image on other slides". 

This explained the phenomenon: the objects took over the transparency of the image on the master slide. But it was not what I expected from a master slide :( 

Workaround (s)

Proposition of Ashwin: when setting the timing to Display for rest of project, there is an extra option: "Place object on top" (see second image). This will put the object always on top of the stacking order on slides where the object is no really inserted but displayed because of this timing. This may not be really what you want, because the object will also stay on top of the real objects on that slide. In this usecase I could live with that solution, but will not always be happy with it.
Another workaround is merging the image in the background of the master slide, that was my approach when publishing the pretest on the blog.

Article with details about 'Hide-and-Seek'

If you are curious about the advanced actions I have been using in this pretest-project and in the keypad-simulation to realize the Show/Hide objects, I have published a detailed explanation of the workflow in this article: Using Display for Rest of Project to create a cleaner Captivate file

Playing "Hide-and-seek" with Captivate objects

This article was written for version 5. At that moment it was not possible to show an object, timed for the rest of the project, from another slide than the original slide where it was inserted. However this has changed for later versions: in 7, 8, 9 and later you can show an object timed for the rest of the project from any slide.

Hide/Show actions, attached to events like entering slides or clicking a button/click box are popular. They can also be used in Advanced actions. But from several questions on the user forums I concluded that there is some confusion about what is really possible and impossible with those 'simple' actions. So, thanks folks for giving me the inspiration for this blog posting! If combined with the timing option 'Display for rest of project' you can end up with a Captivate-file that looks a lot 'cleaner' (perhaps I'd better try to keep my real desktop as clean as those files).  The examples were created with Captivate 5, but they can be realized in Captivate 4 as well.

Please, play with this SWF a little bit. I extracted this file from a larger project where I try to motivate students and colleagues to use Twitter on the college campus. This example is like a pretest, and the result will be used to offer a customized menu of chapters to be viewed by the user (this part is not in the example). And while playing, try to figure out how you would realize this in a Captivate file.
Did you know this?
4 important tips you have to be aware of when showing/hiding and using 'Display for rest of project'
  1. You can apply the action Show only to objects that are really on the slide
    p.e. you put a rectangle on slide 1, set to 'Display for rest of project'; if it is initially hidden, you can only show it on slide 1, not on slides 2, 3 etc
  2. You can apply the action Hide to objects wherever this object will be visible on runtime
    p.e. for same rectangle, if it is visible, can be set to be hidden on slide 2, slide 3 etc
  3. You can choose the timing 'Display for rest of project' only for non-interactive objects, not for buttons, click boxes, Text Entry boxes
    some interactive widgets (p.e. Perpetual button) can be displayed for rest of project
  4. When 'Display for rest of project' is applied to an object, it keeps its unique ID for the rest of the project
    if you copy an object to another slide, it gets a new ID; this leads to a lot of repetitive work when creating advanced actions
In the example of the previous blog posting (Creating a keypad-simulation) I did use those tips to have a 'clean' Captivate file. What do I mean by 'clean'? Have a look at the first image in the attached image gallery: it shows the filmstrip of this Keypad-file. Watch slides 2-8: on every slide only objects added on that particular slide are visible in the Filmstrip. On the stage you'll see everything: not only the objects on that slide but also those set to 'Display for rest of project'. In the second image you see the stage focused on slide 6 'In'. Whereas the Timeline of this slide only has the objects Highlight (red), a Text Caption and a click box (third image), on the stage you also see the images 'Keypad' and 'EnterPin' (green display) which are really on slide 2 and displayed for rest of project.
Overview visibility objects Keypad-simulation
I really want to recommend, creating an overview before starting to configure Show/Hide actions. Here is a rather simple overview of the 4 image-objects (keypad and 3 displays) of my keypad-file. For more complex projects I would use a table:
Keypad-image         Visible on all slides from slide '2. Digit1' until slide '8. OK'
                                Not visible on slides '1. Intro' and '9. End'
EnterPin-image       Visible on all slides from slide '2. Digit1' until slide '6. In'
                                Not visible on slides '1. Intro', '7. Not-OK', '8. OK' and '9. End'
Pin_NOK-image       Visible on slide '7. Not-OK' only
Pin_OK-image         Visible on slide '8. OK' only
Could you figure out how to realize this Captivate file with Hide and Show? If you do not allow the user to repeat the entry of the pincode after the slide Not-OK it is not that difficult. I offer you some tips:
  • set objects to 'Display for rest of Project' only when they have to be visible on more than 1 slide
  • concerning the advanced actions for the click boxes: Article: create keypad-sim
  • use simple standard actions (very few statements) on entering the slides
Example pretest
The example you have been playing with at the start (pretest) is more complicated. Have a look at the 4th image in the Gallery which shows the filmstrip of this project: isn't that clean? And the last image shows the Timeline of one of the slides, slide Question4. On this slide you see:
  • a Text Caption Quest4 with the 4th question, displayed for the rest of the project
  • image SJa4: image of a button, displayed for the rest of the project; a real button is interactive, cannot be displayed for the rest of the project, and moreover it only needs button functionality on this slide, so I preferred an image that is covered up with a click box (CB only on this slide)
  • Text Caption Ja4, displayed for the rest of the project:  have to localize a lot, that is why I imported 4 layers from a Photoshop-file (two button-images and two text layers); if you do not need to change the text that often you can of course merge image and text
  • image sNee4: similar to SJa4
  • Text Caption Nee4: similar to Ja4
  • Click Box CB_Yes4: only on this slide
  • Click Box CB_No4: only on this slide
Imagine what the timeline would have been if all objects from previous slides were copied to this slide (and even worse for next slides)!

This is a typical project for which I do create a template, because it can be used over and over again. The advantage is that the advanced actions will be stored in the project, and since a lot of objects have a unique ID, due to their timing (for the rest of the project), adapting those actions to similar projects will be a lot less cumbersome.

Would you like me to explain the advanced actions used in this project or for the keypad-simulation in an article? Please, post a comment!

Create a Keypad-Simulation using Advanced Actions


It has been a while since I last posted an example created with advanced actions. This posting treats the answer I tried to give to someone on the user forum who asked if it is possible to simulate the entry of a 4-digit code on a keypad and show the appropriate screens when the code is entered correctly or incorrectly. This sounded like a fine example for advanced actions, so I tried to work it out. This could certainly be done in a cooler way by creating/using widgets scripted with ActionScript, but am not sure it would have taken less time. For your information: I timed working and it took me exactly 45 minutes. But I did not create the graphics :-)


Play with the result, please. I explained the workflow in an article: 

Work flow

The file has 7 slides between the introduction and end slides: 
  • 4 slides to enter the 4 digits, they are labeled Digit1, Digit2, Digit3, Digit4
  • 1 slide for confirmation where the user presses the IN button, labeled IN-slide
  • 1 slide that shows the image for a correct PINcode, labeled OK
  • 1 slide that shows the image for an incorrect code, labeled NotOK

 The tedious part of this SWF was 

  1. the creation/labeling of all the click boxes. Slides Digit1 - 4 have each 10 click boxes over the 10 possible digits.
  2. the creation of the simple advanced actions for each click box (40 actions)

Some timesaver tips for this monotonous work: 

  • choose a short but meaningful label for click boxes & advanced actions:
    • examples click boxes: label CB_0_1 for the click box over the number "0" on the first slide, CB_1_4 is the CB over the number "1" on the fourth slide...
    • examples advanced actions: CB1_0 is to be attached to CB_0_1, CB4_1 is to be attached to CB_1_4

  • create first slide with its click boxes and attached advanced actions, duplicate then to create the three other slides:
    • you will have to label all new click boxes on the duplicate slides (too bad, but they get their individual default ID)
    • to change the attached advanced action is easier with the chosen labels, on second slide CB1_0 has to be replaced by CB2_0, CB1_2 by CB2_2 etc
The advanced actions to be constructed for this project are pretty simple, you can find more explanations in the article mentioned before.