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





Update: If you are using 11.5.0476 or later, you can use a bitmap image (or a SVG) directly as button, without having to insert it as fill in a shape. It can have InBuilt states, but you cannot save the object style, which is a drawback. You'll find more info in this recent post:

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.




Dare to Share - part 1

Intro

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

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

Get your feet wet with Hide/Show 

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

Step by step

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

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

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

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

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


Use case: Highlight boxes

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

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

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

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

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

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


Feedback

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

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

New features in Captivate 7.01

Intro

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

Variables

In Captivate 7 we got 3 new system variables:

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

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

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

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

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

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

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

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

Variable Usage button!

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

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

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

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

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


Advanced Actions 

AA dialog box enhancements

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

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

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

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

New statements/commands in actions

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

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

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

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

Reusing actions between projects

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

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


Other features

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

Blog after Posterous? - ClickClick

Moving

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


Intro

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

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

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

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

ClickClick

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

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

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

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

Decision1 

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

Decision2 

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

Decision3

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

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

Example movie

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

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


Slide objects - variable

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

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

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

Advanced actions - events

EnterSlide

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

Bt_Click

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

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

Bt_Guess

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

Learned something?

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

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

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

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

Link score to attempts in Custom questions

Intro

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

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

Use case description

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

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

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

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

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

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

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

Example

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

Slides - Master slides

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

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

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

Objects Timed for Rest of Project

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

From bottom to top you see these objects:

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

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

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

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

 

Variable ecology

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

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

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

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

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

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

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

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

Events and Advanced actions

On Enter Slide events

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

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

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

     

Success event for Text Entry Boxes  triggers 'NotValidated'

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

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

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

Success event for Click Box triggers HotspotCorrect

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

Failure event for Click Box triggers HotspotNOK

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

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

 

Conclusion

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

Would really appreciate any comment, feedback.



 

Events and (advanced) Actions

Intro

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

In previous posts I offered:

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

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

Events - out of the box

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

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

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

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

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

Widgets to extend events

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

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

Both widgets are not yet supported for HTML5 output.

List

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

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

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

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

Aggregating results TEB's in Captivate

Intro

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

Example

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

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

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

The example has only 3 slides:

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

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

Here is the cheat sheet:

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

Objects on Questions slide

In the example (Captivate 6) this slide has:

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

Variables

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

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

Scenario 1

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

Events and variables 

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

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

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

Advanced Action (conditional) TEBCheck

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

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

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

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

Scenario 2

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

Events and variables

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

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

Advanced Actions (conditional) TEBCheck1 .... TEBCheck4

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

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

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