Принцип инициализации интерфейсов

0 голосов
спросил 16 Июнь, 10 от dmitry12081973 (1,920 баллов) в категории Программные продукты Esri
Здравствуйте.
До сих пор не до конца могу понять, как инициализировать некоторые интерфейсы в Delphi.
Например, интерфейс IPointCollection. Обыскал по всем модулям esri*_TLB.pas созвучные Co.... классы для инициализации и ничего не нашёл.
По какому принципу вообще это делается?

7 Ответы

0 голосов
ответил 16 Июнь, 10 от TDenis (42,620 баллов)
IPointCollection позволяет рассматривать фигуру как набор точек. Поэтому сначала вы должны создать некоторую фигуру (например полигон или полилинию), после чего сможете привести её к этому интерфейсу.
0 голосов
ответил 16 Июнь, 10 от pooperec (10,820 баллов)
>По какому принципу вообще это делается?
Вариантов несколько - по схемам классов, по конструктору библиотек, и (я использую, мне так проще) по онлайн документации.

1. Вбиваете в гугл фразу "имя_интерфейса interface", к примеру IRasterGeometryProc3 Interface.
2. Переходите по первой ссылке (как правило, если он не в первой строке, то добавляете ключевое слово "inurl:edndoc", без кавычек) http://edndoc.esri.com/arcobjects/9.2/ComponentHelp/esriDataSourcesRaster/IRasterGeometryProc3.htm.
3. Страница состоит из основных частей, нас интересуют в основном: Members и CoClasses that implement IRasterGeometryProc3. Также часто-густо правильно читать ремарки, и прочяя.
4. В разделе Members - методы интерфейса. В разделе CoClasses классы через которые можно создавать и вызывать этот интерфейс. В случае с IRasterGeometryProc3 это Сокласс RasterGeometryProc.
5. *Если ленивый, или просветлённый* Пытаемся создать интерфейс через CoRasterGeometryProc.Create - успех! Но так бывает не всегда, тогда:
а) Запускаем утилиту ESRI Library Locator, вставляем туда имя сокласса (RasterGeometryProc), и нажимаем "Search", на выходе утилита пишет в какой библиотеке данный энумератор/интерфейс/диспинтерфейс/Сокласс обьявлен. (В нашем случае - esriDataSourcesRaster). Нажимаем "Copy".
б)На страничке переходим по ссылке RasterGeometryProc и внимательно смотрим в заголовок, там видим: "ArcObjects Library Reference (DataSourcesRaster)" что и есть название искомой библиотеки.

в) Можно просто устроить текстовый поиск по папке где лежат импортированые юниты - но это "не труъ".

...и потом внимательно смотрим на то место где у нас объявлены юниты. Находим (не находим - что иногда и есть причина) данный юнит, переходим на него и ищем строку с именем сокласса. Он в может называться RasterGeometryProc_, или _RasterGeometryProc, или RasterGeometryProc__.

Супермегасекрет, (который Вы бы знали изучив предварительно технологию СОМ) - один Сокласс может реализовывать несколько интерфейсов. И если перейти на страничку сокласса - то во вкладке interfaces, можно увидеть другие интерфейсы к которым можно привести данный класс.

Пример (и результаты выполнения вышеприведённых пунктов):
>Например, интерфейс IPointCollection
1,2 - Получаем ссылку http://edndoc.esri.com/arcobjects/9.1/componenthelp/esriGeometry/IPointCollection.htm
3 - СоКлассы которые его реализуют:...MultiPatch,Multipoint,Path,Polygon,Polyline...
То есть, методы этого интерфейса можно только через эти классы.
4 - Допустим нас устраивает Polygon. Пробуем:
pPoinCollection := CoPolygon.Create as IPointCollection; - Профит!
5 - Ах да, обьявлен он в esriGeometry_TLB.

Теперь созданный интерфейс можно использовать, например, так:
(IPointCollection as IArea).Centroid - получили центроид фигуры.


Пы.Сы.
Я хз как Вам понятнее сказать чтобы Вы сначала с основами разобрались...
0 голосов
ответил 17 Июнь, 10 от dmitry12081973 (1,920 баллов)
Денис и Ярослав, мне очень помогли Ваши советы! Благодарю!
0 голосов
ответил 01 Июль, 10 от AlexDark65 (220 баллов)
Просьба помочь..
К меня Delphi 7 и ArcGis 9.3.1 (edn)
по ссылке http://arcscripts.esri.com/details.asp?dbid=14204
сделал импорт типов , но пакет при компиляции - в ошибки
Подскажите что делать или дайте исправленные esri*_TLB.pas
0 голосов
ответил 01 Июль, 10 от pooperec (10,820 баллов)
> но пакет при компиляции - в ошибки
Это нормально.
>Подскажите что делать
Искать ошибки и исправлять. Обычно это:
1. Кривые названия методов (символ "_" в начале, где он не нужен).
2. Объявление несуществующих .юнитов (SysUtils_TLB вместо SysUtils).
Для 7 делфи к тому же ещё характерна:
3. Подмена структур (рекодрдов и перечисляемых типов) которые объявлены в библиотеке типов, своими "созвучными" типами.
4. Двойной импорт методов (Создание паразитных методов с именами GhostMethod1, GhostMethod2) и так далее...
0 голосов
ответил 02 Июль, 10 от AlexDark65 (220 баллов)
Спасибо, нашел лишнее и убрал. Но, раз уж помогаете , еще глюк:
бросил на форму LicenseControl1 , MapControl и LicenseControl1- постоянно жалуется что нет лицензии, хотя она есть(ArcGis Engine Developer Kit)
0 голосов
ответил 02 Июль, 10 от pooperec (10,820 баллов)
>Но, раз уж помогаете
О ужас, Админы!!! Влепите мне РО на полгода!
>постоянно жалуется что нет лицензии
Ну так это не спроста! Могу только догадываться что у Вас пропущённа лицензия designer которая зовётся.... А запуск
AuthorizationSummary подтвердит эту теорию...
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...