1. Win32Lib bug?
- Posted by Brian Broker <bkb at CNW.COM> Nov 15, 2000
- 478 views
I've finally gotten around to playing with the newest Win32Lib release (and changing my programs accordingly). Question: Does 'create' still process flags? This works on version .50: constant NoSizeWin = or_all( {WS_DLGFRAME, WS_SYSMENU, WS_MINIMIZEBOX} ) constant Win = create( Window, "Win", 0, 0, 0, 640, 480, NoSizeWin ) -- Win is a Window that cannot be resized This no longer works in the latest release. I don't have time to track it down because there have been so many changes lately... Any help? Thanks, -- Brian
2. Re: Win32Lib bug?
- Posted by Dan B Moyer <DANMOYER at PRODIGY.NET> Nov 15, 2000
- 481 views
Brian, This is the same kind of thing I was referring to in an earlier post! Glad someone else noticed it too. :) I said: "One possible problem to look out for with regard to style setting for windows, unless Derek has changed it in Win32Lib, is that as far as I understand, in (a) recent version, the default style setting does *not* get "over-ridden" by user specified style, the user spec just gets *added* to the default, so you can't be completely sure that you have "rolled your own" (window style) as you intended." I had been making modal windows deliberately without a minimize box, (so as to work-around a bug which allowed a modal window's main window to be wrongfully closed before the modal was, by minimizing the modal window first), by using a create similar to yours, constant aModalWindow = create( Window, "This is a Modal Window", TheWindow, 50, 80, 400, 200, or_all({WS_DLGFRAME, WS_SYSMENU}) ) which *did* make the window without the minimize box in v.50, but made it *with* the minimize box in .54 Dan ----- Original Message ----- From: "Brian Broker" <bkb at CNW.COM> To: <EUPHORIA at LISTSERV.MUOHIO.EDU> Sent: Wednesday, November 15, 2000 3:21 PM Subject: Win32Lib bug? > I've finally gotten around to playing with the newest Win32Lib release (and > changing my programs accordingly). > > Question: Does 'create' still process flags? > > This works on version .50: > > constant > NoSizeWin = or_all( {WS_DLGFRAME, > WS_SYSMENU, > WS_MINIMIZEBOX} ) > > constant > Win = create( Window, "Win", 0, 0, 0, 640, 480, NoSizeWin ) > > -- Win is a Window that cannot be resized > > This no longer works in the latest release. I don't have time to track it > down because there have been so many changes lately... > > Any help? > > Thanks, > -- Brian
3. Re: Win32Lib bug?
- Posted by Brian Broker <bkb at CNW.COM> Nov 16, 2000
- 459 views
On Wed, 15 Nov 2000 17:40:25 -0800, Dan B Moyer wrote: >Brian, > >This is the same kind of thing I was referring to in an earlier post! Glad >someone else noticed it too. :) > >I said: > >"One possible problem to look out for with regard to style setting for >windows, unless Derek has changed it in Win32Lib, is that as far as I >understand, in (a) recent version, the default style setting does *not* get >"over-ridden" by user specified style, the user spec just gets *added* to >the default, so you can't be completely sure that you have "rolled your >own" (window style) as you intended." Dan, Sorry I missed that post, but thanks for bringing it up again. But my question still stands: Is this a bug or a feature? If this is a feature, then how should I go about making a non-sizeable window? -- Brian
4. Re: Win32Lib bug?
- Posted by "Cuny, David at DSS" <David.Cuny at DSS.CA.GOV> Nov 16, 2000
- 472 views
Brian Broker wrote: >the default style setting does *not* get >"over-ridden" by user specified style, the > user spec just gets *added* to the default, > so you can't be completely sure that you > have "rolled your own" (window style) as > you intended." If Derek chooses to implement various flavors of windows, the addition of a 'no attribute' window would take care of that. -- David Cuny
5. Re: Win32Lib bug?
- Posted by Dan B Moyer <DANMOYER at prodigy.net> Nov 16, 2000
- 473 views
- Last edited Nov 17, 2000
Brian, Well, I think it is a bug, but it may be intended as feature? :) And I think there is supposed to be a new command to re-set the style of a window, (Wolf says Derek mentioned them in a post earlier, & I think I do remember that, now), addStyle() and removeStyle(), but I couldn't find them, maybe they are upcoming; the best I could do was to hack Win32Lib as follows: in "procedure createWindow", after "if flags!=0 then" find "lFlags=or_bits(flags,lFlags)", and change it to: "lFlags= flags --or_bits(flags,lFlags)"; that will allow whatever *you* set as flags to be accepted and created, without regard for the default setting (which is what I *think* lFlags is or was), that is, without "or'ing" the default with the user specified styles(which amounts to adding all the styles together). However, I have *no* idea if this will make other problems or not!! Maybe there's a better way, but that's all I could find. Hopefully Derek will CHANGE THIS BACK, so the programmer can specify window styles easily?? Dan ----- Original Message ----- From: "Brian Broker" <bkb at CNW.COM> To: <EUPHORIA at LISTSERV.MUOHIO.EDU> Sent: Thursday, November 16, 2000 10:47 AM Subject: Re: Win32Lib bug? > On Wed, 15 Nov 2000 17:40:25 -0800, Dan B Moyer wrote: > > >Brian, > > > >This is the same kind of thing I was referring to in an earlier post! Glad > >someone else noticed it too. :) > > > >I said: > > > >"One possible problem to look out for with regard to style setting for > >windows, unless Derek has changed it in Win32Lib, is that as far as I > >understand, in (a) recent version, the default style setting does *not* get > >"over-ridden" by user specified style, the user spec just gets *added* to > >the default, so you can't be completely sure that you have "rolled your > >own" (window style) as you intended." > > Dan, > > Sorry I missed that post, but thanks for bringing it up again. But my > question still stands: Is this a bug or a feature? If this is a feature, > then how should I go about making a non-sizeable window? > > -- Brian
6. Re: Win32Lib bug?
- Posted by Matthew Lewis <MatthewL at KAPCOUSA.COM> Nov 17, 2000
- 465 views
> From: Dan B Moyer > in "procedure createWindow", > after "if flags!=0 then" > find "lFlags=or_bits(flags,lFlags)", > and change it to: > "lFlags= flags --or_bits(flags,lFlags)"; The code that's there shouldn't stop the user specified styles from taking effect. The problem is that the default style for a window is WS_OVERLAPPEDWINDOW, which contains the WS_SIZEBOX/THICKFRAM style, allowing sizing. You need to use classDefaults() to modify this: --begin code include win32lib.ew constant NoSizeWin = or_all( {WS_DLGFRAME, WS_SYSMENU, WS_MINIMIZEBOX} ) junk = classDefaults(Window, { {CCflags, {NoSizeWin}}, {}}) constant MyNoSizeWin = create( Window, "No Size Window", 0, 20, 20, 200, 200, 0) WinMain( MyNoSizeWin, Normal) -- end code > Maybe there's a better way, but that's all I could find. > Hopefully Derek > will CHANGE THIS BACK, so the programmer can specify window > styles easily?? You could also use removeStyle() and addStyle() after window creation, but classDefaults() seems a bit cleaner. Since classDefaults() returns the old setting, you can easily reset the defaults: junk = classDefaults(Window, junk ) right after you create the window. Unfortunately, I don't see an easy way around this type of conflict. I think it's just part of the learning curve with windows. No matter how many different window classes are created, someone will find a new combination that doesn't work (although it would be simpler in many cases). Matt Lewis http://www.realftp.com/matthewlewis
7. Re: Win32Lib bug?
- Posted by Derek Parnell <dparnell at BIGPOND.NET.AU> Nov 18, 2000
- 477 views
Hi Brian, I've been away on business, so sorry for the slow response. > > Question: Does 'create' still process flags? Yes it does. In fact it works the same for all control types now. The previous versions treated create() flags one way for Window controls and another for other types. For Window, it used to replace the default flags with any you might have specified, for others, it combined supplied flags with the defaults. Now, Window works like the other controls. > This works on version .50: > > constant > NoSizeWin = or_all( {WS_DLGFRAME, > WS_SYSMENU, > WS_MINIMIZEBOX} ) > > constant > Win = create( Window, "Win", 0, 0, 0, 640, 480, NoSizeWin ) > > -- Win is a Window that cannot be resized > > This no longer works in the latest release. I don't have time to track it > down because there have been so many changes lately... > To allow people complete flexibility when dealing with more complex flag combinations, a new function, classDefaults() was set up. This function allows you to set the default flags for a given control type. This can set both the normal style flags and the extended style flags. Given your example above, there are two basic ways to achieve what you want to do. 1) -------------------- sequence oldFlags atom NoSizeWin NoSizeWin = or_all( {WS_DLGFRAME, WS_SYSMENU, WS_MINIMIZEBOX} ) -- Set default flags for Window to NoSizeWin oldflags = classDefaults(Window, {{CCflags, NoSizeWin} }) -- Create a window using the (new) defaults Win = create( Window, "Win", 0, 0, 0, 640, 48, 0) 2) ------------------- sequence oldFlags atom NoSizeWin NoSizeWin = or_all( {WS_DLGFRAME, WS_SYSMENU, WS_MINIMIZEBOX} ) -- Set defaults for Window to zero (no flags at all) oldflags = classDefaults(Window, {{CCflags, 0}} ) -- Create a window combining defaults (zero) with NoSizeWin Win = create( Window, "Win", 0, 0, 0, 640, 480, NoSizeWin) To make this commonly used functionality easier to use, I'm packaging some of the more useful Window flag combinations into reserved Win32Lib words. David Cuny wants me to use these new words as Control Types but I would rather them being used as Style Flags. So I'm very tempted to do both, unless persuaded otherwise. David's method: Win = create(NoSizeWindow, "Win", 0, 0, 0, 640, 480, 0) Derek's method: Win = create(Window, "Win", 0, 0, 0, 640, 480, w32NoSizeWin) My reasoning is that the first create() parameter describes a basic behaviour, whereas the flags parameter describes a basic interface. Also, having a "new" control type is adds more complexity in the library that I don't think is justified for things that are essentially the same. For example, there are many places in the library that does this sort of thing ... if window_type[id] = Window then .... this might have to be changed to ... if find(window_type[id], {Window, NoSizeWindow, ...}) != 0 then .... or maybe ... if and_bits(classAttr[window_type[id]], w32IsWindow) != 0 then ... however, if we use these new words as predefined Window styles, the current code is unchanged except in the create() function, with something like ... if equal(styleflag, w32NoSizeWin) then flags = or_bits(....) elsif ... else flags = or_bits(defaultflags, styleflags) end if What does anybody else think? ------ Derek Parnell Melbourne, Australia (Vote [1] The Cheshire Cat for Internet Mascot)
8. Re: Win32Lib bug?
- Posted by "Cuny, David at DSS" <David.Cuny at DSS.CA.GOV> Nov 17, 2000
- 465 views
Derek Parnell wrote: > if window_type[id] = Window then .... > > this might have to be changed to ... > > if find(window_type[id], {Window, NoSizeWindow, ...}) != 0 then .... > > or maybe ... > > if and_bits(classAttr[window_type[id]], w32IsWindow) != 0 then ... or just: if window_class[ID] = WINDOW then ... > if equal(styleflag, w32NoSizeWin) then > flags = or_bits(....) > elsif ... > else > flags = or_bits(defaultflags, styleflags) > end if For that matter, you could code the new Window classes as: if equal(class, NoSizeWin) then class = Window flags = or_bits(w32NoSizeWin) elsif ... else flags = or_bits(defaultflags, styleflags) end if but I think it's a bad plan. A cleaner solution would be to create a Window class that has *no* defaultflags, so that you could write: win = create( GenericWin, ..., myWindowFlags ) -- David Cuny
9. Re: Win32Lib bug?
- Posted by Dan B Moyer <DANMOYER at PRODIGY.NET> Nov 17, 2000
- 464 views
- Last edited Nov 18, 2000
I like this idea best, because it allows the *easiest* way to "roll your own" windows styles, and is almost exactly like it was before, so users can most easily fix broken code. Dan Moyer David Cuny wrote, in relation to different ways to allow windows to accept user specified styles: <snip> > > A cleaner solution would be to create a Window class that has *no* > defaultflags, so that you could write: > > win = create( GenericWin, ..., myWindowFlags ) > > -- David Cuny
10. Re: Win32Lib bug?
- Posted by Dan B Moyer <DANMOYER at PRODIGY.NET> Nov 17, 2000
- 459 views
- Last edited Nov 18, 2000
Matt, Sorry to disagree, but I *tested* my suggestion, and it *did* work. A program with the following style (the modal example in Win32Lib): "constant aModalWindow = create( Window, "This is a Modal Window", TheWindow, 50, 80, 400, 200, or_all({WS_DLGFRAME, WS_SYSMENU}) )", used to create a window which was not resizeable, but with recent version of Win32Lib it *is* resizeable; with my suggested alteration it is now again *not* resizeable. I don't have any idea whether this is a *good* way to do it or not, just that it does work; it allows the programmers selected window styles to in fact be applied, just them, and *not* be "added" to the default styles, but rather *replaces* them for a single window. Dan ----- Original Message ----- From: "Matthew Lewis" <MatthewL at KAPCOUSA.COM> To: <EUPHORIA at LISTSERV.MUOHIO.EDU> Sent: Friday, November 17, 2000 9:14 AM Subject: Re: Win32Lib bug? > > From: Dan B Moyer > > > in "procedure createWindow", > > after "if flags!=0 then" > > find "lFlags=or_bits(flags,lFlags)", > > and change it to: > > "lFlags= flags --or_bits(flags,lFlags)"; > > The code that's there shouldn't stop the user specified styles from taking > effect. The problem is that the default style for a window is > WS_OVERLAPPEDWINDOW, which contains the WS_SIZEBOX/THICKFRAM style, allowing > sizing. You need to use classDefaults() to modify this: > > --begin code > include win32lib.ew > constant > NoSizeWin = or_all( {WS_DLGFRAME, > WS_SYSMENU, > WS_MINIMIZEBOX} ) > junk = classDefaults(Window, { {CCflags, {NoSizeWin}}, {}}) > constant > MyNoSizeWin = create( Window, "No Size Window", 0, 20, 20, 200, 200, 0) > > WinMain( MyNoSizeWin, Normal) > -- end code > > > Maybe there's a better way, but that's all I could find. > > Hopefully Derek > > will CHANGE THIS BACK, so the programmer can specify window > > styles easily?? > > You could also use removeStyle() and addStyle() after window creation, but > classDefaults() seems a bit cleaner. Since classDefaults() returns the old > setting, you can easily reset the defaults: > > junk = classDefaults(Window, junk ) > > right after you create the window. Unfortunately, I don't see an easy way > around this type of conflict. I think it's just part of the learning curve > with windows. No matter how many different window classes are created, > someone will find a new combination that doesn't work (although it would be > simpler in many cases). > > Matt Lewis > http://www.realftp.com/matthewlewis
11. Re: Win32Lib bug?
- Posted by Matt Lewis <matthewwalkerlewis at YAHOO.COM> Nov 20, 2000
- 496 views
--- Dan B Moyer <DANMOYER at PRODIGY.NET> wrote: > Matt, > > Sorry to disagree, but I *tested* my suggestion, and it *did* work. Yeah, I didn't mean to say that it didn't work. I just wanted to explain what was going on, and to offer a more 'proper' solution given the current win32lib. ===== Matt Lewis http://www.realftp.com/matthewlewis __________________________________________________ Do You Yahoo!? Yahoo! Calendar - Get organized for the holidays! http://calendar.yahoo.com/
12. Re: Win32Lib bug?
- Posted by Dan B Moyer <DANMOYER at PRODIGY.NET> Nov 20, 2000
- 480 views
Matt, OkyDoky; it turns out my suggestion messed up how other controls were handled, so I guess even if it did work(partly), it also didn't work (wholly) :) Dan ----- Original Message ----- From: "Matt Lewis" <matthewwalkerlewis at YAHOO.COM> To: <EUPHORIA at LISTSERV.MUOHIO.EDU> Sent: Monday, November 20, 2000 1:20 PM Subject: Re: Win32Lib bug? > --- Dan B Moyer <DANMOYER at PRODIGY.NET> wrote: > > Matt, > > > > Sorry to disagree, but I *tested* my suggestion, and it *did* work. > > Yeah, I didn't mean to say that it didn't work. I just wanted to explain what > was going on, and to offer a more 'proper' solution given the current win32lib. > > > > ===== > Matt Lewis > http://www.realftp.com/matthewlewis > > __________________________________________________ > Do You Yahoo!? > Yahoo! Calendar - Get organized for the holidays! > http://calendar.yahoo.com/
13. Win32Lib bug?
- Posted by Larry Miller <larrymiller at sasktel.net> Jan 28, 2005
- 462 views
I am having a problem with Win32Lib v .60.6, although it might possibly be my code. In any case this is the situation: My application opens a modal dialog box with a listview control. The first time it opens and closes with no errors or warnings. But if the dialog is opened a second time I receive the following warning from Win32Lib: Error code 497 getHandle: Object is destroyed The Listview requires no images and none have been added with addIcon but it does use the LVS_EX_CHECKBOXES extended style. The problem only occurs when the dialog window is destroyed, not if it is simply closed. When I use setWarning(2) I get the following in the error file (partial). ... called from D:\euphoria\win32lib\include\win32lib.ew:7841 in function getHandle() id = 177 hWnd = <no value> ... called from D:\euphoria\win32lib\include\win32lib.ew:14270 in procedure setImageList() id = 178 IL = 177 size = 0 message = <no value> ... called from D:\euphoria\win32lib0\include\win32lib.ew:16975 in function createEx() pControl = 39''' pCaption = {} pOwner = 163 pLeft = 5 pTop = 5 pWidth = 230 pHeight = 180 styleFlags = 16389 exFlags = 0 id = 178 at = <no value> hotkey = <no value> bgControl = <no value> style = <no value> result = <no value> hWnd = 1508342 flags = 1417756741 extendedflags = 512 lParenthWnd = 852932 szClassName = 9150460 szCaption = 9261060 hMenu = 163 newhWnd = <no value> pstr = <no value> struct = <no value> ok = <no value> newobj = <no value> lvcol = { {{},18,0}, {{},192,0} } BBox = {5,5,230,180} sbPanels = <no value> lHintText = {} lIconInfo = <no value> autoclose = 0 lBGColor = {{}} lUserPre = {} lUserPost = <no value> lTemp = <no value> i = 2 It appears to me that the Image list is being destroyed when the Listview is destroyed. I know that I can avoid the warning with setWarning(0) but this doesn't deal with the underlying problem. Is this normal behaviour for Win32Lib or am I doing something wrong? Larry Miller
14. Re: Win32Lib bug?
- Posted by Brian Broker <bkb at cnw.com> Jan 28, 2005
- 457 views
- Last edited Jan 29, 2005
Larry Miller wrote: > > I am having a problem with Win32Lib v .60.6, although it might possibly be my > code. > In any case this is the situation: > > My application opens a modal dialog box with a listview control. The first > time it opens and closes with no errors or warnings. But if the dialog is > opened a second time I receive the following warning from Win32Lib: > Error code 497 > getHandle: Object is destroyed > > The Listview requires no images and none have been added with addIcon but > it does use the LVS_EX_CHECKBOXES extended style. > The problem only occurs when the dialog window is destroyed, not if it is > simply closed. <snip> If you are opening the dialog more than once, then why are you destroying it? You can't use something you've destroyed; that's why you get the error... -- Brian
15. Re: Win32Lib bug?
- Posted by Larry Miller <larrymiller at sasktel.net> Jan 28, 2005
- 468 views
- Last edited Jan 29, 2005
Regarding the reply by Brian Broker The dialog works ok the first time used. I destroy it when the user closes it. If the user calls for the dialog again the listview and everything else in the dialog is recreated. And as I said, if I set setWarning(0) it works fine. Larry
16. Re: Win32Lib bug?
- Posted by Derek Parnell <ddparnell at bigpond.com> Jan 28, 2005
- 478 views
- Last edited Jan 29, 2005
Larry Miller wrote: > > I am having a problem with Win32Lib v .60.6, although it might possibly be my > code. > In any case this is the situation: > > My application opens a modal dialog box with a listview control. The first > time it opens and closes with no errors or warnings. But if the dialog is > opened a second time I receive the following warning from Win32Lib: > Error code 497 > getHandle: Object is destroyed > > The Listview requires no images and none have been added with addIcon but > it does use the LVS_EX_CHECKBOXES extended style. > The problem only occurs when the dialog window is destroyed, not if it is > simply closed. [snip] > Is this normal behaviour for Win32Lib or am I doing something wrong? Neither. This is a mistake (two actually) that I've made in the library. The mistakes are that when the first ListView (or TreeView) is created, I also create a couple of imagelists, but instead of having them owned by the main window (which is what was intended by my code), I had them owned by the window that owned the ListView. In your case the dialog window. The other mistake I made was when the imagelists were destroyed, I failed to reset the built-in imagelist ids back to zero. If I had have done that I would have recreated them again when you recreated the dialog window. The imagelists were being destroyed because you destroyed the dialog window which was their parent window. The workaround is simple. Just force the imagelists to be created such that they are owned by the main window. Do something like this ...
constant mainwin = create(Window, "Main", 0, 0, 0, 500, 400, 0) -- Workaround for imagelist bug -- constant dummylv = create(ListView, "", mainwin, 0, 0, 0, 0, 0) destroy(dummylv)
In the meantime, I'll fix these mistakes I've made in the library. -- Derek Parnell Melbourne, Australia