Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

можно иметь два указателя на один Excel, разных типов? [D7, XP]


OW ©   (2011-04-29 12:08:00) 

Половина кода написана в таком стиле:
 ExcelApp, Workbook: Variant;
     ExcelApp := CreateOleObject('Excel.Application');
     Workbook := ExcelApp.WorkBooks.Add;

половина через компоненты
 exapp1: TExcelApplication;  
 IWorkbook: Excel2000.ExcelWorkbook;
    exapp1.Connect;
    exapp1.Workbooks.Add(EmptyParam, 0);
    IWorkbook := exapp1.ActiveWorkbook;

подскажите прием, как бы сделать так, что бы exapp1 и ExcelApp указывали на одно и тоже.

 exapp1.Connect;
 exapp1.Visible[0] := True;
 exapp1.Workbooks.Add(EmptyParam, 0);
 IWorkbook := exapp1.ActiveWorkbook;

 Workbook := Variant(IWorkbook);  // тут можно приравнять книги

 ShowMessage( IntToStr(IWorkbook.Worksheets.Count) ); //спрашиваем кол- во у одного

 WorkBook.WorkSheets[1].delete; // удаляем у другого

 ShowMessage( IntToStr(IWorkbook.Worksheets.Count) ); // переспрашиваем у первого, он понял все. На одну меньше показал.

то же с объектом выше не идет
ExcelApp := Variant(exapp1);
[Error] : Invalid typecast


Anatoly Podgoretsky   (2011-04-30 13:54:00) [1]

> ов (дом)  (30.04.2011 10:27:10)  [10]

Любых


ов (дом)   (2011-04-30 10:27:00) [2]


> Anatoly Podgoretsky ©   (29.04.11 16:09) [9]



> разных типов?


Anatoly Podgoretsky   (2011-04-29 16:09:00) [3]

> DiamondShark  (29.04.2011 12:14:01)  [1]

Pointer1: Pointer;
Pointer2: Pointer;

а если нужно три, то

Pointer3: Pointer;


OW   (2011-04-29 15:44:00) [4]

еще раз спасибо!
всех получилось скрестить :)


OW   (2011-04-29 13:56:00) [5]

понял. так и думал.
никогда не копался в сторону интерфейсов.. боюсь я их :)

Спасибо, Дмитрий!


DiamondShark   (2011-04-29 13:03:00) [6]


> OW ©   (29.04.11 12:41) [3]
> А еще бы наоборот, для полного счастья..

Наоборот будет не совсем наоборот.

var
 dispExcel: IExcelApplication; // или какой там тип интерфейса?
...

dispExcel := IDispatch(ExcelApp) as IExcelApplication;

где-то так.

А может быть у обёртки TExcelApplication есть возможность подключиться к существующему экземпляру COM-объекта.
Я наизусть не помню, дельфи нет, и давно это было.

Загляни в исходник TExcelApplication, там всё понятно должно быть, это довольно тупая машинногенерированная обёртка над automation-объектами.

Читать и гуглить можно про COM, Automation. Чтоб далеко не гуглить можно начать с мсдн, делая поправки на дельфи. Исходники обёрток, которые дельфи генерирует для COM-объектов, тоже очень проясняют дело.


OW   (2011-04-29 12:42:00) [7]

или где почитать?


OW   (2011-04-29 12:42:00) [8]

или что погуглить?


OW   (2011-04-29 12:41:00) [9]

А еще бы наоборот, для полного счастья..


OW   (2011-04-29 12:39:00) [10]

а ларчик прост..
Спасибо!


DiamondShark   (2011-04-29 12:14:00) [11]


> ExcelApp := Variant(exapp1);

ExcelApp := exapp1.DefaultInterface;


Наверх

Титульная страница Поиск, карта сайта Написать письмо