Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2009, 13:17   #1
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию Как правильно работать с методом PrintOut?

Доброго всем.
Я пишу свой класс на Делфи для работы с Word. Затык в печати через метод Application.PrintOut.

В VBA сделал запись макроса, чтоб понять как этот метод работает и вот что получил:
Код:
Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 08.07.2009 DJ_Diesel
'

   Application.PrintOut FileName:="", Range:=wdPrintRangeOfPages, Item:= _
        wdPrintDocumentContent, Copies:=1, Pages:="2-3", PageType:= _
        wdPrintAllPages, ManualDuplexPrint:=False, Collate:=True, Background:= _
        True, PrintToFile:=False, PrintZoomColumn:=0, PrintZoomRow:=0, _
        PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0
End Sub
Здесь указание страниц срабатывает на ура
Пишу в Делфи:
Код:
  
   FileName:='';
   Range:=wdPrintRangeOfPages;
   Item:=wdPrintDocumentContent;
   Copies:=1;
   Pages:='1-3';
   PageType:=wdPrintAllPages;
   ManualDuplexPrint:=false;
   Collate:=True;
   Background:=false;
   PrintToFile:=false;
   PrintZoomColumn:=0;PrintZoomRow:=0;
   PrintZoomPaperWidth:=0;PrintZoomPaperHeight:=0;

result:=TWord(this).App.PrintOut(FileName,Range,Item,Copies,Pages,PageType,ManualDuplexPrint,
   Collate,Background,PrintToFile,PrintZoomColumn,PrintZoomRow,
   PrintZoomPaperWidth,PrintZoomPaperHeight);
Здесь app получаю так:
Код:
app:=GetActiveOleObject('Word.Application');
Выдает ошибку: "Несовпадение типов" на строке с TWord(this).App.PrintOut...

Вопрос: Как правильно передавать параметры или где об этом почитать желательно с примерами.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.07.2009, 14:50   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

А Delphi знает, чему равны wdPrintAllPages, wdPrintDocumentContent, wdPrintRangeOfPages? Сомневаюсь, если только вы их не описали как константы.
Они равны соответственно: 0, 0, 4

Кроме того, PrintOut — это процедура, она не возвращает значение.
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 08.07.2009 в 14:58.
viter.alex вне форума Ответить с цитированием
Старый 08.07.2009, 15:08   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Сомневаюсь, если только вы их не описали как константы.
Описал
Код:
 wdPrintAllDocument=0;
 wdPrintCurrentPage=2;
 wdPrintFromTo=3;
 wdPrintRangeOfPages=4;
 wdPrintSelection=1;

 wdPrintAutoTextEntries=4;
 wdPrintComments=2;
 wdPrintDocumentContent=0;
 wdPrintKeyAssignments=5;
 wdPrintProperties=1;
 wdPrintStyles=3;
 wdPrintAllPages=0; wdPrintEvenPagesOnly=2 ; wdPrintOddPagesOnly=1;
Все как полагается.

Мне думается что OleVariant где-то лажает... Но никак не пойму где...
Файктически если я ставлю куда-нибудь что-то кроме EmptyParam вылетает эта ошибка...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.07.2009, 15:27   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Попробуй задавать EmptyParam для тех значений, которые остаются по-умолчанию. Когда-то была похожая тема, человек с поиском пытался работать через Delphi
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 08.07.2009 в 15:30.
viter.alex вне форума Ответить с цитированием
Старый 08.07.2009, 16:22   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
viter.alex
Пробовал...
Если всем переменкам присвоить ЭмптиПарам то работает, но как только хоть одной из них задать ченить скажем:
Код:
   FileName:=EmptyParam;//
   Range:=EmptyParam;//wdPrintAllDocument;
   Item:=EmptyParam;//wdPrintDocumentContent;
   Copies:=1;
   Pages:=EmptyParam;//EmptyParam;
   PageType:=EmptyParam;//wdPrintAllPages;
   ManualDuplexPrint:=EmptyParam;//false;
   Collate:=EmptyParam;//True;
   Background:=EmptyParam;//false;
   PrintToFile:=EmptyParam;//false;
   PrintZoomColumn:=EmptyParam;//0;
   PrintZoomRow:=EmptyParam;//0;
   PrintZoomPaperWidth:=EmptyParam;//0;
   PrintZoomPaperHeight:=EmptyParam;//0;
Падает на ту ошибку....
Может там как то приводить типы нужно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.07.2009, 17:02   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Честно говоря, не знаю. Может быть подойдет способ, которым эта девушка сделала:
Цитата:
Сообщение от Lisi4ka Посмотреть сообщение
Проблему решила путем присвоения переменной типа OleVariant значения worddocument1.Range.End_, теперь с синтаксисом разбираюсь, ведь свойства Paragraphs у ActiveDocument.Range(iStart, ActiveDocument.Range.End).Find.Pare nt нет(((
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 09.07.2009, 09:11   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
viter.alex
Ладно. Спасибо и за поддержку
Пока ничего не решил, буду с этой проблемой переспать
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обьясните как работать с графикой и как решыть задачу Alex_Fort Помощь студентам 6 12.06.2009 00:05
Задача Методом Эйлера и методом Рунге-Кутта. Прошу помочь. Очень срочно. BeNeDiKT Паскаль, Turbo Pascal, PascalABC.NET 0 12.05.2009 13:14
Не желает работать правильно программа из Питера Абеля bullvinkle Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 28.02.2009 11:11
Решение уравнения методом деления отрезка пополам. Методом секущей. Panda196 Паскаль, Turbo Pascal, PascalABC.NET 3 25.11.2008 09:06
как правильно работать с массивом TStrings Air Общие вопросы Delphi 6 19.12.2007 17:55