RE: getFocus & setFocus

new topic     » goto parent     » topic index » view thread      » older message » newer message

Derek Parnell wrote:
> 
> 
> ----- Original Message ----- 
> From: "Ron Austin" <ronaustin at alltel.net>
> To: <EUforum at topica.com>
> Subject: getFocus & setFocus
> 
> 
> > We have a program that has a main window, a listview window, a menu bar, 
> > 
> > a tool bar, 7 Tool tips,  7 labels and 7 EditText controls Data[1] thru 
> > Data[7].  We want to change focus to the next EditText control when we 
> > hit the Enter key or down arrow and change to the previous EditText 
> > control when we hit the up arrow key.
> > 
> > This is working ok, so far.  We set pos=1 to begin with and then add or 
> > subtract from it, being carefull not to go over 7 or under 1.
> > 
> > The problem comes in if someone uses the mouse to change the focus to 
> > another control.  We tried using getFocus() but instead of returning a 
> > nunmber from 1 to 7, it returns 7,5,4,19,34,33,32
> > These controls were created one after the other.  Why don't it assign an 
> > 
> > id in assending sequential order?
> 
> Well, there are some very good reasons why control ids are not numbered 
> in the same order that they are created. The main reasons are that some 
> controls are created implicitly rather than you  explictly by the coder, 
> and when control's are destroyed, win32lib re-uses the id number and 
> other variables for efficiency, and blocks of id numbers and associated 
> variables are created at a time - also for efficiency reasons. 
> 
> One way to easily do what you are attempting is to place the seven 
> control ids into their own sequence and cycle through that sequence.
> 
> For example...
> 
>   sequence Edits
>   Edits = {Edit1, Edit2, Edit3, Edit4, Edit5, Edit6, Edit7}
>   integer CurrentEdit
>   CurrentEdit = 1
>   . . .
>   -- Up 
>   if CurrentEdit > 1 then
>       CurrentEdit -= 1
>       setFocus(Edits[CurrentEdit])
>   end if
>   . . .
>   -- Down
>   if CurrentEdit < 7 then
>       CurrentEdit += 1
>       setFocus(Edits[CurrentEdit])
>   end if
>   . . .
>   -- User Changes Focus
>   procedure Focus_Edits(integer self, integer event, sequence parms)
>      CurrentEdit = find(self, Edits)
>   end procedure
>   setHandler(Edits, w32HGotFocus, routine_id("Focus_Edits"))
> 
> 
> --
> Derek
> 
> 
> Thanks Elliot and Derek.  I tried Elliot's solution first and it works 
> just like I want it to.  Sure is nice to have knowledgeable people reply 
> so I can get several solutions.

Two more problems have popped up.  First, is there a way to keep the 
bell from beeping when the enter key is hit?  It makes you think there 
is an error when there is not.

Second, when using arrows to go up and down through the controls, when 
it hits a combo box it starts scrolling through the list instead of 
continuing up or down.  I understand why it's doing this and doubt if 
there is a solution, but it never hurts to ask.

Thanks again for the help

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu