Toon posts:

[C++] MapX probleem: visuele punten toevoegen op de map

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben een navigatiesysteem aan het maken, en gebruik daarvoor een ActiveX component van MapInfo: MapX. Ik gebruik Borland C++ Builder 5.0.12.34.
Ik zit met het volgende probleem:
Ik wil op een map (visuele) punten kunnen toevoegen door op een bapaalde plek op de map te klikken.
Hiervoor maak ik dus een nieuwe layer aan, om vervolgens hierop de punten toe te voegen met de miAddPointTool.
De code die ik gebruik wordt aangeroepen na het klikken op een button:
C++:
1
2
3
4
5
6
7
8
 
CMapXLayerPtr newLayerPtr;
newLayerPtr = Map1->Layers->CreateLayer(WideString("Temporary Layer"),TNoParam(), 1);
newLayerPtr->Editable = True;
Map1->Layers->InsertionLayer = newLayerPtr ;
Map1->Layers->set_InsertionLayer(newLayerPtr);
Edit3->Text = IntToStr(Map1->Layers->InsertionLayer);
Map1->CurrentTool = miAddPointTool;


Ik krijg als foutmelding:
The insertion layer is not set. The insertion layer must be set before te object creation tools can be used.

[ Voor 0% gewijzigd door Verwijderd op 04-09-2002 14:18 . Reden: regel code vergeten ]


  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Ik ken het hele component niet, en weet dus ook niet hoe de API ervan werkt... maareh...is dit:
C++:
1
2
Map1->Layers->InsertionLayer = newLayerPtr ;
Map1->Layers->set_InsertionLayer(newLayerPtr);
niet een beetje dubbelop?

Verwijderd

Topicstarter
gen idee, maar als je de foutmelding leest, begrijp je misschien waarom ik deze regel heb toegevoegd :)

Verwijderd

Topicstarter
De foutmelding wordt overigens gegenereerd op het moment dat de property CurrentTool op miAddPointTool wordt gezet.

  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Verwijderd schreef op 04 september 2002 @ 14:26:
gen idee, maar als je de foutmelding leest, begrijp je misschien waarom ik deze regel heb toegevoegd :)
Neuj, eigenlijk niet. Als je Map1->Layers->InsertionLayer niet mag aanspreken alsie niet geset is, zou ik set_insertionlayer daarvoor aanroepen, niet daarna...

  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Verwijderd schreef op 04 september 2002 @ 14:28:
De foutmelding wordt overigens gegenereerd op het moment dat de property CurrentTool op miAddPointTool wordt gezet.
Hmm... dan weet ik 't ook niet. Wat zegt de manual? Nergens voorbeeldcode?

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Waar komt miAddPointTool vandaan? Kan het zijn dat die niet goed geinitialiseerd is?

Never underestimate the power of


Verwijderd

Topicstarter
miAddPointTool is een constante, het object model diagram is het bekijken waard:
http://www.mapinfo.com/co...ry/mapx45_objectmodel.pdf

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
OK, even naar het diagram gekeken.
Onderstaande code zou niet moeten kunnen werken, want InsertionLayer is een Read-Only property.
code:
1
Map1->Layers->InsertionLayer = newLayerPtr;

En misschien ligt het aan mij maar de method set_InsertionLayer kan ik niet vinden in het diagram.

Never underestimate the power of


Verwijderd

Topicstarter
Je hebt gelijk, alleen ik heb dit voorbeeld van een nieuwgroep gehaald.
Ik heb nog een ander voorbeeld, welke een rode punt op de kaart zet. Alleen geeft hij bij dit voorbeeld ook een fout:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
   CMapXFeaturePtr feature = CMapXFeaturePtr();
   CMapXPointDisp point = CoPoint::Create();
   CMapXStyleDisp style = CoStyle::Create();

   point->AddRef();
   point->Set(-90, 45);

   style->AddRef();
   style->SymbolFontColor = miColorRed;

   feature = Map1->FeatureFactory->CreateSymbol((IDispatch*)point, (IDispatch*)style);
   Map1->Layers->Item(1)->AddFeature(feature);


de volgende foutmelding wordt gegeven:
'Item' is not a member of 'CMapXLayers'

Dit is vreemd, aangezien in het object model, deze wel degelijk staat gespecificeerd.

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Ik denk dat ik dat wel begrijp. Item is waarschijnlijk een array en arrays beginnen altijd bij nul. In dat geval krijg je het volgende:
code:
1
Map1->Layers->Item[0]->AddFeature(feature);

Never underestimate the power of

Pagina: 1