changing border color of a slide image after clicking on it

David McFarlane mcfarla9 at msu.edu
Wed Oct 16 16:31:11 UTC 2013


Hans,

Ah, there's the confusion -- you referred to "SoundOut" when you meant 
"SlideSound".  SoundOut and SlideSound share a lot of properties, but 
they are two different things that are used in different ways.  You do 
not have a SoundOut in your Procedure, just a SlideSound as a sub-object 
of your Slide.

Now here is my restatement of your specifications:
- E-Prime simultaneously presents a visual stimulus (containing a number 
of target areas) and starts playing a sound.
- The visual stimulus remains until, and only until, the sound the 
finishes playing.
- The subject uses the mouse to respond by clicking target areas on the 
display, and when the subject clicks on a target area, the border of 
that area changes color.

Now you are just stuck accomplishing that second objective.  For that, I 
think you need to use SoundBuffer.Status -- see that topic in the 
E-Basic Help facility.  You will also have to get access to the 
SoundBuffer object that plays your sound -- for that, just browse the 
related topics in the E-Basic Help facility, and/or look at 
sound-related code generated for you by E-Studio (that's how I figure 
all this stuff out, if I can do that then so can you :) ).  And of 
course, you may also always contact PST Support for help, see below.

Best,
-----
David McFarlane
E-Prime training online: 
http://psychology.msu.edu/Workshops_Courses/eprime.aspx
Twitter:  @EPrimeMaster (twitter.com/EPrimeMaster)

/-----------
Stock reminder:  1) I do not work for PST.  2) PST's trained staff take 
any and all questions at 
http://support.pstnet.com/e%2Dprime/support/login.asp , and they strive 
to respond to all requests in 24-48 hours -- this is pretty much their 
substitute for proper documentation, so make full use of it.  3) In 
addition, PST takes questions at their Facebook page 
(http://www.facebook.com/pages/Psychology-Software-Tools-Inc/241802160683 
), and offers several instructional videos there and on their YouTube 
channel (http://www.youtube.com/user/PSTNET ) (no Twitter feed yet, 
though).  4) If you do get an answer from PST staff, please extend the 
courtesy of posting their reply back here for the sake of others.
\-----------


haslinger.hans11 at gmail.com wrote:
> Hallo David
>  
> Thank you for your help.
>  
> 
>     At this point I would need you to draw 
> 
>     out a very clear diagram of your Procedure structure, along
>     with clear specifications of what you want it to do
> 
>  
> The Procedure looks  like this:
>  
>  
> ...
> ...
>  
> ExternalCausesProc
>       ExternalCausesList
>            ExternalCausesTrialProc
>                Instruction (TextBox)
>                restart2 (Label)
>                ExternalCausesSlide (Slide)
>                InLine2 (InLineCode)
> ...
> ...
>  
>  
> After a short Instruction, there is an Image presented on the 
> ExternalCausesSlide as a Stimulus (e.g. child is getting a birthday 
> present).
> There is also a SoundOut on the ExternalCausesSlide which describes the 
> scene in the Image.
> Additionaly there are 4 smaller Images as possible answers for the 
> Stimulus Image.
> I've made an attribute for every Image and the SoundOut in my 
> ExternalCausesList.
>  
> Subjects should have time to click on one of the 4 target Images until 
> the SoundOut was played completely.
> I want to highlight the Image a subject chooses by changing the border 
> color of that Image to "cyan" (black is my default border color) so the 
> subject knows that its answer was registered and it can change the 
> current answer (this is another thing i could need some help with).
>  
> I tried to implement the following code (which i've found somewhere in 
> this google group) for changing the border color to "cyan" and back to 
> "black" (default setting) before a new Stimulus is presented:
>  
> Dim hitObject As SlideImage
>    Set hitObject = 
> CSlideImage(ExternalCausesSlide.States("Default").Objects(strHit))       
>   
>             hitObject.BorderColor = CColor("cyan")
>             hitObject.Draw
>             Sleep 5000
>   
>       hitObject.BorderColor = CColor("black")
>  
>  
>  
> The current slide should be terminated after the Sound is played so I've 
> set  "End Sound Action" to "Terminate"    and "End Action" (in the 
> ExternalCausesSlide Properties) to "none".
> Now the color changed to "cyan" after the Sound was played  and not 
> immediately after the click.
>  
> So i've changed the Settings to "End Action" -> "Terminate" and 
> "EndSoundAction" -> "Terminate".
> Now the color changed immediately after the click occured and remained 
> "Cyan" for 5sec before changing back to "black". 
> But if the click occured at the end of the SoundOut with less than 5sec 
> remaining, there was an interference with the Sound of the following 
> Stimulus.
>  
> Then I've tried "End Action" -> "Terminate" and "End Sound Action" -> 
> "none".
> Now the Color changes immediately after the click and remains for the 5 
> sec no matter if the Sound is completely played or not.
> But if no click occurs, there is no termination.
>  
>  
> Now I thought I could use the "Terminate/Terminate"-setting  and a Sleep 
> time which is equal to the remaining duration of the sound file after 
> the click occured, (something like  Sleep "Duration Sound - RT (Time 
> until click?)).
> This way, the slide would terminate after the click + Sleep time or if 
> the sound file was played completely (if there was no click).
> There would also not be any interference with the following Sound file, 
> because the Sleep time is never longer than the Sound file itself.
>  
>  
>  
> 
>     That said, first, you do not understand your code correctly.  As
>     written, it means the color of the image, which was clicked, changes
>     to "cyan" and would later change to "black" at whatever time your
>     hitObject gets redrawn, and goodness knows when that will happen.
> 
>  
>  
> Actually, it changes back to "black".
> But maybe that is just because "black" ist my default border color and 
> the settings are just reset to the default settings after Sleep.
>  
>  
> 
>     As a general strategy, I prefer to do as much as possible through the
>     program structure & object properties, and to leave less to inline code.
> 
>  
>  
> Actually this was the prefered strategy for my project and it worked 
> fine except for strHitTest for collecting Mouse Responses and logging 
> the correct answer.
> Basically my program is completed, but i would like to add some little 
> improvements, like this highlighting thing, to make it look better  
>  
> I hope my remarks are not too confusing.
>  
>  
> Best regards
> Hans
>  
>  
> 
> Am Dienstag, 15. Oktober 2013 16:37:46 UTC+2 schrieb McFarlane, David:
> 
>     Hans,
> 
>     I am afraid that I do not quite follow all of this.  You refer to a
>     Slide, a SoundOut, and an Inline, and I do not know how they all
>     interrelate (in particular, I do not recall the complication of a
>     SoundOut in your first post).  At this point I would need you to draw
>     out a very clear diagram of your Procedure structure, along with
>     clear specifications of what you want it to do.
> 
>     That said, first, you do not understand your code correctly.  As
>     written, it means the color of the image, which was clicked, changes
>     to "cyan" and would later change to "black" at whatever time your
>     hitObject gets redrawn, and goodness knows when that will happen.  If
>     you want your inline code to make the BorderColor black, then you
>     must also follow that line with another hitObject.Draw command, which
>     is missing from your code without comment.  If you left that out on
>     purpose (e.g., because the redraw will be taken care of by a later
>     object), then you must add a comment to your code to explain that.
> 
>     As far as settting the Sleep time to something like "remaining time
>     of SoundOut", I suppose you might use some combination of Clock.Read,
>     SoundOut.TargetOffsetTime, and GetNextTargetOnsetTime, but I think
>     that a sloppy way to do things.  I would generally rather let the
>     SoundOut handle the timing, and then follow that with more inline
>     code to do whatever needs doing.  Again, we need a better look at
>     your Procedure structure, you may need to revise it.
> 
>     As a general strategy, I prefer to do as much as possible through the
>     program structure & object properties, and to leave less to inline
>     code.
> 
>     Regards,
>     -- David McFarlane
> 
> 
>     At 10/15/2013 04:56 AM Tuesday, haslinge... at gmail.com <javascript:>
>     wrote:
>      >Hallo David
>      >
>      >
>      >I've tried another code for the changing border color part:
>      >
>      >Dim hitObject As SlideImage
>      >Set hitObject =
>      >CSlideImage(ExternalCausesSlide.States("Default").Objects(strHit))
>      >   hitObject.BorderColor = CColor("cyan")
>      >         hitObject.Draw
>      >         Sleep 5000
>      >   hitObject.BorderColor = CColor("black")
>      >
>      >
>      >If I understood this code right, that means the color of the
>      >image,which was clicked, changes to "cyan "and after 5 sec it
>      >changes back to "black".
>      >
>      >But now I have some problems timing the change of color and the
>     sound file.
>      >
>      >At first I set "End Action" in the Slide Properties to "(none)" and
>      >"End Sound Action" in the Slide Sound Out Properties to "Terminate".
>      >Then the color was only changing after the soundfile was over.
>      >
>      >Then I changed the settings to "End Action" -> Terminate and added
>      >"Sleep 5000" in the inline code.
>      >Now the color changes immediately after clicking and stays for the
>      >5sec before changing back to black
>      >But if the Sleep Time after clicking is longer then the remaining
>      >time of the SoundOut, the SoundOut of the next Slide State isn't
>     starting.
>      >
>      >Is there any command which sets the Sleep time to something like
>      >"remaining time of SoundOut"?
>      >
>      >
>      >Best regards
>      >Hans

-- 
You received this message because you are subscribed to the Google Groups "E-Prime" group.
To unsubscribe from this group and stop receiving emails from it, send an email to e-prime+unsubscribe at googlegroups.com.
To post to this group, send email to e-prime at googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/e-prime/525EBF4F.7070300%40msu.edu.
For more options, visit https://groups.google.com/groups/opt_out.



More information about the Eprime mailing list