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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.036 c
3-98493
MARcoDEN
2003-10-03 17:58
2003.10.30
Связь с удаленной базой MySQL


14-98849
Владислав
2003-10-11 14:40
2003.10.30
Как круто! Сразу отрезали :-)


1-98708
Hook
2003-10-21 09:45
2003.10.30
Проблема с компилятором (record)


11-98531
D.V.K
2003-02-11 12:02
2003.10.30
как подключить к Дельфи


1-98548
Term
2003-10-20 15:25
2003.10.30
Странное поведение TTreeView........