link9380 link9381 link9382 link9383 link9384 link9385 link9386 link9387 link9388 link9389 link9390 link9391 link9392 link9393 link9394 link9395 link9396 link9397 link9398 link9399 link9400 link9401 link9402 link9403 link9404 link9405 link9406 link9407 link9408 link9409 link9410 link9411 link9412 link9413 link9414 link9415 link9416 link9417 link9418 link9419 link9420 link9421 link9422 link9423 link9424 link9425 link9426 link9427 link9428 link9429 link9430 link9431 link9432 link9433 link9434 link9435 link9436 link9437 link9438 link9439 link9440 link9441 link9442 link9443 link9444 link9445 link9446 link9447 link9448 link9449 link9450 link9451 link9452 link9453 link9454 link9455 link9456 link9457 link9458 link9459 link9460 link9461 link9462 link9463 link9464 link9465 link9466 link9467 link9468 link9469 link9470 link9471 link9472 link9473 link9474 link9475 link9476 link9477 link9478 link9479 link9480 link9481 link9482 link9483 link9484 link9485 link9486 link9487 link9488 link9489 link9490 link9491 link9492 link9493 link9494 link9495 link9496 link9497 link9498 link9499 link9500 link9501 link9502 link9503 link9504 link9505 link9506 link9507 link9508 link9509 link9510 link9511 link9512 link9513 link9514 link9515 link9516 link9517 link9518 link9519
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