[jawsscripts] Frames and Scripts and Jaws ettc.

  • From: "Geoff Chapman" <gch@xxxxxxxxxxxxxxxx>
  • To: <jawsscripts@xxxxxxxxxxxxx>
  • Date: Tue, 11 Jan 2011 14:06:09 +1100

Hi martin/scripters.


Yep I loved frames, still do, though admittedly haven't used them for quite
a while though now. so hope fs haven't broken the jolly things eh. <grin.>
I do remember they discovered some Bug and tweaked things around version 10
or so? I just can't qquite remember what that was.
... I just haven't really got the time right now to go into all the caveats
I used to know about frames, and am loathe to anywayz in case they no longer
apply, and I lead people up the garden path, as they say here in Aus.
Main things I remember were, that
1. sometimes, when you were watching for a frame to trigger when the focus
moved inside the frame, i.e. when you tabbed, like in many terminal
emulation packages etc, I often found I had to insure the leftHand corner of
the frame, where the focus would most likely be first put, at left hand end
of field etc, was about 6 pixels extended from the normative jawsCursor
position on the very first letter of that field.  I'd of course use
AltShift+LeftArrow twice, when Jaws cursor active thus, before marking the
topLeft corner of the frame. That tended to insure greater reliability of
the OnFocus type frame triggering.


this also applied when setting them up as OnText type frame triggers, where
you were getting it to monitor for certain text to appear, again, insure the
frame was large enough at each end, to fully incorporate the text you've
asked it to watch for, else, again, of course it'd likely fail.
I can't rememeber now, but I think focusing right hand corner on the very
last cell, was usually sufficient for this, or going 12 pixels further, ...
I just can't quite recall now.
I think Frames were smart enough to cope with that for OnText stuff. using
GetTextInRect functions though I remember having to insure I made that
rightHand coordinate approx 12 pixels further to the right than the position
of the last cell I wanted included in the rect.

third, setting frame priorities.  That too I found could be important,
specially if/when you had a lot of frames watching for things all at once,
they are all set to 5 by default, and sometimes, along with taking care with
validation criteria, I've found that messing with priority setting also
could have an effect on reliability.

4th, in the olden days at least, dunno if they've fixed this yet, frames  I
found, couldn't be made to span anything less than 28 pixels.  even if you
only wer looking for a single character, which might for example span only 9
or so, it was tough cookies! you just couldn't make it monitor any less than
28 pixels in width. that was a bummer too, because sometimes, you'd want it
to.
Remember that frames can also be made to play or trigger other frames, so
you can have one watching for things in one place, and do other funky things
with other frames, when they fired.

5th, the frame viewer/manager  is very naughty and bad bad bad! in that if
you altTab away from it whilst open, you find it freezes and you can't shut
it down properly. so I would always wanna insure I closed it down, whilst
testing, even if I thought I might have to tweak more and go back in there
again.

bit nasty that one.

But, they are very powerful in my view, and if you know the system's pretty
much gunna remain current the way you set it up, i.e. not worry about screen
res's changing etc, you can do an awful lot with frames, and especially when
you combine them with either running scripts or, as I did far more often,
Running what frames viewer calls Script events.  which to my memory are
really more like functions.  You don't get offered the list of them, you
have to type them in yourself, but
these can be standard simple built in ones, like SayLine etc, or custom
functions you build yourself, whicch of course can contain all kinds of
logic.

The tip here is though, you don't include the Left and Right parens when
entering these in the Frame viewer actions dialog wizard thinggy.

That better do for now I guess eh.

oh, the other thing I'll say is, when watching for text and the screen might
jitter, or be written to the screen really quickly more than once, and all
you want is a single occurrance to trigger whatever action you have as part
of the frame parameters,
sometimes, I found it helpful to write a custom function that I'd build in
script land, which contained a ScheduleFunction inside it, which then might
call the speech output I wanted, but with, say, a value of 3 or something,
which effectively can then eliminate multiple actual speech output
occurrances, because of the type of CountDown timer like manner in which
scheduleFunctions work, in this kind of application of them.
.  But of course, remember that in frames land, when entering a ScriptEvent
as it's action parameter, you can't put anything with parameters or
arguments, so, because of course ScheduleFunction takes two parameters, I
think, goodness it's been a long time.  ... Then you need to do this trick
of building a custom function to run, which contains no parameters, and then
have the ScheduleFunction call, inside of that, to get around the limitation
of the no parameter rule in Frames land.

So, for example, in script manager you might create a no parameter function
like:

Void function ScheduledSpeakMyStuff ()
ScheduleFunction ("MyFunctionWhichSpeaksThings", 3)
EndFunction


And then when asked what action you want your frame to execute when it
fires,
you choose, RunScriptEvent, and then type:
"ScheduledSpeakMyStuff"
without of course, quotation marks, and again, no open/close parens either.

I put, scheduled, in the name to remind me that this is what it was doing
etc.

you might also wanna put a simple Debug/Checking Saystring here, either as
another separate action in your frame, or as the first line of your
SpeakMyStuff function, to help you know that it has truly fired.

But the scheduleFunction thing can just help to eliminate sometimes,
multiple speech actions, if the frame triggers multiple times really
quickly.

I know this isn't everything, but I hope it helps anyone wanting to mess
with them a bit. I personally think for a newby scripter, using frames can
eliminate a whole bunch of very complicated things one has to learn, if one
is using alternative monitoring scripty methods, of ScheduleFunction calls
in their more traditional way, to continue to check for things every xx
seconds etc. Which is great, but, as I say, takes considerable knowledge,
more, I reckon, than using frames.

You can also of course, just go crazy and hardwire some logic direct into
NewTextEvent itself, as I also sometimes did, placing some if, then,
conditional logic in there, when I didn't wanna use frames. as in, if xx
text comes in anywhere on the screen, (which is what newTextEvent does, and
without using frames I haven't yet worked out a way to simulate it's looking
for a particular position for that text as one of my conditions, except to
use things like directly checking GetTextInRect (Left, Top, Right, Bottom)
coordinates etc,
then do xxx, which could be a function which does check if that text
occurred at a certain point or rect on the screen. if not, EndIf, and of
course at the end, call Default NewTextEvent. Very important that bit eh.
But I don't recommend this, as newTextEvent does fire an awful lot, and if
you mess things up here, or put too much stuff in this function, it may have
a hit on performance.  depends on lots of things of course.


Anywayz, I know this is rushed, and not really adequately explained, but
just now and for the next 10 days I can't be answering any more on this one
if anyone asks, maybe write to me after the 22nd, and I'll try and elaborate
better?

GC

From: "Martin Slack" <m.g.slack@xxxxxxxxxxxx>
To: <jawsscripts@xxxxxxxxxxxxx>
Sent: Friday, January 07, 2011 10:23 PM
Subject: [jawsscripts] Re: Reading changed values automatically


> Hi Geoff,
>
>   You say you haven't done much testing on the window relative positioning
> of frames, but you can't possibly have done less than I have.  I looked
> briefly at frames when I first started with Jaws, but scripting seemed
such
> a cleaner way to go that I haven't really looked at them for years.  For
> this particular problem, it happens that frames have the feature of
enabling
> speech to be triggered fairly painlessly by new text events, and that may
> well make them the better option, especially if the user is going to be
> doing something else in the foreground while waiting for the speech
update,
> something which I haven't really addressed so far with my scripts.
>
>   Martin
>
>
>
> ----- Original Message ----- 
> From: "Geoff Chapman" <gch@xxxxxxxxxxxxxxxx>
> To: <jawsscripts@xxxxxxxxxxxxx>
> Sent: Thursday, January 06, 2011 10:34 PM
> Subject: [jawsscripts] Re: Reading changed values automatically
>
>
> > Martin your vibe on frames being relative to the screen and not the app
> > window
> > interests and concerns me. I admit I haven't done lots of testing on
this
> > precise attribute, but, in the frames definition, there is definitely a
> > parameter which stipulates whether the frame should be relative to the
> > window boarder, or to screen.  Do you believe then, that this parameter
> > just
> > doesn't work as advertized? Or have I missed it's purpose do you think.
> >
> > I've used frames hugely in my earlier work before I had any concept of
the
> > far more complex whiles of insighting NewTextEvent, or ScheduleFunction,
> > to
> > continually monitor stuff. and I've had great success with them really.
> > I'ts not that hard to maximize the app window anywayz, and if it's only
> > for
> > oneself, or on single puters that aren't gunna be messing with Screen
Res,
> > then I don't personally see the negatives of using frames that many seem
> > to
> > attribute to their use?
> >
> > To the person originally asking the question, have you studied the
> > documentation on use of frames?  There's much good information in the
help
> > docs on their usage eh. But the biggest kickstarter I'll give you, is
that
> > after you've defined them, you need to pay particular attention to
what's
> > called the validation criteria, which the auto definition editor
ascribes
> > to
> > the frame when defining it with controlShiftLeft/Right brackets, next to
> > p,
> > for top left and Bottom right hand corners.
> >
> > You do need to almost always go in and check those, and eliminate any
> > information from the window title, that you believe might break the
frame
> > from working, i.e. being valid, in other environmental situations.  It's
> > called eliminating dynamic criteria.  There's a whole lot more to these
> > than
> > I can explain here today, but, in my view, they're a heap simpler for
the
> > newby scripter to start utilizing to solve tasks, than learning how to
do
> > it
> > in script land.
> >
> >
> > Geoff C.
> >
> > ----- Original Message ----- 
> > From: "Martin Slack" <m.g.slack@xxxxxxxxxxxx>
> > To: <jawsscripts@xxxxxxxxxxxxx>
> > Sent: Thursday, January 06, 2011 9:18 AM
> > Subject: [jawsscripts] Re: Reading changed volues automatically
> >
> >
> >> Can Kirca,
> >>
> >>   Sorry about the delay.  I asked about static text.  I was really
hoping
> >> for more than the single word "in", if only because such a short word
> > might
> >> well occur somewhere else on the page, and lead us astray.
> >>
> >>   The proposal from Reed to use a frame certainly requires thought.
The
> >> frame is designed to be able to be set up so that speech is triggered
> >> when
> >> new text appears.  This would work around the problem with my proposal
of
> >> having to wait for a few seconds after the text changes before the
script
> >> looks again.  The downsides of using frames are that users run into
> > problems
> >> when using different screen resolutions or window sizes, since the
frame
> > is
> >> defined with respect to the screen itself, not the window.
> >>
> >>   We could take either approach.  You must decide which is preferable
in
> >> your case.  Is it better to have the text spoken immediately, or to be
> > able
> >> to run the application window whether it is maximised or not?
> >>
> >>   Martin
> >>
> >>
> >> ----- Original Message ----- 
> >> From: "Can Kirca" <cankirca@xxxxxxxxx>
> >> To: <jawsscripts@xxxxxxxxxxxxx>
> >> Sent: Wednesday, January 05, 2011 9:26 PM
> >> Subject: [jawsscripts] Re: Reading changed volues automatically
> >>
> >>
> >> > Martin,
> >> > I'm waiting your answer, are you there?
> >> > thanks alot
> >> > ----- Original Message ----- 
> >> > From: "Martin Slack" <m.g.slack@xxxxxxxxxxxx>
> >> > To: <jawsscripts@xxxxxxxxxxxxx>
> >> > Sent: Wednesday, January 05, 2011 10:04 AM
> >> > Subject: [jawsscripts] Re: Reading changed volues automatically
> >> >
> >> >
> >> >> Can Kirca
> >> >>
> >> >>        Sorry, I was rather tired last night, and didn't notice your
> > code.
> >> >>
> >> >>  First I would say that the procedure you are using seems rather
> >> >> complicated,  having to move up and down as well as left and right.
> >> >> Is
> >> >> there any static text (text that never changes) on the same line as
> >> >> the
> >> >> changing figures you want spoken?  If so we ought to be able to use
> >> >> the
> >> >> FindString function to move straight to that line in one go.  We
might
> > do
> >> >> that in a function that we schedule to run at short intervals, say
> > every
> >> >> 30
> >> >> seconds or every minute, and only speak if the number has changed
> >> >> since
> >> >> the
> >> >> last read.
> >> >>
> >> >>  How does that sound?
> >> >>
> >> >>  Martin
> >> >>
> >> >>
> >> >> ----- Original Message ----- 
> >> >> From: "Can Kirca" <cankirca@xxxxxxxxx>
> >> >> To: <jawsscripts@xxxxxxxxxxxxx>
> >> >> Sent: Tuesday, January 04, 2011 11:28 PM
> >> >> Subject: [jawsscripts] Re: Reading changed volues automatically
> >> >>
> >> >>
> >> >>> Hi Martin,
> >> >>> I paysted my code here.
> >> >>> when I press ctrl+shift+4 jaws says number of wating visiters
> >> >>> I want to modify this script to say number of wating visiters
> >> >>> automatically
> >> >>> when it change.
> >> >>> ----- Original Message ----- 
> >> >>> From: "Martin Slack" <m.g.slack@xxxxxxxxxxxx>
> >> >>> To: <jawsscripts@xxxxxxxxxxxxx>
> >> >>> Sent: Wednesday, January 05, 2011 1:13 AM
> >> >>> Subject: [jawsscripts] Re: Reading changed volues automatically
> >> >>>
> >> >>>
> >> >>>> There are a couple of possibilities.  To start with, could you
copy
> > and
> >> >>>> paste your code into an email to the list and explain to us how it
> >> >>>> works
> >> >>>> at
> >> >>>> the moment?  This should provide a starting point.
> >> >>>>
> >> >>>>  Martin
> >> >>>>
> >> >>>>
> >> >>>> ----- Original Message ----- 
> >> >>>> From: "Can Kirca" <cankirca@xxxxxxxxx>
> >> >>>> To: <jawsscripts@xxxxxxxxxxxxx>
> >> >>>> Sent: Tuesday, January 04, 2011 10:32 PM
> >> >>>> Subject: [jawsscripts] Reading changed volues automatically
> >> >>>>
> >> >>>>
> >> >>>>> Hi,
> >> >>>>> I'm using a software in our office for talking with customer.
> >> >>>>> I created a simple script for reading how many visiters wating
for
> >> >>>>> chat.
> >> >>>>> my script worked correctly but now, I want to modify my script as
> > read
> >> >>>>> number of wating visiters automatically  when it change.
> >> >>>>> could you help me please?
> >> >>>>> my script is:
> >> >>>>> Script WaitingForChat ()
> >> >>>>>
> >> >>>>> SpeechOff ()
> >> >>>>>
> >> >>>>> SaveCursor ()
> >> >>>>>
> >> >>>>> InvisibleCursor ()
> >> >>>>>
> >> >>>>> JAWSTopOfFile ()
> >> >>>>>
> >> >>>>> JAWSPageUp ()
> >> >>>>>
> >> >>>>> NextLine ()
> >> >>>>>
> >> >>>>> NextLine ()
> >> >>>>>
> >> >>>>> NextLine ()
> >> >>>>>
> >> >>>>> NextLine ()
> >> >>>>>
> >> >>>>> PriorLine ()
> >> >>>>>
> >> >>>>> JAWSEnd ()
> >> >>>>>
> >> >>>>> PriorWord ()
> >> >>>>>
> >> >>>>> PriorWord ()
> >> >>>>>
> >> >>>>> PriorWord ()
> >> >>>>>
> >> >>>>> SpeechOn ()
> >> >>>>>
> >> >>>>> If GetWord () == "in" then
> >> >>>>>
> >> >>>>> PriorWord ()
> >> >>>>>
> >> >>>>> PriorWord ()
> >> >>>>>
> >> >>>>> PriorWord ()
> >> >>>>>
> >> >>>>> SayWord ()
> >> >>>>>
> >> >>>>> else
> >> >>>>>
> >> >>>>> SayWord ()
> >> >>>>>
> >> >>>>> EndIf
> >> >>>>>
> >> >>>>> PCCursor ()
> >> >>>>>
> >> >>>>> RestoreCursor ()
> >> >>>>>
> >> >>>>> EndScript
> >> >>>>>
> >> >>>>>
> >> >>>>>
> >> >>>>> Thanks
> >> >>>>>
> >> >>>>> __________�
> >> >>>>>
> >> >>>>> View the list's information and change your settings at
> >> >>>>> //www.freelists.org/list/jawsscripts
> >> >>>>>
> >> >>>>
> >> >>>> __________�
> >> >>>>
> >> >>>> View the list's information and change your settings at
> >> >>>> //www.freelists.org/list/jawsscripts
> >> >>>>
> >> >>>
> >> >>> __________�
> >> >>>
> >> >>> View the list's information and change your settings at
> >> >>> //www.freelists.org/list/jawsscripts
> >> >>>
> >> >>
> >> >> __________�
> >> >>
> >> >> View the list's information and change your settings at
> >> >> //www.freelists.org/list/jawsscripts
> >> >>
> >> >
> >> > __________�
> >> >
> >> > View the list's information and change your settings at
> >> > //www.freelists.org/list/jawsscripts
> >> >
> >>
> >> __________�
> >>
> >> View the list's information and change your settings at
> >> //www.freelists.org/list/jawsscripts
> >>
> >
> > __________�
> >
> > View the list's information and change your settings at
> > //www.freelists.org/list/jawsscripts
> >
>
> __________�
>
> View the list's information and change your settings at
> //www.freelists.org/list/jawsscripts
>

__________�

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

Other related posts:

  • » [jawsscripts] Frames and Scripts and Jaws ettc. - Geoff Chapman