crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Active X и MS Word
straylon
  опции профиля:
сообщение 10.2.2010, 17:12
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 10.2.2010
Пользователь №: 1461

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте! Использую компонент QAxWidget для отображения в главном окне своей программы документа Word.
Делаю это стандартным способом: ui.axWidget->setControl("C:/1.doc"), где axWidget собственно сам QAxWidget, размещенный на окно в дизайнере. Все работает нормально, однако после закрытия программы, остается процесс WINWORD.EXE, который подгружает память компьютера пользователя. Как при выходе его можно программно останавить? Буду благодарен за любые советы и помощь.
Вот код:
test::test(QWidget *parent, Qt::WFlags flags)
   : QMainWindow(parent, flags)
{
   ui.setupUi(this);
   connect (ui.pushButton, SIGNAL (clicked()), this, SLOT (active()));
   connect (ui.pushButton_2, SIGNAL (clicked()), this, SLOT (exit()));
}
void test::active()
{
   ui.axWidget->setControl("C:/1.doc"); // помещаю в QAxWidget документ

}
void test::exit() // это выполняется при закрытии
{
   ui.axWidget->dynamicCall("Quit()"); //не выходит
   ui.axWidget->close(); // виджет с документом закрывается, но процесс Winword.exe остается все равно
   //пробую так - тоже ничего
  QAxObject *app = ui.axWidget->querySubObject("Application");
  app->dynamicCall("Quit()");
}

test::~test()
{

}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Wlad
  опции профиля:
сообщение 11.2.2010, 14:07
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 9.12.2008
Пользователь №: 450

Спасибо сказали: 0 раз(а)




Репутация:   1  


Попробовал так:

dynamicCall("SetDisplayAlerts(bool)", FALSE); // НЕ Выводить сообщения
dynamicCall("Quit()");

процесс в памяти после выхода из программы не остается.
В свое время, много работал с Excel в Builder. Был такой же эффект, как и у Вас. Если пользователь не выходя из программы несколько раз запускал отчет в Excel, то все процессы оставались в памяти даже после выхода из программы. После обсуждения этого явления на соответствующем форуме пришли к выводу, что это проблема Microsoft. Выход из положения был один: удалять процесс самому через API Windows.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
straylon
  опции профиля:
сообщение 12.2.2010, 11:30
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 10.2.2010
Пользователь №: 1461

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Wlad @ 11.2.2010, 15:07) *
Попробовал так:

dynamicCall("SetDisplayAlerts(bool)", FALSE); // НЕ Выводить сообщения
dynamicCall("Quit()");

процесс в памяти после выхода из программы не остается.
В свое время, много работал с Excel в Builder. Был такой же эффект, как и у Вас. Если пользователь не выходя из программы несколько раз запускал отчет в Excel, то все процессы оставались в памяти даже после выхода из программы. После обсуждения этого явления на соответствующем форуме пришли к выводу, что это проблема Microsoft. Выход из положения был один: удалять процесс самому через API Windows.

Wlad, а ты как это делаешь
так -
ui.axWidget->dynamicCall("SetDisplayAlerts(bool)", FALSE);
ui.axWidget->dynamicCall("Quit()");
или так
QAxObject* word = new QAxObject ("Word.Application");
word->dynamicCall("SetDisplayAlerts(bool)", FALSE);
word->dynamicCall("Quit()");
Просто в первом случае не работает, а во втором работает. Но второй случай меня не устраивает, т.к. работа с Вордом ведется через ui.axWidget, а не через Word.Application, как отдельное от моей программы приложение Ворд.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 15:12