Форум: "Основная";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
ВнизTOleContainer Найти похожие ветки
← →
REA (2003-10-21 15:19) [0]Как отследить момент закрытия сервера (от контейнера TOleContainer), открытого в отдельном окне?
← →
REA (2003-10-21 15:57) [1]Сам кажется нашел. Нужно перегрузить Invalidate и там отслеживать состояние.
Тогда другой вопрос: я пытаюсь закрыть сервер-приложение по Close, но закрывается не само приложение, а только документ.
Как закрыть и сервер?
← →
Sandman25 (2003-10-21 16:02) [2]DestroyObject?
← →
REA (2003-10-21 16:14) [3]Не, не то. Он во-первых сам Объект разрушает, а он мне еще нужен и во-вторых вызывает FOleObject.Close(OLECLOSE_NOSAVE)
А мне как раз надо Save. И тоже кстати не факт, что сервер закроется.
← →
Sandman25 (2003-10-21 16:27) [4]Судя по описанию Close, Вам нужен именно он. Если сервер закрыть, то кто будет отображать Ваш объект? Сам по себе OleContainer ничего не умеет.
← →
REA (2003-10-21 16:32) [5]Уточняю задачу: объект открывается в отдельном окне (например вызывается Word) вне окна моего приложения. При закрытии методом Close MDI документ в новом окне закрывается, а сам Word остается открыт и окно его тоже открыто.
Задача: закрыть окно Word, не прекращая работу сервера и не выгружая объект из памяти. Т.е. так же как если бы я нажал крестик на окне Word, но программно.
В принципе можно и совсем сервер закрыть - открыть его с помощью Run несложно.
← →
Sandman25 (2003-10-21 16:38) [6]Если Вы запускаете через Run, то похоже, что закрыть его нормально не получится, во всяком случае в Help я о такой возможности ничего не нашел.
Но можно сделать это через Ole - подключиться вручную и закрыть самому. CreateOleObject, Quit.
← →
REA (2003-10-21 17:01) [7]Полностью это выглядит так: у меня есть некое приложение, которое содержит документ и в нем OLE объекты как скрытые TOLEContainer. Отрисовываются они через
OleDraw(FContainer.OleObjectInterface, DVASPECT_CONTENT, Canvas.Handle, rc);
Сделать Inplace редактирование у меня не получилось (повидимому ввиду некооректной работы самого TOLEContainer), поэтому я вызываю приложение во внешнем окне для редактирования загруженного в память документа. Для отрисовки разумеется приходится держать сервер запущенным.
>Если Вы запускаете через Run, то похоже, что закрыть его
>нормально не получится, во всяком случае в Help я о такой
>возможности ничего не нашел.
Да в принципе никакой разницы нет как запускать. Я делал тестовое приложение и запускал двойным нажатием на TOLEContainer.
Все тоже самое.
Может есть какой интерфейс OLE который нужно дернуть? Их там много и разобраться с разбегу не удается что куда.
← →
Sandman25 (2003-10-21 17:06) [8][7] REA © (21.10.03 17:01)
Я не знаю, к сожалению. Я OleContainer ни разу в жизни не использовал.
Если Вы точно знаете, что за документы у Вас хранятся, то можно у них вызывать соответствующие методы (типа Quit для документов Excel и Word), но ИМХО лучше исправить ситуацию, чтобы редактирование было InPlace - тогда не придется запускать внешнее редактирование.
← →
REA (2003-10-21 17:10) [9]>лучше исправить ситуацию, чтобы редактирование было InPlace
Зато масса других проблем возникает с меню, ToolBar, выравниванием и т.п.
Лучше уж пусть пустое окно висит.
← →
Sandman25 (2003-10-21 17:15) [10][9] REA © (21.10.03 17:10)
Но тогда если окно появляется по команде пользователя ("редактировать"), то и закрываться оно должно тоже пользователем. Пускай в крестик тыкает :)
Я с трудом представляю себе глаза пользователя, который вызвал редактирование, в Word изменил и сохранил документ, переключился в Вашу программу и тут вдруг увидел, что Word почему-то закрылся. Или еще хуже - изменил без желания сохранять, а Ваша программа за него сохранила и тем самым испортила документ.
← →
REA (2003-10-21 18:06) [11]>Я с трудом представляю себе глаза пользователя, который вызвал редактирование, в Word изменил и сохранил документ
Там нет кнопки сохранить документ. Это поддокумент составного документа.
>переключился в Вашу программу и тут вдруг увидел, что Word почему-то закрылся.
Сам он не закроется, а только по какому-либо действию пользователя: например "закрыть составной документ".
>Или еще хуже - изменил без желания сохранять, а Ваша программа за него сохранила и тем самым испортила документ.
Сохранится документ в моем документе, а его уже надо сохранить руками. К тому же есть Undo.
← →
Sandman25 (2003-10-21 18:07) [12][11] REA © (21.10.03 18:06)
ИМХО тогда остается только найти что-то типа Quit в конкретном сервере.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.017 c