Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TExcellApplication как определить, не закрыт ли Excell связанный с ним? 
:(
    Опции темы
P&$
Дата 24.12.2002, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 9.7.2002

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



Привет!
Моя прога вызывает Excell для этого в Delphi 5 использую компонент TExcellApplication. Программа соединяется с Excell срезу после запуска, затем в нужный момент : ExcellApplication.Visible=true (делаем его видимым), но вот если пользовательзакроет Excell  :notify  то тут и возникает проблемма,  :notify  при повторном ExcellApplication.Visible=true, появляется глюканное окно Excell`a. И так пока не выполниш процедуруы Disconnect, Connect. ???  Но каждый раз вызывать эти методы неудобно (время...), КАК ОПРЕДЕЛИТЬ ЗАГРУЖЕН ЛИ Excell?
PM MAIL   Вверх
Step
Дата 24.12.2002, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



через поиск окна екселя, если найдено то згаружен, если нет то не загружен, или глюканул какойто из его модулей


findwindow() -  искать нужно окно с названием XLMAIN помоему так, это не я придумал, это из учебника по ком и оле.


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
AntonSaburov
Дата 24.12.2002, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Если посмотреть в FAQ, то там строчка есть
Excel := CreateOleObject('Excel.Application');

Я делал когда-то так (точно функцию не помню), надо в хелпе посмотреть
try
 Excel := OpenOleObject('Excel.Application'); // вот эта фунция, уточни сам
except
 Excel := CreateOleObject('Excel.Application');

Если Excel открыт, то используется уже созданный экземпляр.
PM MAIL WWW ICQ   Вверх
Fantasist
Дата 25.12.2002, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

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



Хм, неужто TExcelApplication не предоставляет способов проверки этого?

В общем случае - GetActiveObject. Если сервер запущен - вернет интерфейс на него.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Oleg
Дата 27.12.2002, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 16.9.2002

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



Вот как делаю я, но это раннее связывание без класса
 TExcelApplication вместо него _Application из импортированной библиотеки типов:

...
uses Excel_TLB, ActiveX, ComObj;
const LCID:Integer = LOCALE_USER_DEFAULT
var Unknown: IUnknown;
   Result: HResult;  // для проверки запущен ли
   Excel: _Application;
begin
try
 Result:= GetActiveObject(CLASS_ExcelApplication, nil, Unknown);
 if (Result = MK_E_UNAVAILABLE) then begin
   Excel:= CoExcelApplication.Create; //если нет генерируем ко-класс
   Book:= Excel.Workbooks.Add(EmptyParam, lcid);
   Sheet:= Book.ActiveSheet as _Worksheet;
   Excel.WindowState[LCID]:= xlMaximized;
   Excel.Visible[LCID]:= True;
 end
 else begin
   OleCheck(Result); // гасим ошибки OLE
   OleCheck(Unknown.QueryInterface(_Application, Excel));
 end;
except
  Excel.DisplayAlerts[lcid]:= False;
  Excel.Quit;
end;
Разбирайтесь! :-)
--------------------
...Знающий не доказывает.   Доказывающий не знает...
PM MAIL   Вверх
Fantasist
Дата 28.12.2002, 05:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

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



Цитата
Вот как делаю я


Точно так же делается в VCL'ном TOleServer, от которого и унаследован TExcelApplication. В методе Connect, вроде.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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