Reply to: XMAX 5.5 Keyboard shortcutsApril 14, 2010 at 9:58 pm
I've discussed this with our lead developer and here is what he says:
XMAX implements the standard/required ActiveX interfaces and methods.
The standard interface method IOleInPlaceActiveObject::TranslateAccelerator()is called by the ActiveX control container to let XMAX decode and dispatch its accelerator (e.g. Ctrl+C, Delete, etc)…but it is only called if XMAX is UIActivate.
In the .NET world, their ActiveX control container implementation should call XMAX's IOleInPlaceActiveObject::TranslateAccelerator() method. I think that happens via .NET’s “System.Windows.Forms.IOleInPlaceActiveObject.TranslateAccelerator(MSG& lpmsg)” implementation. If there is some way the customer can override or get in front of that .NET implementation, they should have a chance to do their own decoding and handling as to not pass 'Delete' to XMAX in the cases they want.
Doing things at the application (host) level is really the way to go. If you were to implement a scripting solution in an MCR file you would need to call out to your .NET code to get it to do what it needs to do, which is going to add even more complexity. It also means implementing the same script for each MCR associated with every DTD/XSD or XAC for each different document type used to edit documents in XMAX (as there is no concept of an application-level MCR file for XMAX as there are for XMetaL Author).