Excellent! That is enough to get me going in a new direction. Much better than dickering with windows messages. Wish I'd thunk it. Thanks so much.
> I understand you don't want to mess up some old dirty code by > adding your new feature. > > How about this approach: > At start-up (FormCreate) all menu-events are searched for > using normal TForm.ComponentCount and TForm.Components) and > if an OnClick-event is assigned, reassign it to a catch-procedure > that will check if the user has the right access-level. > If he has, just call the original procedure as if nothing has > changed, otherwise you throw a warning-message. > > I made a little demo for you that will demonstrate what I mean. > You can find it on my server and the idea is easilly adaptable to > any (large, dirty, ...) project and only takes a couple of lines. > > =====> http://delphi.videoripper.org/MenuCatch.zip > > Of course this proof of concept has been written quickly and wasn't put > under stress, so you might want to extend the idea with valuable features. > > > Greetz, > > Peter. > > > -----Oorspronkelijk bericht----- > Van: delphi-en@yahoogroups.com [mailto:[EMAIL PROTECTED] > Doug > Hale > Verzonden: maandag 15 september 2008 22:52 > Aan: delphi-en@yahoogroups.com > Onderwerp: Re: [delphi-en] How to intercept all menu events? > > > What has been suggested is that after login, you change the > enable/disable or Visible/Invisible state based on the role of whom > ever logged in. > Doug > > [EMAIL PROTECTED] wrote: >> Oh, sorry. >> >> This is a retail application. >> Different user roles access the software simultaneously. >> Eg a supervisor may open the cash dawer for a clerk. >> >> Actions cannot be disabled, they may be used by an appropriate role. >> Or they may require this one-time authentication which I now seek to >> add. >> >> Menu items are password protected rather than disabled. >> >> This is a retrofit job. I am looking to intercept WM_COMMAND in >> Application.OnMessage and wondering how to map any part of that windows >> message back into an instance of TMenuItem. >> >> >> >> >>> Or, if you prefer, you could hide them: Visible:=False; >>> >>> Glenn Lawler >>> www.incodesystems.com >>> >>> -----Original Message----- >>> From: Smith David G (Finance) [SMTP:[EMAIL PROTECTED] >>> Sent: Monday, September 15, 2008 3:02 PM >>> To: delphi-en@yahoogroups.com >>> Subject: RE: [delphi-en] How to intercept all menu events? >>> >>> Why not just disable the menu items the user is not permitted to use -- >>> set the Enabled property to False? >>> >>> -----Original Message----- >>> From: delphi-en@yahoogroups.com [mailto:[EMAIL PROTECTED] On >>> Behalf Of [EMAIL PROTECTED] >>> Sent: Monday, September 15, 2008 2:15 PM >>> To: delphi-en@yahoogroups.com >>> Subject: [delphi-en] How to intercept all menu events? >>> >>> >>> Existing D5 application now needs security. Most of "security" involves >>> protecting access to menu items. >>> >>> I would like to implement this without bloating the code, adding lines >>> for every menu OnClick handler. >>> >>> There is already an Application.OnMessage handler in the code. I >>> thought >>> I might add a handler for WM_COMMAND, intercepting menu clicks at that >>> point. Yet nothing in the TMsg structure seems to point me back to a >>> specific menu item. >>> >>> I see all menu items have automagically been assigned CMD ids, yet >>> these >>> are not available in the data received by Application.OnMessage. >>> >>> What do I not understand, or is there a better way to intercept all >>> menu >>> clicks for an existing application...? >>> >>> Thank you. > >