Опциональный параметр Variant

Раздел посвящен программированию с использованием Power Basic.
Kroos
Обычный пользователь
Обычный пользователь
 
Сообщения: 55
Зарегистрирован: 21.02.2012 (Вт) 16:57

Опциональный параметр Variant

Сообщение Kroos » 06.04.2012 (Пт) 16:49

Пытаюсь напечатать документ ворд, имеется метод:
Код: Выделить всё
METHOD PrintOut <446> (OPT BYREF IN Background AS VARIANT, OPT BYREF IN PB_Append AS VARIANT,_
                       OPT BYREF IN PB_Range AS VARIANT, OPT BYREF IN OutputFileName AS VARIANT, _
                       OPT BYREF IN PB_From AS VARIANT, OPT BYREF IN PB_To AS VARIANT, _
                       OPT BYREF IN ITEM AS VARIANT, OPT BYREF IN COPIES AS VARIANT, ... ...

соотв-но вопрос, как правильно вызвать такой метод, если нужно указать лишь некоторые optional параметры. Я пробовал просто опускать ненужные параметры типа oWordDoc.PrintOut(,,PB_Range,...), передавать пустые variant'ы... не работает, как правильно тут действовать? Требуемые параметры - PB_Range,COPIES,PB_Pages,PB_Collate. Может тут какие-то заморочки конкретного метода?

DarkMachine
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 24.02.2012 (Пт) 15:58

Re: Опциональный параметр Variant

Сообщение DarkMachine » 06.04.2012 (Пт) 20:57

Попробуй так
Код: Выделить всё
OBJECT CALL PrintOut ( PB_Range = ... , COPIES = 4, PB_Pages = 1, PB_Collate = 0 )

Kroos
Обычный пользователь
Обычный пользователь
 
Сообщения: 55
Зарегистрирован: 21.02.2012 (Вт) 16:57

Re: Опциональный параметр Variant

Сообщение Kroos » 07.04.2012 (Сб) 7:33

Дает ошибку - Error 426 : Variable expected. Но если даже я подсуну переменные (со значением 0 и 1):
Код: Выделить всё
OBJECT CALL oWord.PrintOut ( PB_Range = Par0, COPIES = Par1, PB_Pages = Par1, PB_Collate = Par0 )

ничего не происходит, не печатает и все.

Kroos
Обычный пользователь
Обычный пользователь
 
Сообщения: 55
Зарегистрирован: 21.02.2012 (Вт) 16:57

Re: Опциональный параметр Variant

Сообщение Kroos » 07.04.2012 (Сб) 11:11

в общем, что-то начало получаться. действую так:

Код: Выделить всё
LOCAL vBackground AS VARIANT : vBackground = 0
LOCAL vPB_Append AS VARIANT : vPB_Append = 0
LOCAL vPB_Range AS VARIANT : vPB_Range = %wdPrintAllDocument
...
...
oWordDoc.PrintOut(vBackground,vPB_Append,vPB_Range,...)


опциональность параметров работает по остаточному принципу, т.е. если надо явно указать кол-во копий vCOPIES, то нужно и явно указывать все предшествующие параметры. означает ли это что во всех случаях нужно так делать, в чем смысл тогда опциональности параметра?

p.s: вру, перестало работать со всеми параметрами. так и непонятно что нужно сделать чтобы передать "пустой" параметр, либо вообще его не передавать...

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.04.2012 (Сб) 13:51

Kroos писал(а):то нужно и явно указывать все предшествующие параметры

Так сделано в большинстве языков.

DarkMachine
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 24.02.2012 (Пт) 15:58

Re: Опциональный параметр Variant

Сообщение DarkMachine » 07.04.2012 (Сб) 19:38

Работает.
Паниковать ненужно, в хелпе все расписано. (как работать с объектами)

Код: Выделить всё
LOCAL vCopy, vOfn AS VARIANT: vCopy = 1: vOfn = "C:\outfile.prn"
OBJECT CALL oWordApp.Printout (COPIES=vCopy, OutputFileName = vOfn)

Интерфейс Word_Application, метод Printout

Kroos
Обычный пользователь
Обычный пользователь
 
Сообщения: 55
Зарегистрирован: 21.02.2012 (Вт) 16:57

Re: Опциональный параметр Variant

Сообщение Kroos » 08.04.2012 (Вс) 4:40

хорошо, а тогда что-нибудь из этого работает? у меня нет. word2003/pb10.02

Код: Выделить всё
LOCAL oWord AS IDISPATCH
LET oWord = GETCOM $PROGID_Application
IF ISTRUE ISOBJECT(oWord) THEN
   ?("printout")
   LOCAL vCopy, vPB_Pages, vPB_Collate, vPB_Range AS VARIANT
   vCopy = 2 : vPB_Pages = "1,2" : vPB_Range = %wdPrintAllDocument : vPB_Collate = "True"
   OBJECT CALL oWord.Printout (COPIES = vCopy, PB_Collate = vPB_Collate)
   ' OBJECT CALL oWord.Printout (PB_Pages = vPB_Pages, COPIES = vCopy, PB_Collate = vPB_Collate)
   ' OBJECT CALL oWord.Printout (PB_Range = vPB_Range, COPIES = vCopy)
END IF


вероятно что попросту передавал некорректные или "взаимоисключающие" наборы параметров, проверил справку, проверил здесь, нет вроде все должно работать...

DarkMachine
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 24.02.2012 (Пт) 15:58

Re: Опциональный параметр Variant

Сообщение DarkMachine » 08.04.2012 (Вс) 23:01

Возьми пример OWord.bas из папки samples\Objects\Word\ и модифицируй его.

Kroos
Обычный пользователь
Обычный пользователь
 
Сообщения: 55
Зарегистрирован: 21.02.2012 (Вт) 16:57

Re: Опциональный параметр Variant

Сообщение Kroos » 09.04.2012 (Пн) 9:41

да смотрел я его разумеется, в первую очередь туда и залез. но там же не показано как разрулить printout со всеми нужными параметрами, а самому не получается допетрить.


Вернуться в Power Basic

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList