1. Win32lib focus problem
- Posted by Alexander Toresson <toressonodakra at swipnet.se> Dec 05, 2004
- 475 views
Try this piece of code:
without warning include win32lib.ew integer main, mle, msgedit main = create(Window, "Click in the one-line text-edit and press enter", 0, 200, 200, 500, 300, 0) mle = create(MleText, "", main, 0, 0, 450, 100, 0) msgedit = create(EditText, "", main, 0, 150, 450, 23, 0) WinMain(main, Normal)
Pressing enter in the EditText will automatically give focus to the MleText! Why? I tried to do a work-around by setting the focus to the EditText when receiving a VK_ENTER keypress. Didn't work. The focus was still set to the MleText. Then I tried setting focus to the MleText. And that gave focus to the EditText! Win32lib seems to mix them up. And this work-around will stop working when this bug is fixed :( Regards, Alexander Toresson Shhh! Be vewy quiet! I'm hunting wuntime ewwows!
2. Re: Win32lib focus problem
- Posted by Greg Haberek <ghaberek at gmail.com> Dec 05, 2004
- 454 views
> }}} <eucode> > > without warning > include win32lib.ew > integer main, mle, msgedit > > main = create(Window, "Click in the one-line text-edit and press enter", 0, > 200, 200, 500, 300, 0) > > mle = create(MleText, "", main, 0, 0, 450, 100, 0) > msgedit = create(EditText, "", main, 0, 150, 450, 23, 0) I'm not sure why this happens, but add this, I tested it and it works.
procedure msgedit_keypress( integer self, integer event, sequence params ) if params[1] = VK_RETURN then -- ignore the Enter key returnValue(-1) end if end procedure setHandler( msgedit, w32HKeyPress, routine_id("msgedit_keypress") )
> WinMain(main, Normal) > > </eucode> {{{ ~Greg
3. Re: Win32lib focus problem
- Posted by Alexander Toresson <toressonodakra at swipnet.se> Dec 05, 2004
- 442 views
Greg Haberek wrote: > > > }}} <eucode> > > > > without warning > > include win32lib.ew > > integer main, mle, msgedit > > > > main = create(Window, "Click in the one-line text-edit and press enter", 0, > > 200, 200, 500, 300, 0) > > > > mle = create(MleText, "", main, 0, 0, 450, 100, 0) > > msgedit = create(EditText, "", main, 0, 150, 450, 23, 0) > > I'm not sure why this happens, but add this, I tested it and it works. > > }}} <eucode> > procedure msgedit_keypress( integer self, integer event, sequence params ) > > if params[1] = VK_RETURN then > -- ignore the Enter key > returnValue(-1) > end if > > end procedure > setHandler( msgedit, w32HKeyPress, routine_id("msgedit_keypress") ) > </eucode> {{{ > > > WinMain(main, Normal) > > > > </eucode> {{{ > > ~Greg > I tried using that technique. However, I was still setting the focus to the msgedit after that, having the effect of activating the mle. Your solution works wonderfully Regards, Alexander Toresson Shhh! Be vewy quiet! I'm hunting wuntime ewwows!
4. Re: Win32lib focus problem
- Posted by Derek Parnell <ddparnell at bigpond.com> Dec 05, 2004
- 452 views
Alexander Toresson wrote: > > Greg Haberek wrote: > > > > > }}} <eucode> > > > > > > without warning > > > include win32lib.ew > > > integer main, mle, msgedit > > > > > > main = create(Window, "Click in the one-line text-edit and press enter", > > > 0, 200, 200, 500, 300, 0) > > > > > > mle = create(MleText, "", main, 0, 0, 450, 100, 0) > > > msgedit = create(EditText, "", main, 0, 150, 450, 23, 0) > > > > I'm not sure why this happens, but add this, I tested it and it works. > > > > }}} <eucode> > > procedure msgedit_keypress( integer self, integer event, sequence params ) > > > > if params[1] = VK_RETURN then > > -- ignore the Enter key > > returnValue(-1) > > end if > > > > end procedure > > setHandler( msgedit, w32HKeyPress, routine_id("msgedit_keypress") ) > > </eucode> {{{ > > > > > WinMain(main, Normal) > > > > > > </eucode> {{{ > > > > ~Greg > > > > I tried using that technique. However, I was still setting the focus to > the msgedit after that, having the effect of activating the mle. > Your solution works wonderfully > If you look up the documentation for EditText you will find ... Note that when the user presses the Return Key, the focus will move to the next control in the focus order. To prevent this from happening, you need to set a w32HKeyPress handler that sets the return value to -1 when a VK_RETURN key without shifts is received.
procedure IgnoreReturn(integer self, integer event, sequence parms) if parms[1] = VK_RETURN and parms[2] = 0 then returnValue(-1) end if end procedure setHandler(myEditField, w32HKeyPress, routine_id("IgnoreReturn"))
-------------------- I put this in because the common thing that people do when pressing Return in an Edit field is to think that they have finished with that field and now wants to deal with the next field. It is in effect the same as pressing Tab in the field. But now that I can see that it could be awkward to change this behaviour in some circumstances, I will add a new property to controls so that you can use this behaviour (or not) on a per control basis. -- Derek Parnell Melbourne, Australia
5. Re: Win32lib focus problem
- Posted by CoJaBo <CoJaBo_EUforum_Address at CJBN.net> Dec 05, 2004
- 472 views
Derek Parnell wrote: > > Alexander Toresson wrote: > > > > Greg Haberek wrote: > > > > > > > }}} <eucode> > > > > > > > > without warning > > > > include win32lib.ew > > > > integer main, mle, msgedit > > > > > > > > main = create(Window, "Click in the one-line text-edit and press enter", > > > > 0, 200, 200, 500, 300, 0) > > > > > > > > mle = create(MleText, "", main, 0, 0, 450, 100, 0) > > > > msgedit = create(EditText, "", main, 0, 150, 450, 23, 0) > > > > > > I'm not sure why this happens, but add this, I tested it and it works. > > > > > > }}} <eucode> > > > procedure msgedit_keypress( integer self, integer event, sequence params ) > > > > > > if params[1] = VK_RETURN then > > > -- ignore the Enter key > > > returnValue(-1) > > > end if > > > > > > end procedure > > > setHandler( msgedit, w32HKeyPress, routine_id("msgedit_keypress") ) > > > </eucode> {{{ > > > > > > > WinMain(main, Normal) > > > > > > > > </eucode> {{{ > > > > > > ~Greg > > > > > > > I tried using that technique. However, I was still setting the focus to > > the msgedit after that, having the effect of activating the mle. > > Your solution works wonderfully > > > > If you look up the documentation for EditText you will find ... > > Note that when the user presses the Return Key, the focus will move to > the next control in the focus order. To prevent this from happening, you > need to set a w32HKeyPress handler that sets the return value to -1 when > a VK_RETURN key without shifts is received. > > }}} <eucode> > procedure IgnoreReturn(integer self, integer event, sequence parms) > if parms[1] = VK_RETURN and parms[2] = 0 then > returnValue(-1) > end if > end procedure > setHandler(myEditField, w32HKeyPress, routine_id("IgnoreReturn")) > </eucode> {{{ > -------------------- > > I put this in because the common thing that people do when pressing > Return in an Edit field is to think that they have finished with that > field and now wants to deal with the next field. It is in effect the > same as pressing Tab in the field. > > But now that I can see that it could be awkward to change this behaviour > in some circumstances, I will add a new property to controls so that > you can use this behaviour (or not) on a per control basis. The current method shuold be the default since some of my programs use it. Also, why did this happen? "Then I tried setting focus to the MleText. And that gave focus to the EditText!" > > > -- > Derek Parnell > Melbourne, Australia >
6. Re: Win32lib focus problem
- Posted by Derek Parnell <ddparnell at bigpond.com> Dec 05, 2004
- 448 views
- Last edited Dec 06, 2004
CoJaBo wrote: > > Derek Parnell wrote: [snip] > > But now that I can see that it could be awkward to change this behaviour > > in some circumstances, I will add a new property to controls so that > > you can use this behaviour (or not) on a per control basis. > The current method shuold be the default since > some of my programs use it. Oh yes, that's what I meant. I'll just put in a way to make it easier to change from the default behaviour. > Also, why did this happen? "Then I tried setting focus > to the MleText. And that gave focus > to the EditText!" > I can't tell unless I see your code. Can you create a tiny program that demonstrates this effect? -- Derek Parnell Melbourne, Australia
7. Re: Win32lib focus problem
- Posted by Alexander Toresson <toressonodakra at swipnet.se> Dec 06, 2004
- 455 views
Derek Parnell wrote: <big snip> > But now that I can see that it could be awkward to change this behaviour > in some circumstances, I will add a new property to controls so that > you can use this behaviour (or not) on a per control basis. > Yeah, I'm developing a chat app, and it's not good if the message display mle is activated when a user sends a message. Regards, Alexander Toresson Shhh! Be vewy quiet! I'm hunting wuntime ewwows!
8. Re: Win32lib focus problem
- Posted by Bob Thompson <rthompson at rthompson.karoo.co.uk> Dec 07, 2004
- 447 views
- Last edited Dec 08, 2004
Derek, Is this the same focus problem? I'm running 98SE and if I modify Generic.exw by adding a child window, i.e. add the line child = create( Window, "Untitled - " & App, Generic, 0.05, 0.05, 0.9, 0.9, 0 ), after Generic = create( Window, "Untitled - " & App, 0, 0.05, 0.05, 0.9, 0.9, 0 ), and add the line openWindow(child, 0) before WinMain( Generic, Normal ) then after a first successful attempt, subsequent clicks on save, save as or open cause the dialog box to lose focus. The mod. runs OK on V0.60 30/June/2004.