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

Вниз

Про серверы автоматизации   Найти похожие ветки 

 
Antonyo ©   (2004-01-21 20:03) [0]

ЯВЛЯЕТСЯ ЛИ СРЕДА DELPHI СЕРВЕРОМ АВТОМАТИЗАЦИИ, НУ СКАЖЕМ КАК ВСЕМ ИЗВЕСТНЫЙ MS WORD, А ЕСЛИ ЯВЛЯЕТСЯ, ТО КАК ОБРАТИТЬСЯ К РЕСУРСАМ DELPHI, ТАКИМ КАК OBJECT INSPECTOR И Т.Д?
МОЖНО ЛИ НАПИСАТЬ ПРОГРАММУ КОТОРАЯ МОГЛА БЫ ПЛАНИРОВАТЬ ПО ЗАДАННОМУ АЛГОРИТМУ РАЗРАБОТКУ В DELPHI ПРОГРАММ НАЧИНАЮЩИМИ ПРОГРАММИСТАМИ-СТУДЕНТАМИ, ДАБЫ КООРЕКТИРОВАТЬ ИХ ДЕЙСТВИЯ?


 
Тимохов ©   (2004-01-21 20:04) [1]

Caps Lock запал?


 
Юрий Зотов ©   (2004-01-21 20:20) [2]

Насколько мне известно, не является и, значит, такую ВНЕШНЮЮ программу написать нельзя.

Но вот ВНУТРИ себя Delphi предоставляет интерфейсы доступа к своим объектам и дает ссылку на реализующий их класс. Это - механизм Open Tools API (OTAPI). Ссылка эта носит вполне логичное имя BorlandIdeServices и доступна коду, работающему внутри самой IDE (то есть, компонентам и экспертам). А описание интерфейсов (правда, довольно скудное) есть в исходниках.

Значит, Вашу задачу можно реализовать с помощью эксперта IDE. Вот ОН уже вполне может быть выполнен в виде сервера автоматизации и, таким образом, как бы превратить в сервер автоматизации саму Delphi.


 
Digitman ©   (2004-01-22 08:24) [3]

является .. по кр.мере Д5
привожу лишь маленький фрагмент реестра, подтверждающий это :

HKEY_CLASSES_ROOT\BorlandIDE.Application
HKEY_CLASSES_ROOT\CLSID\{DFCF3100-89A3-11CE-A2A6-0020AF05ED04}\LocalServer32 = BCW.EXE /automation

убедиться в этом несложно и самому
достаточно лишь просканировать корень реестра HKCR на предмет нахождения ключей/значений, в которых фигурирует "Borland\Delphi"


 
pasha_golub ©   (2004-01-22 10:01) [4]

2Digitman © (22.01.04 08:24) [3]
По этому вопросу хочу спросить. У меня в реестре тоже нашлось около 10 такого рода сылок на классы CorelDraw, но работают из них только два (CorelDraw.Application.11 & CorelDraw.Automation.11). А остальные при попытке подключения CreateOLEObject выдают ошибку "Интерфейс не поддерживается".

То есть не поддерживается интерфейс IDispatch? А какой поддерживается? И как с этим можно связаться?


 
Digitman ©   (2004-01-22 10:13) [5]


> pasha_golub


возьми утилиту OLEView из состава MS VisStudio, открой нужную библ-ку типов Корела и посмотри сам, какие интерфейсы поддерживает тот или иной объект ... я просто не в курсе... но в общем случае начинать следует именно с такого исследования, в 1-ю очередь - при возникновении недоразумений


 
pasha_golub ©   (2004-01-22 10:25) [6]

2Digitman © (22.01.04 10:13) [5]
Спасибки, но вот проблемка. Где взять эту самую утилитку? Или быть может есть аналоги? Вообщем, я просто не в курсе. И еще, а как должен выглядеть файл библиотеки типов? Спасибо.


 
Digitman ©   (2004-01-22 10:35) [7]


> Где взять эту самую утилитку?


если не хочешь устанавливать ради этого VisStudio, попроси ее у кого-нить, кто установил у себя на машине эту среду ... всего-то 150 кб она ...я посмотрел - вроде бы никаких очевидных зависимостей от прочих библ-к из состава MSVS эта утилитка не показывает. т.е. должна вродебы работать автономно


> как должен выглядеть файл библиотеки типов?


если интересующая библ-ка типов зарегистрирована как положено в реестре, ты увидишь ее по названию в дереве объектов, выводимом утилитой... а вообще библ-ки типов могут поставляться разработчиком автономно (в виде tlb-файлов), так и быть в составе самого сервера автоматизации (exe, dll, ocx, olb и т.д. и т.п.)


 
pasha_golub ©   (2004-01-22 10:45) [8]

Digitman © (22.01.04 10:35) [7]
Сергей, есть подозрение, что у тебя она есть. Если это не будет очень сложно, вышли мне ее, пожалуйста.

Оказывается про библиотеку типов я знал, просто чего-то протормозил. Все равно, спасибо.

И вот еще вопрос. Допустим, объект возвращает интерфейс и я вызываю его метод. Пользуюсь я справкой по VBA for Applications (поставляется вместе с продуктом, в данном случае CorelDraw 11) и вижу, что этот метод возвращает указатель на какой-то класс, который в реестре описан, но при соединении с которым я получаю ошибку. Ну, а насколько я знаю COM-технологии не должны зависеть от языка. То есть, что получается, из VBA я могу его использовать, а из Делфи нет? Или просто VBA в данном случае является встроенной? Вообщем, для меня данный аспект как в тумане. Спасибо.


 
Digitman ©   (2004-01-22 11:10) [9]

отправил тебе OLEView, лови


> возвращает указатель на какой-то класс, который в реестре
> описан, но при соединении с которым я получаю ошибку


какую ?

давай в конкретностях - пример кода вызова, результат и т.д. и т.п. ...


 
pasha_golub ©   (2004-01-22 11:23) [10]

За утилитку спасибо.

OK

var
CorelDraw, CorelShape:variant;

procedure TForm1.Button1Click(Sender: TObject);
var
I : variant;
begin
CorelDraw := CreateOleObject("CorelDraw.Application.11");
try
CorelDraw.FileNew;
CorelDraw.SetDocVisible(True);
{ вот тут Так вот Selection (из описагия VBA) возвращает класс Shape, который прописан в реестре как положено. А работать с этим объектом я не могу. Пробовал по разному}
{Пробовал создавать, получаю ошибку}
CorelShape := CreateOLEOBject("CorelDraw.Shape.11");
{Пробовал в наглую присвоить, аналогично. Вернее присванивание проходит, но вот вызвать методы это объекта я не могу. И на объект ли вообще указывает CorelShape в этом случае?}
CorelShape := CorelDraw.Selection;
CorelShape.Clear;
finally
CorelDraw := Unassigned;
end;
end;


А вот пример кода VBA из хелпа самого Корела

sub Example
Dim MyShape As Shape
Set MyShape = Application.Document.ActiveSelection
MyShape.Stretch 0.118892
...
End Sub


 
pasha_golub ©   (2004-01-22 11:24) [11]

Вернее код не из хелпа, а собственноручно писаный. Работает.


 
pasha_golub ©   (2004-01-22 11:29) [12]

Утилитку получил, спасибо, требует файл iviewers.dll


 
Polevi ©   (2004-01-22 11:44) [13]

var
CorelShape:OleVariant;
begin
..
..
CorelShape := CorelDraw.Selection;
CorelShape.Clear;


 
Digitman ©   (2004-01-22 12:13) [14]


> pasha_golub © (22.01.04 11:29) [12]


пардон, проглядел

сейчас отправлю

эта библ-ка - внутр.сервер автоматизации. не забудь зарегистрировать его с пом. regsvr32 перед первым использованием утилитой OLEView


 
pasha_golub ©   (2004-01-22 12:14) [15]

Digitman © (22.01.04 12:13) [14]
Она его сама регистрирует.


 
Digitman ©   (2004-01-22 12:18) [16]


> pasha_golub


кто "она" ? утилита ? ну может быть, я не в курсе ... но если "сама", то тогда библ-ка должна лежать в том же каталоге, где и утилита


 
pasha_golub ©   (2004-01-22 12:18) [17]

Polevi © (22.01.04 11:44) [13]
Работает. Это я где-то наверное прошлепал. Ну хорошо. А почему, я не могу создать свзяаться напрямую с этим объектом?


 
pasha_golub ©   (2004-01-22 12:20) [18]

Digitman © (22.01.04 12:18) [16]
Да утилитка, она при старте говорит, что мол этой штуки нету. Я ее потом зарегистрирую и т.д.


 
pasha_golub ©   (2004-01-22 12:34) [19]

И почему одни объекты предоставляют IDispatch, а другие IUnknown?

Вообщем, тоже не до конца понимаю.


 
Digitman ©   (2004-01-22 12:47) [20]


> И почему одни объекты предоставляют IDispatch, а другие
> IUnknown?


абсолютно все подобного рода объекты предоставляют IUnknown
IDispatch же предоставляют только те объекты, которые позволяют организовать механизм позднего связывания между контроллером и сервером автоматизации ... это т.н. "диспинтерфейсы" ... подробней можешь почитать в замечательной книге Эрика Хармона "Программирование COM-приложений в среде Делфи"


 
pasha_golub ©   (2004-01-22 13:05) [21]

Digitman © (22.01.04 12:47) [20]
Спасибо, большое. А книжки в электроном виде случайно нету? :-)


 
Юрий Зотов ©   (2004-01-22 13:45) [22]

> Digitman © (22.01.04 08:24) [3]

Что-то непонятное. У меня установлена D7. Ищу в реестре (начиная с "My Computer", по всем ключам, именам и значениям параметров, опция "whole word only" отключена) - и получаю следующее.

Строка BorlandIDE.Application - не найдена.
Строка DFCF3100-89A3-11CE-A2A6-0020AF05ED04 - не найдена.
Строка BCW.EXE - не найдена.
Строка Borland\Delphi - присутствует в больщом количестве, но никаких намеков на то, что IDE является сервером автоматизации обнаружить не удалось.

Утилита OleView (из MS Platform SDK) тоже ничего подобного не показывает. Может быть, это зависит от каких-то опций установки?


 
pasha_golub ©   (2004-01-22 13:59) [23]

Юрий Зотов © (22.01.04 13:45) [22]
А что должно быть? Вы ж сами сказали, что не является. Или я чего-то не понял.


 
Vuk ©   (2004-01-22 13:59) [24]

to Юрий Зотов:
Подтверждаю, нет такого. И в D5 нет. А BCW, если не ошибаюсь, это вообще C++ Builder.


 
Dok_3D ©   (2004-01-22 14:06) [25]

возьми утилиту OLEView из состава MS VisStudio, открой нужную библ-ку типов Корела и посмотри сам, какие интерфейсы поддерживает тот или иной объект
Где взять эту самую утилитку?


Господа Дельферы, осмелюсь заметить, что это же самое можно увидеть, если в среде Delphi выполнить File\Open. Выбрать тип файлов: "Type Library (*.tlb;*.dll;*.ocx;*.exe;*.olb)". Затем открыть нужный файл.
И будет вам счастье :)


 
pasha_golub ©   (2004-01-22 14:23) [26]

Dok_3D © (22.01.04 14:06) [25]
Угу, есть такое. :-)


 
Ломброзо ©   (2004-01-22 14:41) [27]

И даже, осмелюсь заметить, в любом приложении MS Office (Tools->Macros->Visual Basic Editor, Tools->References, выбрать нужную библиотеку, нажать F2, изучать)


 
Digitman ©   (2004-01-22 15:51) [28]


> Юрий Зотов © (22.01.04 13:45) [22]


Юрий, я не думаю, что у тебя есть подозрения на счет моей выдумки на эту тему

В дан.случае я работаю чукчей - "что вижу, то пою"

сам я не обращался к элементам IDE как к серверам автоматизации, но, пошарив в реестре, обнаружил эти записи (надеюсь, нет сомнений, что я сам их сотворил ?)


 
pasha_golub ©   (2004-01-22 16:33) [29]

Digitman © (22.01.04 15:51) [28]
Может это IDE С Билдера?


 
Digitman ©   (2004-01-22 16:49) [30]


> pasha_golub © (22.01.04 16:33) [29]
> Digitman © (22.01.04 15:51) [28]


Билдер у меня не инсталлировался никогда на этой машине, это исключено


 
Юрий Зотов ©   (2004-01-22 17:28) [31]

> Digitman © (22.01.04 15:51) [28]

Естественно, даже и в мыслях не было. Поэтому и предположил, что это может быть как-то связано с опциями установки (например, с установкой Remote Debugger).



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

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

Наверх




Память: 0.55 MB
Время: 0.02 c
1-16485
Sash1
2004-01-27 10:52
2004.02.06
Проблема с record в property


1-16492
Islander
2004-01-27 22:17
2004.02.06
Где хранить настройки в 200x/XP?


3-16171
Anton.
2004-01-14 11:35
2004.02.06
DBGrid


3-16052
kvit
2004-01-12 16:04
2004.02.06
проблеммы с trigger ом


7-16752
div_123
2003-11-06 19:26
2004.02.06
поиск USB