** laifik |
Отправлено: 15.09.2004, 12:33 |
|
Не зарегистрирован
|
Никак не могу правильно написать функцию для подсчета количества листов в документе Word из Билдера. Нигде не могу отыскать четкой информации, как применять интерфейс IDispatch.
На Делпфи отыскала такой код:
[CODE] int Words = WordApp->ActiveDocument->BuiltInDocumentProperties(wdPropertyPages)->Value;
[CODE]
Но на Си Билдере он выдает ошибку
" Call of nonfunction"
В библиотеке Билдере есть такие вещи:
[CODE]
__property LPDISPATCH BuiltInDocumentProperties = {read = get_BuiltInDocumentProperties};[CODE]
или
[CODE]BuiltInDocumentProperties(IDispatch **)[CODE]
Как все это совместить?
Помогите, пожалуйста, с кодом. Очень нужно.
Если можно, на С++ Билдере. На VBA и Делпфи у меня много кодов, но их ни как не подстроить под Си. Я уже второй день мучаюсь. |
|
xim |
Отправлено: 15.09.2004, 15:19 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 143
|
Для открытого документа в ворде:
#include
int get_active_doc_page_count()
{
int res=0;
Variant word_app=Variant::GetActiveObject("Word.Application");
if(VarIsNull(word_app))return;
Variant active_document=word_app.OlePropertyGet("ActiveDocument");
if(VarIsNull(active_document))
{
word_app=Unassigned;
return;
}
res=active_document.OlePropertyGet("BuiltInDocumentProperties",
0x0E/*wdPropertyPages*/);
word_app=Unassigned;
return res;
}
Почитай контекстный help по CreateObject/Exec/OlePropertyGet
(там есть неплохие примеры) |
|
** laifik |
Отправлено: 18.09.2004, 22:08 |
|
Не зарегистрирован
|
Очень сложный вопрос, никто до сих пор не помог, хотя сижу несколько дней.
В открытом и уже сформированном документе Ворд нужно определить количество листов, которое получилось. Такой код
CODE | //IID_HeaderFooter — Указатель на информацию о типе интерфейса
OLECHAR* szMember = L"PageNumbers"; //метод
int cNames = 2; //число элементовszMember
id_get=0; //Указатель на массив DISPID,
//получаем указатель на IDispatch:
LPDISPATCH pDisp = WordApp->ActiveDocument->BuiltInDocumentProperties;
//используем для вызова функции:
int Words = pDisp->GetIDsOfNames(IID_HeaderFooter, &szMember , cNames, LOCALE_SYSTEM_DEFAULT, &id_get);
ShowMessage(Words); |
Получается странный результат = -2147352575. Конечно, это не кол-во листов. Помогите, пожалуйста, додумать. |
|
|