ВУЗ:
Составители:
26
_ApplicationDisp = dispinterface
['{00020970-0000-0000-C000-000000000046}']
...
property Documents: Documents readonly dispid 6;
property Windows: Windows readonly dispid 2;
property ActiveDocument: WordDocument readonly dispid 3;
property ActiveWindow: Window readonly dispid 4;
property Selection: Selection readonly dispid 5;
property Visible: WordBool dispid 23;
...
procedure Move(Left: Integer; Top: Integer); dispid 360;
procedure Resize(Width: Integer; Height: Integer);
dispid 361;
function CheckGrammar(const String_:WideString):WordBool;
dispid 323;
...
end;
Отметим , что данный интерфейс идентифицирован тем же самым гло-
бальным идентификатором (IID), что и _Application. Кроме того, многие его
свойства и методы – также дублируют соответствующие возможности «двой -
ника» _Application. Только в данном случае их описания вместо директив
safecall снабжены диспетчерскими идентификаторами (dispid), заимство-
ванными из библиотеки типов. Подобные двойники, описанные ключевым сло-
вом dispinterface, есть и у всех остальных дуальных интерфейсов :
_DocumentDisp, SelectionDisp и т.д . Именно они делают для клиента на
Object Pascal вызовы через IDispatch:Invoke прозрачными.
Используем рассмотренный прием для модификации нашего учебного
генератора отчетов. Вместо _Application задействуем его «двойника» :
var W:_ApplicationDisp;
При подключении к серверу требуются дополнительные операции приве-
дения к использованному типу интерфейса:
try // если Word запущен - подключиться к нему
W := GetActiveOleObject(
ClassIDToProgID(CLASS_WordApplication))
as _ApplicationDisp;
except // если нет - запустить
W:=CoWordApplication.Create as _ApplicationDisp;
end;
W.Visible := True;
Последняя строка иллюстрирует доступ к свойству объекта автоматиза-
ции через его диспинтерфейс.
26 _ApplicationDisp = dispinterface ['{00020970-0000-0000-C000-000000000046}'] ... property Documents: Documents readonly dispid 6; property Windows: Windows readonly dispid 2; property ActiveDocument: WordDocument readonly dispid 3; property ActiveWindow: Window readonly dispid 4; property Selection: Selection readonly dispid 5; property Visible: WordBool dispid 23; ... procedure Move(Left: Integer; Top: Integer); dispid 360; procedure Resize(Width: Integer; Height: Integer); dispid 361; function CheckGrammar(const String_:WideString):WordBool; dispid 323; ... end; Отметим, что данный интерфейс идентифицирован тем же самым гло- бальным идентификатором (IID), что и _Application . Кроме того, многие его свойства и методы – также дублируют соответствующие возможности «двой- ника» _Application . Только в данном случае их описания вместо директив safecall снабжены диспетчерскими идентификаторами (dispid ), заимство- ванными из библиотеки типов. Подобные двойники, описанные ключевым сло- вом dispinterface , есть и у всех остальных дуальных интерфейсов: _DocumentDisp , SelectionDisp и т.д. Именно они делают для клиента на Object Pascal вызовы через IDispatch:Invoke прозрачными. Используем рассмотренный прием для модификации нашего учебного генератора отчетов. Вместо _Application задействуем его «двойника»: var W:_ApplicationDisp; При подключении к серверу требуются дополнительные операции приве- дения к использованному типу интерфейса: try // если Word запущен - подключиться к нему W := GetActiveOleObject( ClassIDToProgID(CLASS_WordApplication)) as _ApplicationDisp; except // если нет - запустить W:=CoWordApplication.Create as _ApplicationDisp; end; W.Visible := True; Последняя строка иллюстрирует доступ к свойству объекта автоматиза- ции через его диспинтерфейс.
Страницы
- « первая
- ‹ предыдущая
- …
- 24
- 25
- 26
- 27
- 28
- …
- следующая ›
- последняя »