Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.18;
Скачать: CL | DM;

Вниз

Можно ли ( и как) пользоваться COM или OLE-технологией в Д3 (Word   Найти похожие ветки 

 
Winni   (2005-07-06 17:25) [0]

К сожалению, вынужден ограничиваться Делфи3 (память компов < 64Mb). Можно ли в этом случае применить основные свойства и методы объекта WordApplication (Word2000.pas, WordXP.pas) или что-нибудь вроде этого?

В Д3 нормально работает следующий текст:
.....
  V: OLeVariant;

var
 Form1: TForm1;

implementation uses ComObj;
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
V:= CreateOleObject("Word.Application");
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
V.Caption := "MyWord";
V.Visible := true;
end;
...
Но я не нашел, можно ли далее программно делать что-нибудь с V.

Пытался подобраться с другой стороны - используя Word_TLB.pas.
Однако в этом случае модуль (Office_TLB) не компилируется:

procedure Change(const Ctrl: CommandBarComboBox); stdcall;
(Error: ... Undecleared indifier:  CommandBarComboBox )

Может быть, используется слишком новая версия Word.olb ?


 
just_me   (2005-07-06 18:43) [1]

Скорее слишком старая версия модуля экспорта type library, вхолящая в поставку Delphi3
Что же касается работы через OLeVariant (позднее связывание), то так можно работать даже в Delphi2. При этом вся функционадьность доступна. В последне время по VBA появилось масса информации, в том числе и книг, так что читать есть где. Ну, и не стоит забывать про MS Visual Basic Help, доступный в среде офиса - там в принципе есть все нужное


 
YurikGL ©   (2005-07-06 19:02) [2]


> Но я не нашел, можно ли далее программно делать что-нибудь
> с V.

http://www.delphimaster.ru/cgi-bin/anketa.pl?id=1084962208

Для того что-бы узнать, как что-то сделать из Delphi во Word-e надо во Word-е зайти в меню сервис/макрос/начать запись... Потом сделать во Word-e то, что надо сделать из Delphi и закончить запись макроса. И наконец сервис/макрос/макросы...выбираем записанный...изменить и смотрим, как он устроен. После этого первод синтаксиса VBA в синтаксис Delphi осуществляется просто и непринужденно.
Еще одним хорошим инструментом получения знаний являются компоненты типа TWordApplication. Кидаем его на форму, в любом операторе набираем WordApplication1., нажимаем ctrl+пробел и внимательно читаем. Смысл доступных функций и свойств обычно понятен интуитивно.


 
just_me   (2005-07-06 19:32) [3]

> Еще одним хорошим инструментом получения знаний являются компоненты типа TWordApplication

TWordApplication в Делфи3?


 
Winni   (2005-07-06 20:41) [4]

Спасибо !
Но в принципе все это мне известно. Когда работаю в D7, D6,то
удобно пользоваться справками типа VBAWRD9.chm, VBAWd10.chm и расшифровкой макросов. Но в Д3 чаще это не срабатывает. Но буду еще искать. Правда, нашел еще кое-что, которое работает

V.Caption := "MyWord";
V.Visible := true;
V.application.documents.add;
V.application.activedocument.range.insertAfter("Привет, привет");

Но здесь добавилось Application. Может в ем вся соль ?
(Добыто с сайта http://alex-co.com.ru/forum/ (Архангельский А.Я))


 
just_me   (2005-07-06 20:46) [5]

Это совершенно не зависит от версии Делфи! С таким же успехом можно использовать офисные СОМ сервера с помощью VB, VB/JScript. А вот объектная модель офисов разных версий может отличвться.


 
Winni   (2005-07-06 21:52) [6]

Добрый день !

> Это совершенно не зависит от версии Делфи!
- Наверное, это так и тогда появляются большие надежды.
Получается, что начитавшись VBAWRD9.chm и Word2000.pas я могу
использовать все методы и свойства. Это очень интересно, буду пробовать. Спасибо.


 
YurikGL ©   (2005-07-06 21:52) [7]


> just_me   (06.07.05 19:32) [3]
> > Еще одним хорошим инструментом получения знаний являются
> компоненты типа TWordApplication
>
> TWordApplication в Делфи3?

Что мешает посмотреть в фаре Word2000.pas ?


 
Winni   (2005-07-07 12:28) [8]

Добрый день !
И все-таки разница есть. В Д3 не описан EmptyParam => заменяю на UnAssigned. Но вставка рисунка, которая нормально проходит на Д7, здесь не получается. Во время исполнения при выполнении Shapes.AddPicture получаю сообщение: Одно из значений, переданных этому методу или свойству, выходит из допустимого диапазона. Если же присвоить численные значения Left,Top, Width,Height, то сообщения нет, но картинка не появляется.

{ ранее выполнено:
V:= CreateOleObject("Word.Application");
DirName:=ExtractFilePath(Application.EXEName);
}

Вот текст процедуры:
procedure TForm1.Button2Click(Sender: TObject);
Var Template, NewTemplate, DocumentType,
   Visible: OleVariant; NumRows,NumColumns,ii,jj: Integer;
   R22,PN,PNA: OleVariant; FName: WideString;
   DefaultTableBehavior: OleVariant; AutoFitBehavior: OleVariant;
   LinkToFile,SaveWithDocument,Left,Top, Width,Height,Anchor : OleVariant;
begin
V.Caption := "MyWord";
V.Visible := true;
V.application.documents.add;
V.application.activedocument.range.insertAfter("Привет, привет");

 try
     FName := DirName+"Logo.gif";  //Загружаем картинку-логотип в документ.
     Anchor :=  V.application.Selection.Range;  LinkToFile:=False;
     SaveWithDocument:=True;
     Left := UnAssigned; Top:= UnAssigned;
     Width:= UnAssigned; Height:= UnAssigned;
     V.application.activedocument.Shapes.AddPicture(FName,// имя файла с картинкой
      LinkToFile, //Связь с картинкой ( отсутствует)
      SaveWithDocument, //Сохранять вместе с документом? (Да)
      Left, Top, Width , Height, //Эти параметры не заданы.
      Anchor );
 except
  showmessage("Сервер отключен");
end;
end;


 
just_me   (2005-07-07 14:45) [9]

И все-таки разницы нет! Создайте, например, новый текстовый файл с именем test.js и поместите в него такой код:
  var wObj = new ActiveXObject("Word.Application");
  wObj.Visible = true;
  wObj.Caption = "MyWord";
  wObj.Visible = true;
  wObj.application.documents.add();
  wObj.application.activedocument.range(0,1).insertAfter("Hello, Hello");
  var a = wObj.application.Selection.Range;
  wObj.application.activedocument.Shapes.AddPicture("G:\\test.bmp", false, true, 0, 0, 100, 100, a);

Это аналог дельфового кода и он делает именно то, что вам нужно. А выход за диапазон координат и размеров возможно связан с тем, что они, согласно справке по VBA, мерятся в points


 
Winni   (2005-07-07 17:04) [10]

Спасибо !
Однако здесь я оплошал в другом - забыл, что Ворд бывает в режиме "Обычный" а чтобы рисовал - нужна "Разметка страницы" или "Веб". Так что работает и .js и мой код в Д3. Пришлось только автоматизировать перключение в режим "Разметка страницы". Для этого записал макрос, перевел в делфи, учел, что Д3( без Word2000.pas) не понимает wdPrintView, узнал, что это = 3 и все сработало. Пойду дальше. Но все же мне непонятно, как это работает без интерфейсного модуля Word2000. Где хранятся имена свойств и методов. Может, в реестре. Или буду искать описание OLE-технологии, пока ничего полезного не нашел.


 
just_me   (2005-07-07 17:18) [11]

Это и называется "позднее связывание". Эта информация нигде в этом случае не хранится, клиент вызывает сервер на свой страх и риск. При этом перед реальным вызовом СОМ-среда ищет в метаданных сервера функцию с заданным именем и найдя определяет ее индекв и вызывает по этому индексу. Количество, порядок и типы параметров заранее также не проверяются и вызов может быть отвергнут с возвратом ошибки.
BTW не все так трагично, можно попробовать поимпортить библиотеку типов конкретного Ворда и поредактировать получившийся pas-файл, дабы добиться компилируемости. Грубо говоря выкинуть какие-то описания, непонятные для Д3. Ясно, что функциональность пострадает, но может оставшейся как раз хватит.


 
Winni   (2005-07-07 20:12) [12]

Да, стоит попробовать. Вначале я об этом писал - что не компилируется в Д3 Word_TLB.pas, причем не понимает Д3  CommandBarComboBox. Попытаюсь выкинуть и буду надеяться, что не увязну в этом деле. Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2006.06.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.068 c
11-1128575351
DmiSb
2005-10-06 09:09
2006.06.18
Можно ли при отправке почты при помощи Synapse прикрепить файл ?


15-1147685730
SamProf
2006-05-15 13:35
2006.06.18
Не могу поставит Delphi 8


1-1145964438
Alexandr
2006-04-25 15:27
2006.06.18
новая страница word


4-1142851851
balepa
2006-03-20 13:50
2006.06.18
Socket and TIME_WAIT


2-1148888726
Ironman83
2006-05-29 11:45
2006.06.18
dxTreeList