Модераторы: MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> определить закрыт Word или нет 
:(
    Опции темы
Albinos_x
Дата 24.4.2005, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



Работаю с компонентами закладки Servis

WordApplication1 и WordDocument1

пытаюсь определить открыт или закрыт Word, так
Код
...
if not VarIsEmpty(WordApplication1.Application) then
...


но эта строка всегда возвращяет - True

Может, кто знает, как правильно определять запущен Word или нет?

Заранее спасибо за помощь! smile


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
z-END
Дата 24.4.2005, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: нет
Всего: 102



попробуй так:
Код

function WordRunning:Boolean;
var 
 temp: Variant;
begin
  try
    temp := GetActiveOleObject('Word.Application');
    Result := true;
  except 
   Result := false;
 end;
end;



--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Albinos_x
Дата 24.4.2005, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



в каком модуле лежит GetActiveOleObject();


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
z-END
Дата 24.4.2005, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: нет
Всего: 102



помоему в ComObj если нет то нажми хэлп по данной ф-ции и посмотри в описании из какого она модуля.


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Albinos_x
Дата 24.4.2005, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



Аналогичная проблема...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
z-END
Дата 24.4.2005, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: нет
Всего: 102



Цитата(Albinos_x @ 24.4.2005, 14:49)
Аналогичная проблема...

всмысле? опять получается что Ворд запущен?! может он у тя в процессах висит?!


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Albinos_x
Дата 24.4.2005, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



Я был не прав определяет... Но не совсем так как мне нужно...

обнаружил следующие косяки
1. Word открыт. Запускаем программу. Документ в ней не создаём. закрываем программу. Закрывается до этого открытый документ + ещё и сохраняется
2. Word закрыт. Запускаем программу. создаём в ней документ. Закрываем документ (Word). Программа выдаёт ошибку.

код
Код

procedure TForm1.SpeedButton1Click(Sender: TObject);
var SaveChanges, templ:olevariant;
    s: string;
begin
// если Word не закрыт
  if WordRunning  then
     begin
     // определяем название и место сохранения документа
     s:=ExtractFilePath(Application.ExeName)+'Temp\отчёт '+ DateToStr(DateTimePicker1.Date);
   // если такой файл уже существует
     while (FileExists(s+'.doc')) do
        begin
    // добавляем к названию 'Copy'
        s:=s+'Copy';
        end;
     Templ:=s+'.doc';
     // если не сохранен, то
     if WordApplication1.ActiveDocument.Saved=false then
          // сохраняем
        WordApplication1.ActiveDocument.SaveAs(Templ, EmptyParam, EmptyParam, EmptyParam,
                                                      EmptyParam, EmptyParam, EmptyParam,
                                                      EmptyParam, EmptyParam, EmptyParam,
                                                      EmptyParam, EmptyParam, EmptyParam,
                                                      EmptyParam, EmptyParam, EmptyParam);
     SaveChanges:=false;
     // Закрываем документ
     //WordApplication1.ActiveDocument.Close(SaveChanges,EmptyParam,EmptyParam);
     end;
Application.Terminate;


Это сообщение отредактировал(а) Albinos_x - 24.4.2005, 15:49


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
z-END
Дата 24.4.2005, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: нет
Всего: 102



несовсем понятно что написано..
Цитата(Albinos_x @ 24.4.2005, 16:46)
выдаёт ошибку.

Какую ошибку?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Albinos_x
Дата 24.4.2005, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



ругается, говорит что операция недоступна.
думаю что WordApplication1 не разъединяется с вордом при его закрытии и пытается его закрыть...

Это сообщение отредактировал(а) Albinos_x - 24.4.2005, 17:21


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Albinos_x
Дата 24.4.2005, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



Кто-нибудь знает как это побороть?




--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
<Spawn>
Дата 25.4.2005, 05:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Вот еще один способ:

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  Unknown: IUnknown;
  Result: HResult;
begin
  Result := GetActiveObject(ProgIDToClassID('Word.Application'), nil, Unknown);
  if Result = MK_E_UNAVAILABLE then
    ShowMessage('Закрыт')
  else
    ShowMessage('Открыт')
end;



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
RA
Дата 25.4.2005, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: нет
Всего: 115



Можно и так smile
if FindWindow('MsoStdCompMgr',nil)<>0 then caption:='On' else caption:='Off';

PM   Вверх
Albinos_x
Дата 25.4.2005, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



Цитата
GetActiveObject(ProgIDToClassID('Word.Application'), nil, Unknown);


подскажите в каком модуле она лежит, а то делфя не понимает её...

А через WordApplication1 можно как-нибудь определить, потому что предлогаемые варианты определяют не только мою сессию, но и другие.

Цитата
обнаружил следующие косяки
1. Word открыт. Запускаем программу. Документ в ней не создаём. закрываем программу. Закрывается до этого открытый документ + ещё и сохраняется
2. Word закрыт. Запускаем программу. создаём в ней документ. Закрываем документ (Word). Программа выдаёт ошибку.


1. определять мне надо ворд (документ) , который создался программой
2. если пользователь закрыл ворд (документ), который создался программой, то предотвратить попытку его закрытия при уничтожении WordApplication1
Добавлено @ 16:46
прошу прощения, если немного неправильно выразился при постановки вопроса


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
<Spawn>
Дата 25.4.2005, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Цитата
подскажите в каком модуле она лежит, а то делфя не понимает её


ActiveX

Это сообщение отредактировал(а) <Spawn> - 25.4.2005, 19:05


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Albinos_x
Дата 25.4.2005, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



спасибо,
но это - всё равно не решает мою проблему полностью...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0565 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.