1. Combo surrounding rectangle
- Posted by Pete Lomax <petelomax at blueyonder.co.uk> Apr 07, 2005
- 510 views
I am trying to draw a focus box around a control, but hit a snag with Combos. I have the same results on Arwen and win32lib. The problem is that the rectangle seems to be {-1,-1,1,-3} adrift (you may have to look quite closely to notice it). If you put the commented out fudge back in, it works as I expected it to. I have displayed a ListBox (which does not need the fudge) next to it for comparison. Is this a known feature of the windows API (98) or am I doing something wrong? I'd also appreciate comments on how this works with/without the fudge on later versions of windows.
without warning include win32lib.ew constant main=create(Window,"Combo Box Rectangle",0,410,0,245,350,0) constant mainHwnd=getHandle(main) constant lbtn=create(Button,"Press me",main,15,15,95,30,0) constant lbox=create(ListBox,"",main,26,60,95,208,0) constant cbox=create(SimpleCombo,"",main,126,60,95,208,0) constant lpRect=allocate(16) procedure drawRect(integer ID) atom hwnd --sequence dbg hwnd = getHandle(ID) VOID = w32Func(xGetWindowRect, {hwnd, lpRect}) --if ID = cbox then --dbg=peek4s({lpRect,4}) --dbg+={-1,-1,1,-3} -- << fudge --poke4(lpRect,dbg) --end if VOID = w32Func(xScreenToClient, {mainHwnd, lpRect}) VOID = w32Func(xScreenToClient, {mainHwnd, lpRect+8}) VOID = w32Func(xDrawFocusRect, {getDC(main), lpRect} ) end procedure procedure mainHandler(integer id, integer event, sequence Params) if id = lbtn then drawRect(lbox) drawRect(cbox) end if end procedure setHandler(lbtn,w32HClick,routine_id("mainHandler")) WinMain(main,SW_NORMAL) abort(0) without warning include arwen.ew constant main=create(Window,"Combo Box Rectangle",0,0,410,0,245,350,0) constant mainHwnd=getHwnd(main) constant lbtn=create(Button,"Press me",0,main,15,15,95,30,0) constant lbox=create(ListBox,"",0,main,26,60,95,208,0) constant cbox=create(ComboBox,"",0,main,126,60,95,208,0) procedure drawRect(integer ID) atom lpRect, hwnd --sequence dbg lpRect = allocate_Rect() hwnd = getHwnd(ID) void = c_func(xGetWindowRect, {hwnd, lpRect}) --if ID = cbox then --dbg=peek4s({lpRect,4}) --dbg+={-1,-1,1,-3} -- << fudge --poke4(lpRect,dbg) --end if void = c_func(xScreenToClient, {mainHwnd, lpRect}) void = c_func(xScreenToClient, {mainHwnd, lpRect+8}) void = c_func(xDrawFocusRect, {getPrivateDC(main), lpRect} ) end procedure function mainHandler(integer id, integer msg, atom wParam, object lParam) if id = lbtn then drawRect(lbox) drawRect(cbox) end if return 0 end function setHandler({main,lbox},routine_id("mainHandler")) WinMain(main,SW_NORMAL) abort(0)
Regards, Pete
2. Re: Combo surrounding rectangle
- Posted by Al Getz <Xaxo at aol.com> Apr 08, 2005
- 453 views
Hi Pete, Do you have a screenshot somewhere? Take care, Al And, good luck with your Euphoria programming! My bumper sticker: "I brake for LED's"
3. Re: Combo surrounding rectangle
- Posted by Pete Lomax <petelomax at blueyonder.co.uk> Apr 08, 2005
- 481 views
On Fri, 08 Apr 2005 01:02:33 -0700, Al Getz <guest at RapidEuphoria.com> wrote: >Hi Pete, > >Do you have a screenshot somewhere? > I've posted one on http://palacebuilders.pwp.blueyonder.co.uk/edita.htm The problem is very subtle, however if I am using such a rectangle to size a control, it means the actual window can look nothing like the one in Window Painter. It is not difficult to add the {-1,-1,1,-3}, but it is worth asking around to make sure that is the right thing to do. BTW, the one on the left shows the error and the one on the right is the corrected (fudged) one! Regards, Pete
4. Re: Combo surrounding rectangle
- Posted by Al Getz <Xaxo at aol.com> Apr 08, 2005
- 467 views
Hi there Pete, Did you try OR'ing the creation flag with CBS_NOINTEGRALHEIGHT (when creating the combo box) to see if it 'corrects' the problem? A guess is that the box will change heights on different systems (and with diff fonts and font sizes) so you'll have to account for that unless you include that flag. Try adding that flag and see if it helps. This could become a problem with list boxes too -- i'd double check that also. Pete Lomax wrote: > > On Fri, 08 Apr 2005 01:02:33 -0700, Al Getz <guest at RapidEuphoria.com> > wrote: > > >Hi Pete, > > > >Do you have a screenshot somewhere? > > > I've posted one on > <a > href="http://palacebuilders.pwp.blueyonder.co.uk/edita.htm">http://palacebuilders.pwp.blueyonder.co.uk/edita.htm</a> > > The problem is very subtle, however if I am using such a rectangle to > size a control, it means the actual window can look nothing like the > one in Window Painter. It is not difficult to add the {-1,-1,1,-3}, > but it is worth asking around to make sure that is the right thing to > do. BTW, the one on the left shows the error and the one on the right > is the corrected (fudged) one! > > Regards, > Pete > > Take care, Al And, good luck with your Euphoria programming! My bumper sticker: "I brake for LED's"
5. Re: Combo surrounding rectangle
- Posted by Pete Lomax <petelomax at blueyonder.co.uk> Apr 08, 2005
- 473 views
On Fri, 08 Apr 2005 06:01:14 -0700, Al Getz <guest at RapidEuphoria.com> wrote: >Hi there Pete, > >Did you try OR'ing the creation flag with CBS_NOINTEGRALHEIGHT (when >creating the combo box) to see if it 'corrects' the problem? It makes no difference. In fact, I deliberately chose the height 208 to avoid that issue (207 made it one whole line smaller). >A guess is that the box will change heights on different systems >(and with diff fonts and font sizes) so you'll have to account for >that unless you include that flag. I am asking windows, via GetWindowRect in user32.dll, for the size. Windows should know it, pixel-perfect, since it drew it, but it tells me lies, which is what I queried. > >Try adding that flag and see if it helps. This could become a problem >with list boxes too -- i'd double check that also. Listboxes are fine both with and without that flag. I suspect Mike is right and it is a glitch in user32.dll, so the simple fudge I presented may indeed be the correct thing to do. I think I'll proceed on that assumption. Regards, Pete
6. Re: Combo surrounding rectangle
- Posted by Al Getz <Xaxo at aol.com> Apr 08, 2005
- 476 views
Hi again Pete, Sorry, it was just a guess. Interesting problem though, and perhaps i'll set up combo boxes for my WinClass lib too and see if i can duplicate the problem. I would have done this already but i never use combo boxes Anything specific about the combo box which i should know? Take care, Al And, good luck with your Euphoria programming! My bumper sticker: "I brake for LED's"