Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

TOleContainer + MS Word. (Оле! Оле! Спартак - чемпион!...)   Найти похожие ветки 

 
VLAD-MAL   (2004-03-23 14:32) [0]

Вопрос по использованию связки TOleContainer + MS Word.
После создания внедренного документа все вроде аботает OK, пока не переключу фокус на что-нибудь иное (другой TWinControl или вообще, другое приложение). После этого внедренный документ становится недостуным для редактирования (только просмотр и т.п.)...

 Как лечить?

 Delphi7 +
 Windows2000/MS Office 2000
 Windows XP/MS Office XP

PS Всякие там MS Excel etc работают без проблем...


 
Yermek   (2004-03-23 14:46) [1]

В смысли, ты связываешь с OLE щелкаешь на нем два раза у тебя у вылезает word в твоей форме, так или word открывается в "своём" окне?


 
VLAD-MAL   (2004-03-23 14:50) [2]

Word - в моей форме. (См. пример с Delphi:
C:\Program Files\Borland\Delphi7\Demos\ActiveX\OleCtnrs\olesdi.dpr - создаем MS Word, потом переключаемся на ранее запущенный Word, потом - обратно - и - кирдык...
)

Второй день маюсь...


 
Yermek   (2004-03-23 14:58) [3]

Постать 2 переключателя в компоненте OLE на false, не помню как называется но они одни из первых в списке и Word откроентся в "своем" окне, может тогда виснуть не будет.
если что пиши на мыло, я там поподробнее напишу, я сам его сейчас юзаю - диплом :)


 
VLAD-MAL   (2004-03-23 15:14) [4]

Если в отдельном окне, то весь смысл теряется...

Дополнительные заморочки - когда переключаюсь в Delphi, например, то обратное переключение в контейнер - без проблем, а вот переход в другой экхемпляр Word-а - потом обратно - фиг.

Еще помучаюсь чуть-чуть, и брошу.


 
Yermek   (2004-03-23 15:20) [5]

может он у тебя в памяти остается, пошли его на три клавиши посмотри


 
VLAD-MAL   (2004-03-23 15:22) [6]

Ну конечно, остается, я ж продалжаю сеанс редактирования...


 
VLAD-MAL   (2004-03-23 16:09) [7]

В общем, трабла такая:

- в базе данных собираюсь хранить документ (MS Word), для чего требуется запускать его в модальном окне (чтобы глупый юзер в контейнер - приложении не перешел на другую запись базы данных, а потом не попытался бы сохранить документ, ранее извлеченный из со-о-всем другой записи).

Поискал по этому поводу в Сети, все, что наше - это пара аналогичных мне случаев (без решения :( )

Возникла дурацкая мысль
1. Отказываюсь от TOleContainer
2. Для описанной задачи создам специальный пул объектов, представляющий собой ссылки на TWordApplication, и информацию - откуда он взялся (типа, ID записи). Назначать документу обработчики на события OnDocumentBeforeSave, OnDocumentBeforeQuit etc, и, используя ID, обновлять/изменять данные базы.

Или я слишком рано сдался?

Все-таки OleOntainer, встроенный в порогу, выглядит "солидно"...

Помогите!!!


 
Курдль ©   (2004-03-23 16:27) [8]

Поиграйся со свойствами ObjectVerbs.
У меня точно была такая промблема, но склероз не позволяет вспомнить ее точное решение :)


 
Курдль ©   (2004-03-23 16:32) [9]

А может быть надо что-то сделать со свойством AutoActivate
8-/


 
VLAD-MAL   (2004-03-23 16:33) [10]

Текущее состояние (при создании документа) списка ObjectVerbs:

Изменить
Открыть

Что можно изменить?


 
VLAD-MAL   (2004-03-23 16:34) [11]

AutoActivate - менял по-всякому. Никак.


 
Курдль ©   (2004-03-23 17:19) [12]

А так не пойдет?
AllowActiveDoc := False


 
VLAD-MAL   (2004-03-23 17:25) [13]

Нет, только картинка при редактировании другая, а глюк тот же.

В сети надыбал несколько вопросов, аналогичных моему, в т.ч. на английском, испанском, немецком, и кажется, на китайском. Траблы у всех - решения нет.


 
Курдль ©   (2004-03-23 17:35) [14]

Сдается мне, что это вина TOleContainer - он не принимает на себя фокус в полной мере.
Т.е. дает нажимать на кнопки Ворда, находящегося в нем, менять размеры таблиц, полей и т.п. А вот с текстом работать не дает...


 
VLAD-MAL   (2004-03-23 17:40) [15]

А вот с Excel - все OK...

Абыдна, да...


 
Курдль ©   (2004-03-23 17:42) [16]

Вот хоть корявое, но решение:


OleContainer1.AutoActivate := aaGetFocus;

procedure TForm1.OleContainer1Exit(Sender: TObject);
begin
 OleContainer1.Close;
end;

Можешь ретранслировать на английском, испанском, немецком, и на китайском. :)


 
VLAD-MAL   (2004-03-23 17:51) [17]

Проходили.

procedure TMainForm.OleContainer1Exit(Sender: TObject);
begin
if OleContainer1.State <> osEmpty then
  OleContainer1.Close;

end;

Событие не стреляет, когда в другое приложение (MS Word - другую копию) переключаемся.


 
Курдль ©   (2004-03-23 17:57) [18]

Тарды жалуйся Борланду! :)
Может обрабатывать на нижнем уровне WM_MOUSEMOVE и самому отлавливать фокус/не_фокус...


 
VLAD-MAL   (2004-03-23 17:59) [19]

Ага, а он про номер моего экземпляра Delphi Enterprise спросит...



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.029 c
3-1081583838
TGrey
2004-04-10 11:57
2004.04.11
Не могу придумать SQL запрос


14-1082536915
}|{yk
2004-04-21 12:41
2004.04.11
Прикольный ODBC драйвер на IBPhoenix


14-1079337120
Piter
2004-03-15 10:52
2004.04.11
Новый клиент для этого форума - Magic Forum beta2


14-1079078452
reticon
2004-03-12 11:00
2004.04.11
подключение видеокамеры через USB


14-1079201962
ИМХО
2004-03-13 21:19
2004.04.11
Шо такое Dedicated Hosting?