Cuando aloja aplicaciones Office a través de ActiveX, encontrará algunas versiones de algunas aplicaciones de oficina son ridículamente susceptible de ser informado de los cambios de activación de ventana y esto puede afectar especialmente sus menús de contexto.
Básicamente, si no les dices siempre que pierden o ganan el foco y también cada vez que su ventana de nivel superior gana o pierde el foco (incluso si su control secundario en la ventana no está ganando enfoque), entonces puede volverse loco
Es algo con lo que luché durante mucho tiempo y especialmente frustrante cuando tienes que decirles a las aplicaciones cosas que están en una mejor posición para saber que tú (como cuando pierden o se enfocan directamente ... . o cuando crean un menú emergente que tiene el foco lejos de ellos y tiene que ser manejado de manera diferente a cualquier otra aplicación/ventana tomando el foco, que le quedan para adivinar ... Uf.
De todos modos, las aplicaciones de Office deben exponer una interfaz IOleInPlaceActiveObject y debe asegurarse de llamar a su método OnFrameWindowActivate para informarle sobre la activación/desactivación.
De memoria, y un vistazo rápido a mi propio código para alojar Office, esa es una de las cosas más importantes. También es fácil pasarlo por alto, pensando "Nah, no puede importar tanto ... ¿Por qué algo se preocuparía tanto de si la ventana está activa o no?" Podría pensar que solo podría ocasionar algunos problemas cosméticos menores (como aparecer activo cuando no lo es) pero puede llevar a que todo se bloquee o se bloquee. ¡Créame, a Office le preocupan demasiado esas cosas! Me da la impresión de que bajo las cubiertas de Office todavía hay un diseño muy antiguo, de un único subproceso de los días de la multitarea cooperativa, y puede confundirse cuando dos de sus ventanas parecen estar activas a la vez.
Disculpa que no puedo dar más consejos que solo señalar en esa dirección ... Escribir hosts ActiveX es una técnica negra (toda la documentación está orientada a ser alojada, no siendo el host :() y la única forma en que obtuve mi propio código para trabajar fue a través de meses de prueba y error y muchísima depuración. Desafortunadamente es una pesadilla.
Un último consejo: no tengas miedo de codificar kludges para aplicaciones particulares Esto es lo que hace el IE, con la configuración del registro para controlar qué kludges se aplican a qué (y sospecho que algunos más están codificados en el código). ActiveX es un desastre tan mal definido que varios controles tienen sus propias peculiaridades y errores. es imposible escribir un host limpio y genérico que funcione con todos ellos (un ch El que arregle uno romperá el otro). También encontrará cosas que solo funcionan si prueba las interfaces en el mismo orden en que lo hace IE, simplemente porque solo se han probado con IE; hacer las cosas de manera ligeramente diferente y se desmoronan. :(
¿Puede indicar qué versiones y nivel de paquete de servicio está utilizando (SO, Delphi, Word)? – pastacool
¿Este error ocurre fuera de Citrix? –
@Judah Himango: No tengo un sistema disponible con Word 2000 fuera de Citrix, así que desafortunadamente no puedo responder a su pregunta. –