Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.04 c
6-1079380703
lena19
2004-03-15 22:58
2004.04.11
serversocket кривыми ручками


7-1080213943
jetty
2004-03-25 14:25
2004.04.11
Секундомер (от системного таймера)


1-1080146266
Anton
2004-03-24 19:37
2004.04.11
Windows XP


7-1080287700
Ghost
2004-03-26 10:55
2004.04.11
Система


3-1079087552
AlexLine
2004-03-12 13:32
2004.04.11
поиск в blob





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский