Помощь - Поиск - Пользователи - Календарь
Полная версия: MS WORD
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Client
Привет smile.gif
if OpenDialog1.Execute and (OpenDialog1.FileName <> '') then

OleContainer1.CreateObjectFromFile(OpenDialog1.FileName, false);

// Если загрузилось что - нибудь, то покажем

if OleContainer1.State <> osEmpty then OleContainer1.DoVerb(ovShow)
Файл открывается, все нормально. Вопрос: как закрыть "word"?
Или вместо всего этого - как открыть файл в MS Word (в вордовском окне)?
Когда документ открывается, он заполняет полностью "шапку формы" (рис1, рис2). А при нажатии кнопки2 (без обработчика) шапка уходит (рис3)

Добавлено через 5 мин.
хм, скрины наоборот прикрепились smile.gif
(смотреть в обратном поядке)
volvo
Цитата
Файл открывается, все нормально. Вопрос: как закрыть "word"?
Что значит "закрыть"? Пока OleContainer содержит файл - Word висит в памяти. А ты как хотел?

Цитата
Когда документ открывается, он заполняет полностью "шапку формы" (рис1, рис2). А при нажатии кнопки2 (без обработчика) шапка уходит (рис3)
И это совершенно правильное поведение. Пока фокус на OleContainer-е - меню того документа, что открыт в нем отображается в области меню формы. Как только Контейнер фокус потерял - меню исчезло. Что не так?
Client
Цитата
Что значит "закрыть"?
Закрыть документ чтобы потом убарть OleContainer.
Цитата
Как только Контейнер фокус потерял - меню исчезло. Что не так?
Если потом опять тыкнуть на OleContainer меню не появляется.
Мне вообщем надо сделать редактирование документа. Но вот как лучше - через OLE или может открыть документ в самом ворде. Почти одинаково, только кнопочки слева вверху нету smile.gif

Добавлено через 7 мин.
нашел метод
OleContainer1.Close;
Вроде то, что надо smile.gif
А можно вернуть меню при возврате фокуса?
volvo
Цитата
Закрыть документ чтобы потом убарть OleContainer.
Закрывай:
procedure TForm1.btnClose(Sender: TObject);
begin
OleContainer1.DestroyObject;
end;


Цитата
Если потом опять тыкнуть на OleContainer меню не появляется.
Обрати внимание на свойство AutoActivate у Контейнера. Оно показывает, каким образом контейнер активизируется. Если установить его в AsGetFocus, и передавать фокус на OleContainer не мышкотыканьем, а нажатием, скажем, на кнопку:
procedure TForm1.Button2Click(Sender: TObject);
begin
OleContainer1.SetFocus;
end;

, то все прекрасно появляется.

Цитата
Мне вообщем надо сделать редактирование документа.
Если тебе надо редактирование, что ж ты открываешь документ через ovShow? Для чего ovOpen тогда? smile.gif

Поищи на форуме, мы как-то с Айрой много чего с OleContainer-ом делали.

На самом деле, я бы все-таки сделал открытие внешнего приложения Word, вместо OleContainer-а. Не все, что доступно через работу с Word-ом доступно через OLE Automation.

Добавлено через 1 мин.
Цитата
нашел метод
Не, ну нормально? Чтоб открыть - делаешь CreateObject, а чтоб закрыть - Close? Нет уж, все по-взрослому smile.gif Создавал объект - теперь разрушай объект !
Client
OleContainer1.DestroyObject;
оК smile.gif
Если поставить AаGetFocus то и мышкой и через кнопку работает. Если на даблклик то.. тоже работает smile.gif
Цитата
Для чего ovOpen тогда
а в чем разница? и там и там смог изменить текст.
Цитата
На самом деле, я бы все-таки сделал открытие внешнего приложения Word
Вызываю
shellexecute(Application.MainForm.Handle,nil,'C:\Doc1.docx',nil,nil,SW_SHOWNORMAL);
так же нормально? smile.gif
Спасибо за помощь! good.gif

Добавлено через 2 мин.
Цитата
Не, ну нормально? Чтоб открыть - делаешь CreateObject, а чтоб закрыть - Close? Нет уж, все по-взрослому Создавал объект - теперь разрушай объект !
ph34r.gif
тоже заподозрил что-то не то... smile.gif
volvo
Цитата
так же нормально?
Ну, если тебе не нужна возможность из программы управлять Word-ом - то этого будет достаточно. Все-таки, приводи строки к типу PChar...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.