Форум: "Corba";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];
ВнизМожно ли ( и как) пользоваться 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 вся ветка
Форум: "Corba";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.01 c