Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OleContainer ActiveX ms word, Несколько экзепляров ms word 
:(
    Опции темы
rith2
Дата 23.7.2009, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



Привет.

Ситуация - ActiveX Library -> ActiveXForm -> на ней OleContainer -> в него загружается документ ms word -> Компонент регистрируется.

Проблема - Если АктивХ компонент в пределах одного  приложения вызывается >1 раза, то есть несколько экземпляров ms word в OleContainer'е , то у них блокируется панель инструментов, кроме документа ms word, который был открыт самым последним. Печатать можно, но панель с инструментами заблочена.

Как я понял проблема эта распространенная и связана с тем, что документы ворда както криво вешаются на один и тотже процесс ms word... 

Пробовал создавать свой WordApplication и у него создавать  WordDocument - не катит. 

В Королевстве Делфи было решение:

"....У объекта TOleContainer имеется внутренняя переменная FDocView, указывающая на интерфейс IOleDocumentView и инициализирующаяся в начале активизации OleContainerа: ...В свою очередь, у интерфейса IOleDocumentView есть метод Show(fShow: BOOL): .....Для "оживления" заблокированных документов, достаточно вызвать этот метод с параметром "false". Добавляем процедуру (или функцию с возможностью обработки ошибок, кому как больше нравится) ShowView(fShow : boolean) в TOleContainer:" (с) Королевство Делфи

Не прокатил метод.

На японском форуме вроде на решение наткнулся, но там по нему какаято дискуссия идет... а японский я не знаю smile . Пробовал переводить переводчиком в гугле - понятного мало.

Помогите а? Бьюсь над проблемой этой а выхода не видно :(((
PM MAIL   Вверх
rith2
Дата 2.8.2009, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



Пока занимался другими вопросами и сейчас снова вернулся к этой проблеме... вот так вот работает приложение:

Код

var
  TApp: TWordApplication;
 TDoc: TWordDocument;
  Template,Param:OleVariant;
  FileName, FilePath: OleVariant;
  FileNum:String;
begin
  randomize;
  FileNum:= IntToStr(Random(50000)); //номер присоединяемый к имени файла
  
    TApp:= TWordApplication.Create(Application);
    TApp.AutoConnect:= True;
    TApp.ConnectKind:= ckNewInstance;
    Template:= 'normal'; Param:= False;
    TApp.Documents.AddOld(Template, Param);  

    TDoc:= TWordDocument.Create(Application);
    TDoc.ConnectTo(TApp.ActiveDocument);
    FileName:= 'file'+FileNum+'.doc'; //имя файла
    TDoc.SaveAs(FileName); //сохраняется

    FilePath:= TDoc.Path+'\'+FileName;

   OleCont.CreateObjectFromFile(FilePath, False); //загрузка в контейнер
   OleCont.DoVerb(ovShow);
   OleCont.SetFocus;



По разному пробовал - остановился на следующем - создается файл, ему присваивается случайное имя. Сохраняется в "Мои документы", откуда загружается в ОлеКонтейнер. Весь проект сохранен как .ocx компонент, который загружается в стороннем приложении. 

Вызываем в этом стороннем приложении этот компонент - ворд грузится (создается процесс WinWord), все работает
Вызываем еще раз в стороннем приложении этот компонент (создаетс еще один процесс) - панель инструментов у 1го открытого документа умирает, будто бы Enabled:= False. У только что открытого документа все работает...   

Хотя текст добавлять получается....

ничего уже не понимаю.. все работает в разных процессах, почему такие косяки с панелью инструментов???? smile 

Это сообщение отредактировал(а) rith2 - 2.8.2009, 14:38
PM MAIL   Вверх
rith2
Дата 2.8.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



и даже у них какбы не Enаbled:= False (имхо тогда иконки должны стать бесцветными), а будто бы фокус чтоли у панели получить не получается....
PM MAIL   Вверх
Данкинг
Дата 2.8.2009, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 5
Всего: 130



Т.е. через "createoleobject" тоже не получается?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
rith2
Дата 2.8.2009, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



Цитата(Данкинг @ 2.8.2009,  16:38)
Т.е. через "createoleobject" тоже не получается?

Не получается...

Единственно как получается это если приконнектить файл к контейнеру через

OleContainer.CreateLinkToFile

Но документ открывается тогда не в окне приложения а совсем в отдельном, что не подходит....

ваще мыслей нет как быть, вроде бы ощущение, что решение гдето близко, но где именно понять не могу  smile 
PM MAIL   Вверх
rith2
Дата 3.8.2009, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



Скачал тут компонент (вернее демку)... называется Ultra Office Control - осх компонент позволящий осуществлять загрузку приложений мс офис в свою программу - заметил, что при создании, например, нескольких копий документов у ворда - запускается лишь один вордовский процес... 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.