C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
IDispatch, BuiltInDocumentProperties, Количество листов в документе
** 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 и Делпфи у меня много кодов, но их ни как не подстроить под Си. Я уже второй день мучаюсь. cool.gif
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. Конечно, это не кол-во листов. Помогите, пожалуйста, додумать. smile.gif

Вернуться в Вопросы программирования в C++Builder