![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
можно иметь два указателя на один 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;