C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Не работает ActiveX, компонет MapX
Лена
Отправлено: 16.08.2006, 15:12


Мастер участка

Группа: Участник
Сообщений: 501



Есть компонент для картографии MapX. В примерах к нему есть код создающий специальный слой — карту, на которой можно затем рисовать. Код из стандартной справки на VB:

dim lyrInsertion as MapXlib.Layer
set lyrInsertion = Map1.Layers("USA")
lyrInsertion.Editable = True
Set Map1.Layers.InsertionLayer = lyrInsertion
После этого кода можно рисовать на слой — карте USA.

Пишу код на Builder:
CODE

CMapXLayer * SelectAreaLayer;
void __fastcall TForm1::FormShow(TObject *Sender)
{
SelectAreaLayer = Map1->Layers->get_Item(OleVariant(1));//в Builder по номеру, №1 это нужный мне слой — карта
SelectAreaLayer->Editable = true;
Map1->Layers->InsertionLayer = SelectAreaLayer;
}

однако это не работает: свойство InsertionLayer не устанавливается.

Пробовала так:

CODE

CMapXLayer * SelectAreaLayer;
void __fastcall TForm1::FormShow(TObject *Sender)
{
SelectAreaLayer = Map1->Layers->get_Item(OleVariant(1));
SelectAreaLayer->set_Editable(1);
Map1->Layers->set_InsertionLayer(SelectAreaLayer);
}


Тоже возвращает NULL.

Попытка обернуть в OLE:
CODE

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Variant vMap = Map1;
Variant SelectAreaLayer = vMap.OlePropertyGet("Layers").OlePropertyGet("Item",1);//эдесь ошика во время выполнения!
SelectAreaLayer.OlePropertySet("Editable",true);
vMap.OlePropertyGet("Layers").OlePropertySet("InsertionLayer",SelectAreaLayer);
vMap.OlePropertySet("CurrentTool",miAddRegionTool);
}

Вызывает на строке исключение (рис. в архиве)


Попытка получить доступ через IDispatch.Invoke (так правильно?):

CODE

CMapXLayer * SelectAreaLayer;
SelectAreaLayer = Map1->Layers->get_Item(OleVariant(1));
SelectAreaLayer->Editable = true;

CMapXLayersDisp ServerForLayer; //тип из TLB файла без буквы T на конце
ServerForLayer.BindDefault(); //тут ошибка, которая ниже
ServerForLayer.get_Item(OleVariant(1));
ServerForLayer.set_InsertionLayer(SelectAreaLayer);


Юнит компилируется, а при общей компиляции ошибка:
[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


User Attached Image Скачать файл
ex.zip


Gedeon
Отправлено: 16.08.2006, 15:59


Ветеран

Группа: Модератор
Сообщений: 1742



Лена, я вами горжусь smile.gif .
Лена
Отправлено: 16.08.2006, 16:10


Мастер участка

Группа: Участник
Сообщений: 501



QUOTE (Gedeon @ 16/08/2006, 15:59)
Лена, я вами горжусь smile.gif .

Если бы это работало, тогда можно было бы мной гордиться. biggrin.gif

Вернуться в Технологии COM/DCOM, ActiveX