Список форумов www.integro.ru www.integro.ru
ЦСИ ИНТЕГРО
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

QueryBySurfacePos в Delphi

 
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков
Предыдущая тема :: Следующая тема  
Автор Сообщение
Наталья Колонтай



Зарегистрирован: 01.11.2005
Сообщения: 22
Откуда: Москва

СообщениеДобавлено: Пн 19 Мар 2007 13:24    Заголовок сообщения: QueryBySurfacePos в Delphi Ответить с цитатой

Для выбора объектов использую примерно следующий код:
var MapObjectsQuery:IIngeoMapObjectsQuery;
aLayerIDs: string;
aSurface: IIngeoPaintSurface;
begin
aSurface:=FInGeoApp.MainWindow.MapWindow.Surface;
aLayerIDs:=RLPointLayerID;
MapObjectsQuery:=FInGeoApp.ActiveDb.MapObjects.QueryBySurfacePos(aLayerIDs,aSurface,X,Y);
При передаче ID одного слоя в переменной типа string все нормально срабатывает.
Как в Delphi передать функции QueryBySurfacePos одновременно целый список слоев?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
RuslanG



Зарегистрирован: 10.07.2005
Сообщения: 171
Откуда: ИНТЕГРО

СообщениеДобавлено: Пн 19 Мар 2007 15:06    Заголовок сообщения: Ответить с цитатой

aLayerIDs - список идентификаторов слоев, в которых следует производить поиск. Данный параметр может содержать строку или массив строк. Ниже приведен пример реализации:
Код:
function TMainForm.GetDevXY(aSurface: IIngeoPaintSurface): TPoint;
begin
   aSurface.PointWorldToDevice(-3549, -8927, Result.X, Result.Y);
end;
procedure TMainForm.TestButtonClick(Sender: TObject);
var
   aSurface: IIngeoPaintSurface;
   aMapObjects: IIngeoMapObjects;
   aLayersIDs: OleVariant;
   aMapObjectsQuery: IIngeoMapObjectsQuery;
   aDevXY: TPoint;
   aMapObject: IIngeoMapObject;
begin
   aSurface := FIngeo.MainWindow.MapWindow.Surface;
   aMapObjects := FIngeo.ActiveDb.MapObjects;
   aLayersIDs := VarArrayOf(['00010000042B', '006500001E92']);
   aDevXY := GetDevXY(aSurface);
   aMapObjectsQuery := aMapObjects.QueryBySurfacePos(aLayersIDs, aSurface, aDevXY.X, aDevXY.Y);
   while not aMapObjectsQuery.EOF do begin
      aMapObject := aMapObjects.GetObject(aMapObjectsQuery.ObjectID);
      // Ваши действия
      ShowMessage(aMapObject.ID);
      aMapObjectsQuery.MoveNext;
   end;
   aMapObjects.UpdateChanges;
end;

_________________
С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков Часовой пояс: GMT + 5
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять приложения в этом форуме
Вы можете скачивать файлы в этом форуме


© phpBB Group
Русская поддержка phpBB