Word в OleContainer и context menu

3 отговора 126 прегледа
#1

Word в OleContainer и context menu

Напоследък в ежедневието си се сблъсках с един неприятен ефект - зареждайки word документи в OleContainer (CreateObjectFromFile и DoVerb(ovShow)) понякога се получава контекстното меню на Word да не се появява при десен клик в контейнера. Това обикновено става при друг пуснат Word. State-а на контейнера ми си е osUIActive, менютата и тулбаровете са си там, но контекстното меню не. В отделно пуснатият Word работи, но в контейнера не. В определени ситуации пак се появява (Имам чувството, че става след показването му в другия Word, все едно той го създава наново??? Но не става винаги и не мога да хвана някаква зависимост кога и при какви условия се възстановява...).
Това поведение се запазва независимо от стойността на AutoVerbMenu. AllowInPlace е True. Версията на Word е 2003 (не съм опитвал с по-стари, но не ме устройва решение с downgrade към по-стара версия на Office).
Не знам дали успях да го обясня достатъчно ясно, но и на мен ми се омота вече в главата. Та въпроса ми е някой срещал ли е подобен ефект? Знае ли или има ли идея какво да направя?... Ще съм благодарен за всяка идея, която ви хрумне, 'щото аз вече се поизчерпах

Отговор
в отговор на andrew_nikoloff #2

Re: Word в OleContainer и context menu

Ще споделя моят кратък опит в подобна насока.
Трябваше да отворя екселски файл в делфи приложение. Когато го отворя в оле контейнера и се отвори ексел, всичко се скапваше. Офиса май беше 2003.
файла се появяваше и в ексела и в оле контейнера. Понеже бях забранил (или подменил) менютата в оле контейнера за да не може да се записва, менютата ту се появяваха ту изчезваха. Освен това понякога всичко заспиваше. След няколко дена мъки, зарязах този вариант. Не разбрах какво и защо става. По лесно ми беше да реша, че оле сървара на ексела е скапан :) Все едно неможе да създаде два независими оле обекта едновременно. Може умишлено така да е направено!? Основната идея, да се защити файла от запис (кражба) се провали.

Отговор
в отговор на andrew_nikoloff #3

Workaround

Оказа се, че като му викнеш OleContainer.DoVerb(ovShow) май си оправя нещата. Поне засега така изглежда. Така че на Application.OnActivate си го викаме. Малко е неприятен ефекта с прерисуването на сървъра в контейнера, но се преживява

Отговор
в отговор на andrew_nikoloff #4

Re: Workaround

Опитай с инсталиране на всички налични update на Windows i Office. Поне до XP проблема се решава по този начин.

Отговор