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