From: Mark M. <mie...@gm...> - 2013-01-14 00:12:07
|
On Sun, Jan 13, 2013 at 3:36 PM, Staffan Tylen <sta...@gm...>wrote: > > I've been testing the method and I can tell you that the values in the >> .Directory object, if you use that feature, accurately reflect what the OS >> returns. >> > >> What the OS returns: >> >> 1.) Can vary depending on what version of Windows you are executing on. >> >> 2.) Can vary depending on what style(s) the list-view has. In particular >> whether the list-view has the FULLROWSELECT style or not will change what >> is reported. >> >> 3.) Sometimes the values the OS returns seem wrong. For instance, if you >> click on the header control when the list-view is in report view, you will >> sometimes get -1 nowhere and sometimes get 0 on item. If you click on the >> top half of header, you will get -1 nowhere, but if you click on the bottom >> half of the header you can get 0, on item. >> >> > 1 and 2 seem understandable, but 3 seems a bit buggy. My idea is to allow > a user to right-click on any row/column in a report view, and the code > should determine what was clicked and what action to take. This could be in > the form of a popup with an action appropriate for the item/subitem or > maybe an overlay using an edit or combobox control, something along those > lines. Perhaps a combination of a couple of method calls may reveal the > true location of the click? I appreciate your time working on this. > You would need to test it yourself and see what is getting returned. Then in your code, if you are in report view, and have columns inserted, and the index returned is 0, take an extra step to be sure it is indeed on item 0, or if it is on the header. There is a new method, getItemRect() which returns the bounding rectangle of the item specified: mouse = .Mouse~new(list) list~screen2client(p) item = list~hitTestInfo(p) if item == 0 then do r = list~getItemRect(0, 'BOUNDS') if r~top > p~y then item = -1 end would do it. However, if you play around some printing out values, you will see that the header is about 15 pixels high. So, you could do this on faith: if item == 0 and p~y < 16 then item = -1 -- Mark Miesfeld |