| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > TExcellApplication как определить, |
| Автор: P&$ 24.12.2002, 21:13 |
| Привет! Моя прога вызывает Excell для этого в Delphi 5 использую компонент TExcellApplication. Программа соединяется с Excell срезу после запуска, затем в нужный момент : ExcellApplication.Visible=true (делаем его видимым), но вот если пользовательзакроет Excell |
| Автор: Step 24.12.2002, 21:25 |
| через поиск окна екселя, если найдено то згаружен, если нет то не загружен, или глюканул какойто из его модулей findwindow() - искать нужно окно с названием XLMAIN помоему так, это не я придумал, это из учебника по ком и оле. |
| Автор: AntonSaburov 24.12.2002, 22:51 |
| Если посмотреть в FAQ, то там строчка есть Excel := CreateOleObject('Excel.Application'); Я делал когда-то так (точно функцию не помню), надо в хелпе посмотреть try Excel := OpenOleObject('Excel.Application'); // вот эта фунция, уточни сам except Excel := CreateOleObject('Excel.Application'); Если Excel открыт, то используется уже созданный экземпляр. |
| Автор: Fantasist 25.12.2002, 10:34 |
| Хм, неужто TExcelApplication не предоставляет способов проверки этого? В общем случае - GetActiveObject. Если сервер запущен - вернет интерфейс на него. |
| Автор: Oleg 27.12.2002, 18:19 |
| Вот как делаю я, но это раннее связывание без класса 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; Разбирайтесь! :-) |
| Автор: Fantasist 28.12.2002, 05:22 | ||
Точно так же делается в VCL'ном TOleServer, от которого и унаследован TExcelApplication. В методе Connect, вроде. |