[lazarus] Enable/CheckMenuItem

Marc Weustink marc at dommelstein.net
Sat Nov 22 12:08:34 EST 2003


At 17:34 22-11-2003, Mattias Gaertner wrote:
>On Sat, 22 Nov 2003 17:18:31 +0100  Marc Weustink <marc at dommelstein.net>
>wrote:
>
> > At 17:08 22-11-2003, Mattias Gaertner wrote:
> > >On Sat, 22 Nov 2003 12:41:30 +0100  Marc Weustink <marc at dommelstein.net>
> > >wrote:
> > >
> > > > At 09:04 22-11-2003, Micha Nelissen wrote:
> > > > >Marc Weustink wrote:
> > > > >
> > > > >>At 22:23 21-11-2003, Micha wrote:
> > > > >>
> > > > >>>Specification of Enable/CheckMenuItem needs to be more specific.
> > > > >Due>>to  win32api obscurities it needs to be changed: note that only
> > > > >hndMenu
> > > > >
> > > > >>>changed:
> > > > >>>
> > > > >>>hndMenu: specifies _parent_ of menuitem to change
> > > > >>
> > > > >>??? Doesn't the win32 interface keep track of that (or can't it be
> > > > >quiried) ?
> > > > >
> > > > >(1) No. (2) It can't be, there is no GetParentMenu(handle) call or
> > > > >something like that.
> > > >
> > > > I should have read before asking :)
> > > >
> > > > Your original message:
> > > > >Specification of Enable/CheckMenuItem needs to be more specific. Due
> > > > >to  win32api obscurities it needs to be changed: note that only
> > > > >hndMenu changed:
> > > > >
> > > > >hndMenu: specifies _parent_ of menuitem to change
> > > > >uIDEnableItem: Integer - menu item to check/uncheck
> > > > >bChecked: Boolean      - new state of the menu item
> > > >
> > > >
> > > > Ehm, now I understand your question. The GTK winapi implementation of
> > > > CheckMenuItem is wrong. It uses hndMenu as the item to check and
> > > > ignores uIDEnableItem. But it should use hndMenu as menu and
> > > > uIDEnableItem as"command or index" to the Item.
> > >
> > >Why that complicated?
> >
> > It is not complicated.
> >
> > >We want to enable/check a menu item, and not to emulate the win32 api.
> > >If the win32api function does not do, what we need, then we should simply
> > >rename the interface function (e.g. function
> > >EnableOrCheckMenuItem(AMenuItem: TComponent; EnableCheck: boolean):
> > >boolean).
> > >The win32 intf can then simply get the parent handle.
> >
> > If functions are close, I prefer winApi compatible functions. It makes
> > porting easier. I don't feel like introducing a load of
> > similar_but_not_the_same functions.
> > We started with a load of api functions, I see no reason why we would
> > replace them. If we want the api function, we have to implement it anyhow.
>
>We want the most commonly used winapi functions. If you think, that this
>function is commonly used, then ok, let's emulate it. I doubt it.
>
>IMO the win32api function is too win32 specific. I think, nearly all other
>interfaces will have the ability to enable a menu item directly and don't
>have an "Index". So, adding this function to the interface means overhead
>for all interfaces, except the win32. While a direct function means overhead
>only for the win32 intf.

I don't see overhead as an issue here. There willbe always overhead.
For these menufuntions we could introduce a MH_HANDLE flag (there is 
already a MF_INDEX and a MF_COMMAND) to tell the interface to use the handle.


I've been thinking about what way do we want.
Do we want to support projects like synedit ?  Written in pascal, but not 
with the VCL ? Then we need the winapi.

On the other hand, why not introducing separate CheckMenuItem(TMenuITem, 
Boolean) and EnableMenuItem(TMenuITem, Boolean) functions.

What mechanism had you in mind ? Like the winapi, all flat function 
wrappers around the interface object ? Or are we going back to calling 
interfaceobject methods directly ?


Anyhow I've looked around on how to honour the MF_BYCOMMAND and 
MF_BYPOSITION function.
For now I think it is the easiest to introduce a MF_BYHANDLE, to use that 
by default in the LCL and if that function fails use MF_BYCOMMAND
Then it would work on both GTK and Win32 with the least overhead.

Marc






More information about the Lazarus mailing list