Лена |
Отправлено: 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
|
|
Gedeon |
Отправлено: 16.08.2006, 15:59 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Лена, я вами горжусь .
|
|
Лена |
Отправлено: 16.08.2006, 16:10 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
QUOTE (Gedeon @ 16/08/2006, 15:59) | Лена, я вами горжусь . |
Если бы это работало, тогда можно было бы мной гордиться. |
|
|