[jawsscripts] Re: double speaking of controls

  • From: Steve Matzura <number6@xxxxxxxxxxxxx>
  • To: jawsscripts@xxxxxxxxxxxxx
  • Date: Sat, 10 Jul 2010 08:06:34 -0400

Amazing.  I mean, it's amazing how Windows programs misbehave like
this.  OK, I'll go through it and find out what's causing it.  Oddly
enough, it only started the double-speaking when I added tutor
messages to certain controls.

On Fri, 09 Jul 2010 12:21:31 -0400, you wrote:

>This can happen if some event causes a function to occur more than once
>when the focus changes.
>
>I fixed this once in an app that I was scripting by modifying the
>SayObjectTypeAndText function for that application.  You will need to
>determine just which function is actually being used to speak the
>control.  I would start by creating a function by that name and
>including a saystring or some other statement to speak something so that
>you know if this is the function that needs to be changed. If this is
>the right function, you will probably hear Jaws speak your string once
>or more times each time you press the tab key.  If this is the case and
>you do hear this double speaking of your string, then you will know what
>function to modify.
>
>Next you will need to declare a global variable to contain the name or
>whatever information is being spoken when the control gains focus.
>
>I will include below the function that I wrote which I hope will give
>you some idea on how to proceed.
>
>The Global variable I declared was called gsFieldName and it was a
>string variable.
>the following statement will do this.
>globals string gsFieldName
>
>The problem I was addressing in this situation was the fact that Jaws
>was speaking the name of the field each time I typed any character  into
>the edit field. therefore I wanted Jaws to speak only when the name of
>the field changed.  You will see that in the SayobjectTypeAndText
>function I checked to see which Dialogue or real window names were being
>used and I only called the speakeditFields function for those dialogues.
> If these dialogues were not being used, I called the default version of
>SayobjectTypeAndText function. This way I make sure that I continue to
>get the benefits of the default Jaws functionality when appropriate.
>
>Void Function SayObjectTypeAndText (int id)
>var string sName, string sClass, handle hwnd
>let sName = GetWindowName (GetRealWindow (GetFocus ()))
>let sClass = GetWindowClass (GetFocus ())
>if (StringContains (sName, "Search -  Formulaire de recherche")
>       || StringContains (sName, "Electronic - Électronique")
>       ) then 
>       if (StringContains (sName, "Electronic - Électronique" ) && 
>               StringContains (sClass, "EDIT")) then 
>                       ScheduleFunction ("SpeakEditFields", 1)
>                       RETURN ; get out so that default function is not
>performed.
>       endif
>
>endif
>SayObjectTypeAndText (id)
>
>
>EndFunction
>
>Now here is the SpeakEditFields function.
>The looping through window names is specific to my application and
>would not normally be necessary.  However it will provide an idea of
>what can be done to obtain the name of a window.  Notice that I used the
>StringContains function to determine if the window name  was the same. 
>The StringContains function will return a positive number if the string
>is found and will return false or zero if the string is not found.  So
>in this case I want nothing to happen if the string is found and if the
>string is different, I want the name of the field to be spoken and I
>want the value of the global variable to be set to the value for the new
>name.
>I hope I have explained this well enough to give you some ideas for
>your scripts.
>Void Function SpeakEditFields ()
>var string sLabel, handle hwnd, string sName
>let hwnd = GetParent (GetFocus ())
>let hwnd = GetFirstWindow (hwnd)
>while (StringLength (sName)<1)
>       let sName = GetWindowName (hwnd)
>       let hwnd = GetNextWindow (hwnd)
>endwhile
>if (StringContains (gsFieldName, sName)) then ; do nothing 
>else
>       let gsFieldName = sName
>       IndicateControlType (wt_edit, sName, GetWindowText (GetFocus (),
>false))
>
>endif
>
>EndFunction
>
>
>David Farough
>Application Accessibility Coordinator/coordonateur de l'accessibilité 
>Information Technology Services Directorate /
>Direction des services d'information technologiques
>Public Service Commission / Commission de la fonction publique
>Email / Courriel:  David.Farough@xxxxxxxxxxxxx
>Tel. / Tél:    (613) 992-2779 >>> Steve Matzura <number6@xxxxxxxxxxxxx>
>01:12 AM Friday, July 09, 2010 >>>
>
>Last lickable problem: Why do all the tutor messages and controls that
>have them speak twice when I tab through the pane?
>
>
>
>This e-mail message is intended for the named recipient(s) and 
>may contain information that is privileged, confidential and/or 
>exempt from disclosure under applicable law. Unauthorized 
>disclosure, copying or re-transmission is prohibited. If you are not 
>a named recipient or not authorized by the named recipient(s), or 
>if you have received this e-mail in error, then please notify the 
>sender immediately and delete the message and any copies.
> 
>Ce courriel est destine exclusivement au destinataire mentionne 
>en titre et peut contenir de l'information privilegiee, confidentielle 
>ou soustraite a la communication aux termes des lois 
>applicables. Toute divulgation non autorisee, toute reproduction 
>ou reacheminement est interdit. Si vous n'etes pas le 
>destinataire de ce courriel, ou n'etes pas autorise par le 
>destinataire vise, ou encore, si vous l'avez recu par erreur, 
>veuillez le mentionner immediatement a l'expediteur et supprimer 
>le courriel et les copies. 
__________�

View the list's information and change your settings at 
http://www.freelists.org/list/jawsscripts

Other related posts: