![]() |
|
|
![]()
|
|
| Лена |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
Есть компонент для картографии MapX. В примерах к нему есть код создающий специальный слой – карту, на которой можно затем рисовать. Код из стандартной справки на VB:
dim lyrInsertion as MapXlib.Layer set lyrInsertion = Map1.Layers("USA") lyrInsertion.Editable = True Set Map1.Layers.InsertionLayer = lyrInsertion После этого кода можно рисовать на слой – карте USA. Пишу код на Builder:
однако это не работает: свойство InsertionLayer не устанавливается. Пробовала так:
Тоже возвращает NULL. Попытка обернуть в OLE:
Вызывает на строке исключение (рис в архиве) Попытка получить доступ через IDispatch.Invoke (так правильно?):
Юнит компилируется, а при общей компиляции ошибка: [Linker Error] Unresolved external 'Mapxlib_tlb::CLSID_Layers' referenced from C:\DOCUMENTS AND SETTINGS\LENA\DESKTOP\AREA2\UMAP.OBJ Может кто подскажет как с этим бороться? Прилагаю файл TLB от MapX. Посмотрите, кто знает, это ошибка компонента в среде Builder или существует специфичный способ задания InsertionLayer в Builder? сайт компонента: http://extranet.mapinfo.com/products/Overv...uctcategoryid=1 Это сообщение отредактировал(а) Лена - 16.8.2006, 15:09 Присоединённый файл ( Кол-во скачиваний: 10 )
ex.zip 86,81 Kb |
||||||||
|
|||||||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
||||
|
||||
| kefir01 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: 1 Всего: 2 |
Думаю нужно просто Variant
Вот рабочий код
Это сообщение отредактировал(а) kefir01 - 25.6.2008, 16:17 |
|||
|
||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
При любом коде InsertionLayer не работает в Builder. Чтобы в этом убедиться можно после любого кода поробывать получить имя InsertionLayer слоя:
wchar_t * name = Map1->Layers->InsertionLayer->_Name; //всегда исключение |
|||
|
||||
| kefir01 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: 1 Всего: 2 |
И действительно, однако код что я привел создает слой и позволяет менять его свойства.
На самом деле у меня самого возникла проблема с созданием объектов на слое, но думаю проблема тут не в InsertionLayer... |
|||
|
||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
AnimationLayer тоже не желает работать в Builder :(
http://forum.sources.ru/index.php?showtopi...=animationlayer AnimationLayer и InsertionLayer не удалось победить в C++ Builder. Остальное вроде работает.
Что имеется в виду? P.S. Если возникнет задача установить MapX на С++ Builder 2007, то тут инструкция: http://qc.codegear.com/wc/qcmain.aspx?d=48143 |
|||
|
||||
| kefir01 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: 1 Всего: 2 |
Проблемы хотя бы с созданием точек
Пробую такой код:
Результат - EAccessViolation Это сообщение отредактировал(а) kefir01 - 3.7.2008, 14:47 |
|||
|
||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
А если так:
Это сообщение отредактировал(а) Лена - 3.7.2008, 16:48 |
|||
|
||||
| kefir01 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: 1 Всего: 2 |
Лена, огромное тебе спасибо!
Так как в примере не получилось (0 эффекта при нажатии), зато получилось вот так.
Это сообщение отредактировал(а) kefir01 - 3.7.2008, 21:40 |
|||
|
||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
Хорошо, что все получилось. С реально работающим кодом MapX в С++ Builder трудно разобраться. МapInfo официально не поддреживает MapX в C++ Builder, поэтому трудно найти нормальные примеры. Но, хорошо что китайцы такие умные программисты.
Некоторые фрагменты кода для MapX, в свое время нашла на китайских сайтах. У китайских товарищей совсем нет проблем с MapX в C++ Builder А вот о InsertionLayer и AnimationLayer инфо не нашла... Это сообщение отредактировал(а) Лена - 4.7.2008, 09:53 |
|||
|
||||
| kefir01 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: 1 Всего: 2 |
А можешь тогда еще подкинуть код на вставку слоев из файла? Буду очень признателен.
А про поддержку BCB я в курсе. Китайцы трудолюбивые програмисты. Я на 3 день парок на форумы полез, а они видать сидят пробуют все пока не найдут решение =) Этот код отказывается работать.
Это сообщение отредактировал(а) kefir01 - 4.7.2008, 11:20 |
|||
|
||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
Самое простое это создать в геосет менеджере геосет из нужных слоев и затем грузить его:
Map1->GeoSet = WideString("C:\\Program Files\\MAP\\имя_геосета.gst"); //Map1->Title->set_Visible(0); Если грузить отдельный слой, то примерно как-то так:
|
|||
|
||||
| kefir01 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: 1 Всего: 2 |
Ок. Буду пробовать.
|
|||
|
||||
| kefir01 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: 1 Всего: 2 |
Нет, этот код не работает. Пытаюсь найти решение. Судя по документации слои добавляются через создание LayerInfo типа miLayerInfoTypeTab. Однако загвоздка заключается в том, что:
И мой вариант:
По идее в точности повторяет пример из руководства, за исключением того что там создается объект MapXMobile.LayerInfo.5 а у меня MapX.LayerInfo.5 подозреваю что ошибка может быть в этом. |
||||
|
|||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
У меня этот код работает. В Table храняться пути к слоям, значаения min, max, ZoomLayer, Visible...
Это сообщение отредактировал(а) Лена - 8.7.2008, 09:11 |
|||
|
||||
| kefir01 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: 1 Всего: 2 |
А какая версия MapX у тебя?
Хм... Где-то я видать ступил.. Заработало все. Спасибо! Это сообщение отредактировал(а) kefir01 - 8.7.2008, 13:07 |
|||
|
||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
Какие возможности MapX тебе удалось реализовать кроме тех, что здесь описывались (создание точки, загрузка слоев). Если что-то удалось реализовать еще, то выложи, пожалуйста, код. Я собираю рабочий код для MapX. Как ты думаешь можно ли засунуть в ресурсы карту и грузить ее от туда? Это нужно чтобы пользователи не могли забрать себе карту. Можно ли грузить карту в MapX с серверного компьютера? Можно ли включить MapX в свой инсталятор? Имел ли ты дело с новой технологий MapInfo: MapXTreme 2008. Это набор для VS 2005. Это развитие MapX на новую ступень. Можно создовать локальные и серверные приложения. Будут новости, пиши. |
|||
|
||||
| kefir01 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: 1 Всего: 2 |
Напишу. Я сам только начал работать с MapX как до чего дойду - скажу. Мне предстоит разобраться с добавлением данных и т.п.
Насчет загрузки с сервера - может indy компоненты чем помочь смогут. |
|||
|
||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
||||
|
||||
| kefir01 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: 1 Всего: 2 |
Топорный вариант - скачивать с сервера использовать и уничтожать при закрытии... Хотя понимаю это далеко от того что ты имеешь в виду.
|
|||
|
||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
Попробую. А как ты думаешь насчет других вопросов: Можно ли засунуть в ресурсы программы карту и грузить ее от туда? Я когда-то пробовала. Давно это было но у меня что-то не получилось. Можно ли включить MapX в свой инсталятор? |
|||
|
||||
| kefir01 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: 1 Всего: 2 |
Ну теоретически в ресурсы добавить можно... Только придется добавлять в таком случае не только геосет но и все слои к нему - нужны ли такие жертвы - вот в чем вопрос. Я смысла не вижу - слишком много работы - все равно в один файл прогу не получится сделать.
Ну типа нет, хотя тебе ничего не мешает найти все библиотеки, которые ставит официальный инсталлятор и установить их. При желании можно даже файл лицензии "правильный" закинуть ;) Тут все зависит от навыков работы в InstallShield или аналогах. Ну или можно написать инсталлятор самой. Разницы нет на самом деле. Главное - зарегистрировать потом то что установишь. Можешь попробовать в regedit найти все ключи и попробовать их программно зарегистрировать. |
|||
|
||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
Ясно. Буду эксперементировать.
Очень важно чтобы пользователь не имел доступа к карте, ну и конечно MapX надо научиться инсталировать вместе с программой. |
|||
|
||||
| kefir01 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: 1 Всего: 2 |
||||
|
||||
| Лена |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 879 Регистрация: 16.8.2006 Репутация: 11 Всего: 11 |
Чтобы пользователь не смог взять и переписать себе например, на флешку карты и затем использовать их где-то... Например, карта которая используется в программе стоит 1000 долларов. Какая технология наиболее подходит для защиты карты? Хранить в ресурсах программы? Загрузка с сервера? Защищенный архив? |
|||
|
||||
| kefir01 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: 1 Всего: 2 |
А пользователь знает о цене карты ;)
А он ее покупает отдельно? Если нет - то какая разница - цена карты входит в затраты по созданию программы... Ну надежнее всего - в ресурсах. Это сообщение отредактировал(а) kefir01 - 14.7.2008, 12:12 |
|||
|
||||
| kefir01 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 22.6.2007 Репутация: 1 Всего: 2 |
У меня снова вопрос:
Имя не добавляется. Если пробоваить через p->Name = "Line"+ IntToStr(l), то вообще выдает ошибку [C++ Error] main.cpp(323): E2247 'CMapXFeature::Name' is not accessible Не сталкивалась с такой проблемой? |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |