RE: win32lib: Tabbing between controls in/not in a group
- Posted by "Andrew Hall" <barnacle83-euforum at yahoo.com> Jul 05, 2004
- 549 views
Pete Lomax wrote: > How can I tab between controls when one of them is in a group? > Once it gets into the group, the cursor does not want to come out. > Run the following program and press Tab five or more times to see what > I mean (using 0.60.0; under 0.59.2 it skips the group, but that is not > what I want either): > > -- > -- test > -- > include win32lib.ew > constant > MOUSEOPT = create( Window, "Mouse Options", 0, 120, 70, 340, > 200,{WS_DLGFRAME,WS_SYSMENU}), > MOUSESCROLLG = create( Group, "Scroll lines", MOUSEOPT, 10, 10, 95, > 45, 0), > MOUSESCROLL = create( EditText, "", MOUSESCROLLG, 15, 15, 30, 20, 0), > ASIT = create( LText, "Autosave interval in seconds", MOUSEOPT, > 10,70,200,20,0), > ASI = create( EditText, "", MOUSEOPT, 210, 70, 60, 20, 0 ), > ASTS = create( CheckBox, "Autosave on Tab Switch?", MOUSEOPT, > 10,100,200,20,0), > MOK = create( DefPushButton, "OK", MOUSEOPT, 130, 130, 65, 25, 0 ) > > WinMain(MOUSEOPT,Normal) Yep. I've run into this difficulty as well. Here's the procedure I use--it's not the most efficient solution, but it works. Feel free to improve upon it. Also, note the use of the win32lib function setTabStops().
include win32lib.ew constant MOUSEOPT = create( Window, "Mouse Options", 0, 120, 70, 340, 200,{WS_DLGFRAME,WS_SYSMENU}), MOUSESCROLLG = create( Group, "Scroll lines", MOUSEOPT, 10, 10, 95, 45, 0), MOUSESCROLL = create( EditText, "", MOUSESCROLLG, 15, 15, 30, 20, 0), ASIT = create( LText, "Autosave interval in seconds", MOUSEOPT, 10,70,200,20,0), ASI = create( EditText, "", MOUSEOPT, 210, 70, 60, 20, 0 ), ASTS = create( CheckBox, "Autosave on Tab Switch?", MOUSEOPT, 10,100,200,20,0), MOK = create( DefPushButton, "OK", MOUSEOPT, 130, 130, 65, 25, 0 ) procedure setTabOrder(sequence flds) -- Sets the global tabbing order for a window. -- Using this procedure allows tabbing in and out of parent controls, -- such as Windows, Groups, TabItems, etc., so that the user is not "trapped" -- when he tabs to a control inside one of these. -- All control ids contained in flds must be in the same window. integer parent sequence parents parents = {} for i = 1 to length(flds) do parent = findParent(flds[i]) if not find(parent, parents) then parents &= parent end if end for for i = 1 to length(parents) do VOID = setTabStops(parents[i], flds) end for end procedure setTabOrder({MOUSESCROLL, ASI, ASTS, MOK}) WinMain(MOUSEOPT,Normal)