System variables in Captivate 8/9

Intro

Captivate 9 users: there is no change about system variables in this version, you can download the same table.

The post 'System variables in Captivate 6' has been very popular, probably because it offers more details than what can be found in the documentation of Captivate itself. Later on I mentioned some new variables in Captivate 7 in the post New Features in 7.0.1.
Time to upgrade the table for Captivate 8, you can download (for free) the pdf from here. The document is encrypted to discourage abuse. You will be able to print it at low resolution (150dpi) and it can be read by a screen reader. 

The table was first proposed at the Adobe Learning Summit presentation about Advanced and Shared Actions. 

New

Captivate 8 only added two new variables:

  • cpInfoMobileOS in the category 'System Information': is read-only and detects which device is used, returns a number or a case-sensitive string

  • cpInfoGeoLocation in a new category 'Mobile': returns the geometric location when using a device on which such detection is enabled. This is the first variable that has not one but three components. Latitude, Longitude and Accuracy are numbers. There are several tutorials around, like this one.






Captivate 8.0.1 Install? Keep your Customisation!

Intro

Today an important patch for version 8 was released, to upgrade to version 8.0.1.242. Like with the update to 7 I wonder why this is not a full 8.1 or even 8.5 because there are not only a lot of bug fixes, many features were extended and even added. Have a look at "What is new" for a summary. And Dr. Pooja Jaisingh already blogged and posted some other links: Free Update to Captivate 8. In this article  by my friend Michael Lund you'll find not only his first reflections but clear instructions about installing the patch. But none mentioned some of my favourite new features: using SHIFT to constrain an ellipse/rectangle shape to a circle/square and big improvements to color management. 

But this post is not meant as a personal summary of the new features! As an advanced user I'm used to customize Captivate of course: custom themes, custom theme color palettes, custom shapes, custom effects and... custom workspaces because I'm using Captivate 8 in Expert mode. And when following Michael's (correct!) guidelines for updating, most of those custom items will get lost. If you do not are happy with the default items, never customize, do not bother to continue reading. However, if you share my frustrations about losing precious work, maybe you could find some workarounds in this article. Some of them can also help when you have to 'clean' a tired Captivate application by killing its Preferences.

Workflow 

Before installing an update, before deleting the Preferences folder (or using the CleanPreferences files in the subfolder 'utils'):

  1. Find the custom items in these locations (I'm on Win7, will be different on Mac):

  • Workspaces in   \Users\<yourprofile>\AppData\Local\Adobe\Captivate 8.0\Workspaces   
    which means they will be refreshed because this is in the Preferences folder. Here you see the default workspaces, each defined by two files.


  • Custom Theme Color Palettes in   \Users\Public\Public Documents\Adobe\eLearning Assets\Layouts\8.0\ThemeColors
    Layouts is one of the folders you have to delete before installing a patch.


  • Custom Themes in  \Users\Public\Public Documents\Adobe\eLearning Assets\Layouts\8.0\en_US
    I will mostly not save my custom themes in this folder, but better check if you have some there. The last item in the path can of course be different if you didn't install the US English version as I did.


  • Custom Effects contrary to the themes, I like to have some custom effects in the Gallery with other effects in a subfolder Custom:
    The Gallery can have more custom items. Eventually check also the folder en_US in the installation folder. Maybe you have edited some of the files there as well.

  • Copy all the custom items to a safe place

  • Install the update, or Clean Preferences

  • Copy the custom items back to the same locations described above.

  • Of course, if you want to go back to Expert mode to be able to use the custom workspaces, you'll have to edit the Preferences again:

    Bonus

    Wondering what SFH means in this new setting:

    Success/Failure and Hint captions can now be replaced by cool shapes, also for Question slides! And it is no secret that I'm a big fan of Shapes over the older objects. Now waiting to be able to import SVG as shapes :)

     

     


    Drag&Drop tips

    Intro

    Since Drag&Drop appeared, there are many questions on the forums about them. Although the wizard is an easy way to create quickly a simple interaction, once you explore its functionality more in depth, not everything is self-explanatory. In this post I will try to offer some tips, do not expect to get a complete tutorial.

    Tip1: Labeling

    It is not really necessary to label the objects used in a Drag&Drop for simple interactions, but if you will need to use object actions labeling drag sources and drop targets can make life so much easier. And my true fans do know that I'm a labeling freak.

    This is a warning: label all objects before creating the Drag&Drop. If you change your mind and want to add or edit names after having created the Drag&Drop links, you'll break the links from/to objects that get a new or changed name. This is certainly not the case in other situations in Captivate: it is perfectly possible to change names of objects that are used in advanced/shared actions, the names will automatically be changed in the actions. This is not the case for Drag&Drop, so try to avoid the problem by labeling objects first of all.


    Tip2: Success message

    It is a bit strange, D&D has a default Failure caption that will appear when the drag answer is incorrect, but it has no default Success caption. You have to take care of it yourself, this way:

    • Create a message, it can be a text container (use a shape, much more choice that for captions), an image, an animation, an audio clip or even a combination of several objects (group them in that case).
    • Make the message invisible, either using the option in the Properties panel, or using an action On Enter of the slide.
    • Define the action Show Message (which can be a group or an object, like defined in the first step) for the Success action in the D&D panel.

    Update: if you upgraded to Captivate 9, you can forget about this tip: it is no longer necessary to use the workaround because the Success caption (or shape) is now available in the Drag&Drop panel as an option.


    Tip3: Object Actions

    Besides the actions that are executed when the user has clicked the Submit button (which I used in Tip2), you have the possibility to trigger an action by each individual drag movement. Bit weird, but in Captivate 8 you'll find those actions not as expected under the Actions tab but under the Format Tab.

    You can use this functionality for several goals, like to:

    • show an individual message (can be text, image, audio) for each drag movement
    • simulate having the moved drag sources in a specific sequence (like books on a shelf)
    • ...

    What is not mentioned anywhere in the Help is the fact that if you specify a simple action (from the dropdown list), the playhead will be released as is the case for any simple action in a normal situation (remember my blog post with video on Youtube: 'Why choose standard over simple action?'). And that is certainly not what you want! By default a D&D interaction has a pausing point at 1.5secs (like normal question slides), but a simple object action will cause the playhead to continue, user will not be able to finish. 

    My recommendation: never use a simple action as object action! Replace it by an advanced, or better, by a shared action. For examples as mentioned above you'll probably have similar actions for all the objects, which makes shared actions the way to go. Watch this movie, you'll see what happens when a simple action is used, and how this is corrected by replacing the simple actions by shared actions.

    Movie

    The object actions on the slide with the simple actions (slide 2):

    And I replaced them on slide 4 by a one liner shared action:

    On the last slide I used a shared action as well, that hides the group and shows one explanation.




    Custom Short Answer Question

    Intro

    This is not the first time I publish about creating a Custom Short Answer Question. The default type in Captivate is pretty limited:  the user should enter exactly the same answer as the defined correct answer which is almost impossible with this type of question. The normal validation for such a question is to check if some keywords are present, and eventually if some other keywords have not been used. My previous posts were created with Captivate 5 for publish to SWF only:

    Widgets were meant for SWF-output only, including the widget by Jim (this one, he has some widgets that are also compatible with HTML5). Since Captivate 7 the TextArea widget got a companion, the 'Scrolling Text Interaction'. Don't be confused by the name, it is essentially the same widget, but compatible with HMTL5 output. 

    This week I accepted another challenge from a Captivate user on the forum, concerning the use of TextArea (or Scrolling Text) with a more complicated condition than the one I described in the previous blog posts: How to verify that a variable "does not contain" a value? As you probably know, the operators in the IF part of a conditional action are bit limited: there is an operator 'contains' but no negative counterpart. My first reaction was to propose the use of JS, but my intuition told me I should also try with advanced actions. This post will explain how I solved that problem, and I was very happy when the King of Javascript in Captivate, Jim Leichliter posted his alternative with JS in the same thread, scroll down to find the script.

    In this post I will explain the conditional advanced action, and also point to another well-hidden gem, only in Captivate 8: the Captivate team has now embedded the variable control in the Scrolling Text Interaction! Don't tell that they are not listening to users :) What was only possible with the extended TextArea widget by Jim in previous versions, can be done with the supplied Scrolling Text Interaction.


    Challenge

    The description of the problem: " We are basically validating the content in the widget and showing appropriate feedback. Since the user can enter anything in the widget, we are only tracking the keywords. To be precise, we are trying to create an Advanced Action like this, where the text entry should contain the words Organizational, Behavioral, and Managerial but not the words Transformation and Non-Compliance. If the entry contains any of the "illegal" words, then incorrect feedback caption should appear."
    Translated: when the answer is submitted, the conditional action should show a Positive feedback when:
    • the three first words are included in the text
    • the last two words are not included in the text
    If those conditions are not all fulfilled, the Negative feedback should be made visible.
    Because of the missing operator 'does not contain' this cannot be done with one decision, one IF combination using AND, which explains why the user was stuck.


    Solution 'Divide et Impera' 

    After a long career as professor, this has become one of my mottoes: make it simple by splitting up the problem:
    1. Check first if all the conditions are fulfilled and store that result in a Boolean variable. There are a lot of Booleans in Captivate: variables that can have only two values, No/Yes, 0/1, False/True. I will mostly choose for the 0/1 combi. I created a user variable v_TA_OK with a default value of 0 (meaning all conditions are not yet OK)

    2. Show the appropriate feedback based on the value of that Boolean.
    This was possible because of the typical way Advanced actions are executed in Captivate: 
    • all statements are executed in sequence and
    • all decisions are executed in sequence
    • the action is not stopped when a positive condition is met

    This has led to a conditional advanced action with three decisions.


    Movie

    Watch this movie, created with Captivate 8, customized theme 'Flat', using custom shape buttons (one is a freeform shape) with three states and the new Scrolling Text Interaction.


    Advanced actions - variables

    Variables

    To make the question more universal, I didn't use literals for the words, but stored them into variables. These variables were created:
    1. v_one, v_two, v_three to store the words (can also be more words in one variable, but they'll have to appear in that sequence) that have to be included in the answer

    2. v_notOne and v_notTwo for the words that are forbidden in the answer 

    3. v_Answer to be associated with the TextArea or Scrolling Text that will store the value typed in the answer

    4. v_TA_OK: the Boolean variable explained above; default value = 0, will only be set to 1 if all conditions result in correct.

    5. v_null: an empty variable that is needed to create conditions for the other advanced actions (as the ones that check if all word fields have been filled); I will not explain those actions here; more info: Where is Null?

    Conditional action Check_Short

    This action is triggered by the Submit button on the Short Answer slide. This was the answer to the problem presented at the beginning. I will not explain the other advanced actions like the one triggered by the Reset button or the different actions On Enter for slides to reset the situation to normal. The action has 3 decisions:

    OKWords

    This decision checks if all the imposed words are present in the Short Answer, using the operator 'contains', with AND combination. If that is the case, the Boolean v_TA_OK will be set to 1.

    NotOK

    The not-allowed words are checked with this decision, using again the operator 'contains' but this time in an OR combination, because even if only one of those words is present, the negative feedback has to appear. If any of the words appears, the Boolean v_TA_OK is reset to 0. It is very important that this check only occurs after the first decision! After this second decision (in this case) all conditions have been evaluated and the Boolean variable v_TA_OK has its final value, will be used in the last decision 

    FBack

    Only this last decision has also an ELSE part, as you can see in the total view of this conditional action:

    As I explained in the last slide of the movie, because of the stack order, where an Interaction always is on top even though it is not on top in the Timeline, I had to hide the Interaction to be able to show the Feedback groups, because they were in the same location. Here is the Timeline of this Short Answer slide:

    You see that the Interaction (indication is Widget on timeline) is not on top. The Next button is not on this slide, but on the first slide and timed for the rest of the project. That shape button is hidden/shown when necessary.


    Tips

    Variables are case sensitive, and contrary to validation of a Text Entry Box it is not possible to get rid of that case sensitivity for variables associated with this interaction. If necessary you'll have to create more decisions.
    I wanted to emphasize the importance of sequence by this blog post, and the fact that Captivate will always evaluate all conditions/decisions. This is not always the case in normal programming languages. Trying to explain:
    • The first decision is positive, variable v_TA_OK will be set to 1, but there will not be ending of the condition
    • If the first decision is negative, variable v_TA_OK will remain at 0, no need to include an ELSE part.  This means that the variable can never be set to 1 anymore, but the second decision will nevertheless be checked by CP.
    • If both negative words are not included, nothing happens with the second decision, v_TA_OK will keep its value 1 or 0 depending on the result of the first decision, because there is no ELSE part.
    • If one of both negative words are included, the second decision will reset v_TA_OK to 0, whatever its value was at the end of the first decision
    The new possibility in Captivate 8 to change the value of the variable associated with the Scrolling Text Interaction and have this displayed in the interaction is important if you remain on the same slide. Contrary to the extended version of Jim's TextArea widget, the rule that variables for each interaction are cleared when you leave the slide is also applying to the Scrolling Text. If you want to keep value of the variable you have to transfer it to another variable.




    Reuse Shared Actions in other Projects - Captivate 7 vs. 8

    Intro

    A while ago I started a sequence of tutorials about shared actions in Captivate 7: I promised then to explain how you can reuse the actions in another project. And then Captivate 8 appeared with a considerable improvement of shared actions: variables and literals are now candidate parameters. In my last article I explained the difference and consequences of this extension. And the examples I showed in my review of Features of Captivate 8, which were not possible to realize only with shared actions in Captivate 7 prove the value of that improvement.
    Advantages of using shared actions (both in 7/8) within same project:
    1. Saving time: you don't have to create a new name as for a duplicated advanced action, just choose the parameter(s)
    2. Managing shared actions is in the Library, not in a separate dialog box
    3. Since you are using the same shared action over and over again, this helps keeping file size down
    The real power of shared actions is even more apparent when you start to reuse them in other projects. You only have to get them in a new project, and you can use the shared actions like you did in the original project. Of course, you'll have to create the objects that have been used as parameters. Captivate 7 users will not be able to use variables, nor literals as parameters. For Captivate 8 users have a close look at the tips at the end of this article. Let us start with the different work flows that can be used to get shared actions from one project to another one. 

    Getting shared actions in another project

    1. Using Export/Import (7 - 8)

    Similar to other Library assets, you can export shared actions from the Library and import them in another project. Use the small icons in the top bar of the Library:

    The extension of those small exported files is cpaa. When they are imported in another project:

    • They appear in the Library of that project, with a Usage of 0

    • If the shared actions do use variables that are not defined as parameters, those variables will be created in the project to which you imported the shared actions.

    2. Copy/Paste from External Library (7-8)

    This is my preferred work flow. I love keeping much used assets in a separate project file, that I use as External Library:

    • Project file that you want to use as Library has to be closed

    • Use File, Import, External Library and point to the project file

    • Copy/paste the shared actions to the Library of the active project fie.

    The results will be the same as with the first method, but you don't have to bother about saving the exported files somewhere and importing them from that same location. 

    CP8 tip:

    If you are using the default UI, not the Expert mode, this External Library will open as a Floating panel. This means that you can drag it wherever you want, increase its size etc. That functionality is available in CP8 for the normal panels only when you choose for Expert mode. 

    3. Drag from External Library (8)

    These work flows are not possible in Captivate 7.
    You can drag shared actions from the external Library to the present project Library, alternative for Copy/Paste/
    But you can also drag a shared action from the External Library directly on:
    • a slide: in that case it will be associated with the On Enter event, and you can immediately choose the parameter
    • an interactive object (button, click box, shape button...): in that case the shared action will be associated with the On Success event of the interactive object.
    At the same time the Shared action will appear in the Library, but since it is immediately used, there will be a Usage of 1. If the shared action has variables that are not defined as parameters, they will be created in the project file. 
    Dragging from the library on a slide or an interactive object is also possible from the present library of course.

    Tips and Tricks for Captivate 8 users

    1. Warning about dragging from External Library on event

    If you have several shared actions that use the same variable, do not drag them on slides or interactive objects. There is a small bug (hopefully will be removed soon): if you drag them one by one to an event (on slide or object), before those shared actions are in the present Library, the variable will be created as many times as you execute a drag action. And each variable will have another name, which can be disturbing the logic of your shared actions.

    Example: 

    In the Dashboard use case, described in Features of Captivate 8 the variable v_counter is used in two shared actions, and one advanced action:

    If you drag the shared action FirstViewBt from an External Library to a new project (like the last movie in the same article), not to the Library but immediately on one of the buttons used on the first dashboard visit, the variable v_counter - not defined as a parameter - will be created. If you do the same with the shared action NextViewBt, it will not use the created variable v_counter, but a second variable v_counter1 will be created. This will cause problems: not only will the number of visits not be updated as expected, but the Advanced action, ResetStart, will only reset the variable v_counter, not the second one v_counter1

    To avoid this kind of problems: drag the shared actions (all at once is possible) from the External Library to the present Library (Usage will be 0), and drag them from that Library onto events.

    2. Choosing variables as parameters

    In Captivate 8, variables and literals don't have to be parameters, they are only candidates. You can easily choose a variable to be a parameter in one shared action, and not in another one. 

    Example: 

    For the Dashboard use case, the variables v_ch1, v_ch2, v_ch3 and v_ch4 are:

    • defined as parameters both in the shared actions FirstViewBt and NextViewBt because they have to be edited when applied to another button

    • not defined as parameters for the shared action EnterDash, because they have never to be edited.
    When dragging (or copy/paste) the shared actions from the External Library to the present project Library, this saved time because I didn't have to define the variables, they were imported with EnterDash. I could use them right away as parameters in the two other shared actions.

    3. Careful with literals as parameters

    In some rare use cases it can be interesting to define a literal as a parameter. I want to warn however: if you define a literal of 1 as a parameter and that number appears several times in the shared action, all the literals will be changed to the value you give when entering the parameter value. 

    Examples

    QuizMessage: a conditional action with 4 decisions, that shows a different item/group based on the obtained percentage for a Quiz. In this case it can be useful to define the limiting scores as parameters:

    Whereas in this case, it is not a good idea to define the '1' as a parameter, because it appears in two different lines, once in the condition itself and once in the Assign statement. Only when you can replace the Assign by a Toggle statement, you could define the literal as a parameter because in that case it would appear only in the condition:


    Conclusion

    As long as you can apply the shared action without having to edit a statement/condition, or to add/delete a line they can be a real time saver. But often editing is necessary, certainly in Captivate 7. For the Dashboard use case: if you do not have the same number of buttons on your dashboard, you have to edit the EnterDash action for sure.  And how do you manage shared actions? I will write another blog post in the near future on those subjects.




    Parameters in Shared Actions - Captivate 7 vs. 8

    Intro

    In my last article, where I explained my exploration of Captivate 8, with strong focus on the enhancements of shared actions (shape buttons, theme colors), I have promised to explain my work flow to prepare the shared actions for import into another project. The idea is to create a library of shared actions that can be used over and over again in all future projects. Maybe you want me to create such libraries, post a comment if that is the case.
    Since I started a sequence of articles about shared actions in Captivate 7 (Dare to Share 1 and Dare to Share 2) and promised then to explain how to reuse shared actions in other projects, this article will be an in-depth explanation of the differences between version 7 and 8 concerning parameters. 

    Parameter in shared action - definition

    What is a 'parameter', new Captivate term since the introduction of shared actions with Captivate 7? It is an item that is replaceable by another item when you reuse the shared action either in the same or in another project. The range of items that can be used is extended in the latest version (see further). Some examples of 'item': slide, text container, image, button, audio clip, group. When defining the shared action, you have to enter a description of each parameter. Those descriptions are very important (I know some users find it always cumbersome to type descriptions) because the 'replaceability' rules are very tolerant, flexible. It is not necessary to replace an item by an item of the same type! You can replace a text caption by an image, an audio object,  group with objects, perhaps for a Hide or a Show action (examples in Dare to Share 2).

    What is the difference in parameters between Captivate 7 and 8 

    Captivate 7 compared with Captivate 8 

    1. Parameters in Captivate 7

    All slides, objects, groups that you use in an advanced action to be converted to a shared action, compulsory will become a parameter in Captivate 7. Examples:
    • Slides: mostly used with 'Jump to' statement, not really interchangeable with another item
    • Non-interactive objects  (captions, images, rollovers, highlight boxes, shapes, audio objects...); often used with 'Hide' or 'Show' statements. Those objects are interchangeable, also with interactive objects and groups; they can also be used with 'Apply Effect'.
    • Interactive objects (buttons, click boxes, Text Entry Boxes, shape buttons), that can be used with 'Hide', 'Show', 'Enable', 'Disable' statements, totally interchangeable like non-interactive objects
    • Audio clips: when used with statement 'Play Audio'; not really interchangeable contrary to audio objects.
    • Grouped objects: mostly with Hide' or 'Show'. Even if all objects in group are interactive, the statements Enable/Disable cannot be applied. Neither can 'Apply Effect'.
    The most important limitation in Captivate 7 is that variables cannot be a parameter. As I explained more in detail in this On Demand webinar about Shared Actions (Adobe ID required), this means that you'll often be forced to use the shared action as a template for an advanced action, instead of using it as shared action. I will explain this work flow in a future post for CP7-users. In this screenshot you see a shared actions opened in the Advanced Actions dialog box (using the template menu top left, where you see ChapIn). First two statements cannot be changed if used as a shared action. This is the CP7 equivalent of the actions described for the first buttons in the Dashboard in my last post.

    When you import a shared action into another project, and that action is using variables, the variables will automatically be created in that project, which is a time saver.  If only the shared action shown in the screenshot was imported in another project, the variable v_ch1 would be created.  Another reason to establish a personal labeling discipline :).

     

    2. Parameters in Captivate 8

    Captivate 8 has the same compulsory parameters as Captivate 7 but it has also candidate parameters, a term I'm using for those items for which you have the choice: either you accept them to be static, or you convert them into a parameter. Candidates are:

    • variables: as used in statements 'Assign',  'Increment/Decrement', 'Expression' or used in conditions for conditional actions.
    • literals: which can be used in the same statements and also in conditions; first warning: if you choose to have '1' in this example as parameter, all literals '1' will be considered as the same parameter (more about that in a later post).

    I explained in my last post how to convert a candidate into a parameter. In this screenshot you see the same action in Captivate 8 as I showed previously for version 7:

    The variable v_ch1 was converted to a parameter, which made it easier to reuse this shared action for different buttons in the same project. The variable v_counter, nor the literal '1' were converted to parameters, they remained static. Reason is that the first statement, Increment, is the same for all chapters. I will always use v_counter, and increment it always with the same amount '1'. Why did I replace the Expression from CP7 by Increment? Easier, but that new statement did appear with 7.0.1, was not yet there when I created this dashboard with 7.0.0.

    What happens when importing such a shared action in another project? The variables that are not converted to parameters will again be automatically created. In this case, the variable v_counter will be created.


    Conclusion

    This comparison and introduction to the 'parameter' rules, will make it easier to explain how I used this knowledge to save as much time as possible in the use case described in my previous article. Thanks for being patient.


    Captivate 8 - First Adventures

    Review? Not really...

    Lot of well-known Captivate users have already blogged about the new features in version 8 of Captivate, released this week:  Michael Lund and Jim Leichliter are not the only friends who published their review. If you are a regular visitor of this blog, you'll know that I don't want to talk about features before having been able to explore the final release and that I'm used to offer an article with at least one example movie to demo what I try to explain. Some will be disappointed that the included movies are not responsive projects, but a good old SWF's (sorry Mac-users). You'll see some of the less-talked about new enhancements in Captivate 8. 

    Focus on?

    Watch this first movie. Focus in this project was on:

    • new possibility to customize theme colors: I edited one of the new themes, based on a Kuler palette (imported in the Swatches) panel; for this palette I used the colorful new box-shot  of Captivate 7 as resource

    • the ability to save and reuse custom shapes: for the shape buttons I used a custom shapes that are now available to me in the shape library

    • creating Normal, Rollover and Down states for Shape buttons and save those states in one Shape button object style: all buttons in the movie are shape buttons with 3 states; I used two shape button object styles

    • shared actions: being able to define variables and literals as parameters

    • shared actions: dragging them from the Library onto slides or interactive objects to open immediately the Parameters dialog

    • shared actions: being able to exclude variables, literals as parameters; discovered some nifty tricks!  Maybe I'll offer them in the future

    • new character sets
    The project is showing a typical dashboard, that allows branching to different parts of the movie. For the sake of simplicity each part is only one slide in this case. The number of visits to each part is visible when returning to the dashboard. I hope you'll also discover the total number of visits to all parts in that dashboard (red number). When all parts have been visited, something happens on the dashboard. If you want to play again, you'll be able to reset at the end. There is no playbar, no TOC.

    Movie

    Actions & Variables

    Five user variables were created:

    • v_counter: tracks the total number of views of chapters
    • v_ch1: tracks the number of views of the first chapter
    • v_ch2, v_ch3 and v_ch4: similar for the three other chapters
    Tip: To keep it simple I limited to four chapters. If you want to store the shared actions in a Library to be used in future projects, it is better to have the maximum number of chapters you'll ever use.

    As you can see in the Library, I created/used three shared actions. Only the Reset functionality uses an advanced action (not described in this article).


    1. FirstViewBt

    This action is triggered by the four shape buttons that appear the first time on the dashboard slide. It is a standard action, that will replace the button itself by a second version, navigates to the first slide of the chapter to be visited, increments both the general v_counter and the specific v_chx variables. The advanced action (before saving as shared action) is visible in this screenshot:

    When saving this action as a shared action, the dialog box looks different from Captivate 7:

    Watch the icons in the first column (fuchsia colored rectangle): before entering the description, this column will have the Warning icon for the items that are automatically defined as parameters: objects/groups. In this example 3 objects had that status: the buttons (BullletRight_1 and Sec_1), the first slide of the chapter. However now you'll also see variables and literals as possible candidates for parameters! They are normally indicated by a check mark (green) in the first column. In this example: v_counter, '1'(literal used in Increment statements) and v_ch1. To turn such a candidate in a parameter, you have to check it in the third column (blue rectangle). In this case I choose to make turn the chapter specific variable v_ch1 into a parameter. The warning icon appeared, and will disappear when I confirm the entered description. Both v_counter and the literal '1' are no parameters, since they will not have to be changed when using the shared action for a different button.


    2. NextViewBt

    This action is triggered by the four shape buttons that replace the first view buttons (by previous described action). It is a simple version of FirstViewBt with only three statements:
    • increment v_counter
    • increment specific chapter user variable
    • jump to first slide of that chapter
    Only two parameters in this case: the specific chapter user var (v_chx which was a candidate) and the first slide of the chapter (compulsary parameter). As for FirstViewBt, neither v_counter nor the literal '1' were promoted to parameter.

    3. EnterDash

    This action is triggered when entering the Dashboard slide. It is a conditional action with two decisions. In these screenshots you see the Advanced action from which I started. First decision 'None' will make the slide ready for a first view, second decision 'AllDone' will make the Next button (navigates to last slide) visible and do some more bonus tricks.
    I'm smiling at this moment, because I 'hear' a lot of questions: 
    1. Why did I convert this into a shared action?
    2. What are the parameters for this shared action?
    3. Can the user vars be parameters, they are used more than once?
    4. Same question perhaps for the literal '0' that is used 8 times?
    5. ....yours ?
    Or is it crystal clear? Let me know. One tip: I used the shared actions for this movie:

    Movie2: reused shared actions


    Dare to Share - part 3

    A while ago I published two posts as an introduction to shared actions in Captivate 7. At that moment I promised a third part about reusing shared actions in other projects. But since I was aware of the imminent release of CP8, and as a professional procrastinator, I postponed this part. I will explain how I reused the shared actions described in this article for the second movie. Watch out next week.


    Conclusion

    For those who expected a complete review or Captivate 8, sorry!  These are not the only CP8 features that I like. Honestly there are also changes that I don't like. Maybe I will post more about both when I feel capable to judge better. 'Hurry slowly' as a great friend tells me all the time. The enhancements I started to discuss today, I have been exploring already (also during prerelease) more in depth. In Dutch there is a proverb, freely translated like 'Each bird sings his own song, depending on his beak'.  I need more time for my songs.

    Turn an Image into a Button

    Intro

    This will be a short tip to explain how you can quickly turn an image into a shape button. I had to explain this already multiple times and wonder why this easy work flow seems to remain a secret to many users. 

    Step by Step

    1. Check the size of the image, width and height if the image has the correct size, or the width/height ratio if you want to have a smaller button than the image. You can do this in Captivate as well: insert the image on a slide, and check the size in the Transform accordion.
       Examples: image is 100px wide and 80 px high, you want a button with a width of 75px, the height will have to be 60px.
    2. Insert a smart shape with the wanted size/shape (triangle of 75 x 60 for this example); use the Transform accordion again; and check the option 'Use as button' 
    3. Edit the stroke as wanted - in the image I turned off the stroke (width = 0) but to avoid possible artifacts, choose also color of the background for the stroke. Click then on the Fill button.
    4. Default fill of shapes is a gradient (second choice), first choice is a solid color, but it is the third button that you'll have to click (Image).
    5. Some default textures are available, but you want a custom image, click on the Browser icon, and point to the image in the Library (because you have inserted that image before, it will be available in the library). In the Edit image dialog you can keep the default settings, click on OK.
    6. Your button is ready, you can time it, activate the pause option if wanted. Like all shape buttons it will have two states: not pressed, and pressed. Watch the fill: you'll see a thumbnail version of your image.

    Conclusion

    I prefer largely this work flow over creating image buttons, where you need to make three images, use names that end on _up, _down, _over. Of course, you only have two states for these shape buttons.

    Reset Knowledge Slide

    Intro

    This post is for Captivate versions before 9. In version 9 real knowledge slides are introduced. In this post the workaround to use normal question slides as knowledge check slides is treated.

    Not a shared actions post this time (still busy with the third post), but a quick tip describing a work flow that I already posted multiple times on the Captivate forums. It is an answer to this question:  "How can I reset a question slide immediately, if it is a pure knowledge check, no scoring". 

    Principles

    You are probably aware of the fact that the function 'Reset' in Captivate is only possible for the whole quiz, and has to be triggered by using the Retake button on the score slide. There is no simple way to reset one question, once it has been submitted. Before submitting it is possible to Clear the answer by the Clear button. For more details about question slides and score slide, check some of my previous posts:

    Question Question Slides - part 1

    Question Question Slides - part 2

    For knowledge slides, where scores don't have to be saved, you will not want to insert a score slide. But if you can cope with the fact that all answers will be cleared also for other knowledge slides in the file, you can create a 'Reset' button for a slide, without having to show the Score slide. 

    The Retake button will appear on the score slide if the attempts on quiz level are not exhausted. The attempts are tracked with a system variable cpQuizInfoAttempts.  That variable is incremented when a new attempt is started. 

    The idea for the Reset action is simple: navigate the user to the score slide, and immediately back to the slide where he was answer in knowledge question. And that slide will be reset!

    Example Movie

    Watch this movie, to see the functionality of the Reset button. On each question slide you can use the two-step Submit work flow. Nothing will happen, you'll be able to Reset the answers as many times as you want. You need to click the Next button to go to the next Question. 

    Setup Step-by-step

    • Edit the Quiz Preferences, set the number of Attempts to Infinite (or to a high number), it is not really necessary to show the Retake button. Be sure to hide the playbar, to check 'Show Score slide...' although you'll never show that score slide to the user, you need it. Do not allow Backward Movement. Check the two images below.
    • With the setup used in the example, you'll need to have the Next button visible. Do not drag it under the Clear button as I often advice to avoid confusion with the Submit button. 

    • You can use any type of questions, with one exception: Hotspot. Problem with Hotspot is that when the user clicks on the Reset button, it will be considered as a click on a hotspot (and the animation will appear). You see in the example that I even used partial scoring for some MCQ-multiple answer questions.

    • The setup for the question slides: I kept the attempts to 1, but changed the actions both for Success and for Failure to 'No Action', hence the need for a Next button. If you want, you can keep the 'Go to Next Slide' as Success Action, but if you have have partial scored slides, you have to know that partial correct answers will trigger the Success action, which means that the user will not be able to reset and correct his answer.

    • Create a shape button as Reset button. In the example movie I used one of the images from the theme as Fill for a rectangle shape with no stroke, to have a look that is similar to the embedded quiz buttons. To have this button on all the question slides, you can either put it on the Quiz Master slides, or put it on the slide before the first question slide, make it invisible (Properties panel), time it for the rest of the project. I choose for the second work flow, because the shape button gets an ID, can be shown/hidden as wanted. It is not possible to put it on the first question slide, but I made it visible with the On Enter action of the first question slide. More information about buttons on question slide is to be found in a previous blog post: http://blog.lilybiri.com/want-a-button-on-question-slide-in-captivate.

    • The advanced action triggered by the On Success event of the button Bt_Reset is pretty simple:
      • jumps to the Score slide, which will increment the variable cpQuizInfoAttempts, start a new attempt, clears all answers
      • returns to the original slide, using the system variable cpInfoLastVisitedSlide
    • To avoid the user seeing the score slide, you'll need at least one slide before the score slide, and prevent navigation to the last slide. In this case I added one slide, that has no navigation button. Because the Reset button is still visible, I use the On Enter action of this slide to hide it.

    Tips

    • If you plan to use this action in multiple files, create a shared instead of an advanced action. It is easier to reuse a shared action because it is in the library which you can use as an external library.

    • This type of knowledge questions will probably be between content slides. You have to be aware that all answers are reset with each Reset button on one question slide. Maybe better warn the user if you allow free navigation with a playbar, a TOC or custom buttons.




    Dare to Share - part 2

    Intro

    In the first part of this series about Shared Actions (in Captivate 7) I explained how you can create a shared action. The examples only had the statements Show and Hide. At the end you could see a published CP-movie, in which shared actions were applied several times. This second part will explain the first way of using shared actions. As a surplus you'll get an explanation of the use case that you watched in the first part.

    'Execute Shared Action'

    The first way of using a shared action is with the command Execute Shared Action, that can be triggered by all the events explained in a previous post: Events and (advanced) Actions. You'll find this new command in the dropdown list, just below its sibling 'Execute Advanced Action'. 

    The only place, where you will not find this command, is in the dropdown list for Hyperlinks (Format accordion for Text). However it is available in the dropdown lists for Actions in the Drag&Drop interaction. Look out for an example of shared actions in D&D later on in this series. 

    When you have chosen a shared action, next to its name you'll not find the browser button (as for Advanced actions), but a Parameter button. When you click that button, you'll see a dialog box in which you can choose the parameters to apply. In this screenshot you'll see the highlighted Parameter button. This shared action is applied to one of the click boxes of the example in the first part of this series (see later: Use case). Two parameters are already assigned. To find the third one (a new click box) I clicked twice in the field and typed 'peer' (first characters "pe" would have be sufficient as well) to filter the list to those objects/groups that have the character sequence 'peer'. Consistent labeling is good practice, as I told multiple times! 

    I could have interchanged the items for second and third parameter, it doesn't matter because both will be made visible. You are totally free which items to use as parameters. As an illustration: here is the same shared action for the last click box: you'll see that the second item to show is not a click box, but a text container:

    Use Case - Description

    Slide objects

    Here is the timeline of this unique slide, it shows from bottom up:
    • Title
    • Image (circle)
    • Group with 4 click boxes, over the circle image; only the bottom one, CB_Social, is 'Visible in output', the others are invisible
    • Gr_Bubble, group with 4 shape buttons that are also text containers, all invisible at the start
    • Tx_Instruction, set to invisible, that will appear when the last click box is clicked, telling to click on one of the bubbles
    • Gr_HLCover, set to invisible, grouping the gray transparent shape covering the slide and a shape button to close the Lightbox
    • Gr_HLBox: set to invisible, group with 4 light boxes that are (again) shapes used as text containers.


    Events and Shared actions

    The used events that trigger shared actions are:

    • Success event for each of the click boxes, using the shared action Show2Hide1, you have seen examples of the shared actions above. Only the fourth click box had a slightly different use of the parameters: not a click box was shown but the instruction text Tx_instruction. There is no Failure action, because the attempts are left at Infinite.

    • Success event for each of the 'bubbles', the shape buttons, triggers the shared action Show2, showing both Gr_HLCover  and the appropriate lightbox. Again, the attempts are set to Infinite, no Failure action will ever be fired. Here is one example:
      If another slide would be following, at least one of those bubbles needs a pause, to keep the playhead stopped. The four click boxes are no longer visible, so their pause is no longer active, available to stop the slide.

    • Success event for the shape button Bt_CloseHL triggers the shared action Hide2. Wondering why I could use that same shape button with the same action, because there is not only the group Gr_HLCover to be hidden, but also the specific lightbox? Well, I don't hide one lightbox, but hide the whole group Gr_HLBox, which means the one that is visible will be hidden as well. 


    Visibility Shared Actions

    In the first part I already explained that the number of times shared actions are reused is visible in the library. Double-clicking on the library item you can open the dialog with the Usage button and have details of the events where that action is used. You can also open directly the Usage overview only, by clicking the chain button at the top of the Library:

    You will also see a nice summary in one of my favourite panels: Advanced Interaction (F9). Tip: this panel can be printed.

    What next?

    I did not see any comment in this blog yet, got some on other social media. Series is not finished, I plan to focus on reusing this kind of shared actions in the third part. That will be with another use case.