Форум: "Основная";
Текущий архив: 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.045 c