Intercepting hyperlinks in an embedded Word document
- by Ryan
Hello,
I'm working on an app which uses embedded Word documents. We have a feature which allows them to insert a small clickable image into the doc - when the user clicks on it, we want the app to open another window based on some data specified by the user when the image was added. What the application does now is:
When the image is inserted, the app creates a hyperlink for it and the data is used as the link destination
The user ctrl+clicks on the image and the Word document the WindowSelectionChange event
The app handles the WindowSelectionChange event and goes to open the specified window
This approach worked fine with previous versions, when we had the 11.0 / Word 2003 interop dll's. We upgraded to 12.0/Word 2007 for the upcoming release, and in many cases the event is not firing when I click on the image - sometimes it does, sometimes it doesn't, and I'm descending into the cargo-cult world trying to figure out why - sometimes saving and re-opening the document works, sometimes killing the Word process and starting a new one fixes (or breaks) the feature. My guess is there's something going wrong with the WinSelChg event, but I'm not sure what. The usual process we have for applying the event handler is:
try //remove the old one if any
{
((Document)myAXFramerControl.ActiveDocument).Application.WindowSelectionChange -=
new ApplicationEvents4_WindowSelectionChangeEventHandler(WSC_eventhandlerfunction);
}
catch{}
((Document)myAXFramerControl.ActiveDocument).Application.WindowSelectionChange +=
new ApplicationEvents4_WindowSelectionChangeEventHandler(WSC_eventhandlerfunction);
Sometimes one or both of these will throw exceptions - usually a NullReferenceException when removing the handler. Adding the handler sometimes throws the "com object that has been separated from its underlying rcw cannot be used" exception, which I don't understand at all - my impression was that this only occurs when you, say, store a reference to the Word application or document and try to use it later.
As it stands the WSC event handler is frequently never run; while I'm happy to fiddle with the app until it works once I can't really expect the same of the users who have been happily using this feature for a while now. Any ideas?