Solved

Error with ActiveX

Posted on 2008-10-07
10
505 Views
Last Modified: 2013-11-23
Hi

I'm using the MapWinGis ActiveX without problem behalve for the fonction DrawPolygon(xPoints, yPoints, numPoints, Color, fill).

All the examples given on http://www.mapwindow.org/  are in Visual Basic.

Dim myArrayX, myArrayY as Double
 
myArrayX(0) = 10
myArrayX(1) = 20
myArrayX(2) = 30
myArrayY(0) = 40
myArrayY(1) = 50
myArrayY(2) = 60
 
Dim conArrayX, conarrayY as Object
 
conArrayX = CObj(myArrayX)
conArrayY = CObj(myArrayY)
 
DrawPolygon(conArrayX, conArrayY, 3, myColor, True)
 
Translated in Delphi, then compilation is completed without error but execution fails at the delivery of the points parameters that must be «Arrays of double» for x and y.
Those parameters must be declared as  TOleVariant in the calling procedure.

My Code:
procedure TGisForm.Button5Click(Sender: TObject);
Var
 x, y : OleVariant;
 xCenter, yCenter : Double;
 TmpDraw, i : Integer;
begin
  x := VarArrayCreate([0,36], varDouble);
  y := VarArrayCreate([0,36], varDouble);
  xCenter := StrToFloat(LabelX1.Caption);
  yCenter := StrToFloat(LabelY1.Caption);
 
  For i := 0 To 36 do
  begin
    x[i] := xCenter + 100 * Sin(pi/180*i * 10);
    y[i] := yCenter + 100 * Cos(pi/180*i * 10);
  end;
 
  TmpDraw := Map1.NewDrawing(dlSpatiallyReferencedList);
  Map1.DrawPolygon(x,y,37,clGreen,False);
end;

genarates "An acces violation error at adress 1002C860 in the module MapWin~1.OCX".

if I remove the statements "VarArrayCreate", the error becomes "The variant is not an array".

Any idea ?


0
Comment
Question by:defluc
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 4
10 Comments
 
LVL 15

Expert Comment

by:mikelittlewood
ID: 22657993
Do the arrays you are passing in have the correct number of elements or is it unlimited?
The VB example above only showed 3 elements for each array where as you are using 37.
0
 
LVL 15

Expert Comment

by:mikelittlewood
ID: 22658020
Also it might be better to pass everything through as a variant rather than a double, VB may prefer this.

VarArrayCreate([0,36], varVariant)
0
 

Author Comment

by:defluc
ID: 22658422
It's not a question of limit.

The problem appears also with 4 points as you can see here http://www.mapwindow.org/phorum/read.php?3,1133,4880#msg-4880
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 15

Expert Comment

by:mikelittlewood
ID: 22658531
Could you do what they did and convert the array to a TObject? Not sure why this would work but from that link that seems to be what they did

var
  conArrayX, conArrayY: TObject;

  conArrayX := TObject( x);
  conArrayY := TObject( y);

  Map1.DrawPolygon( conArrayX, conArrayY, 37, clGreen, False);
0
 
LVL 15

Expert Comment

by:mikelittlewood
ID: 22658544
I just noticed you also declared your arrays x and y as OLEVariant
Does it make any difference if you declared them as an array to start with and set their size instead of doing a create?

X, Y: array of double;
0
 

Author Comment

by:defluc
ID: 22659580
If I don't declare X and Y as OleVariant the compilation fails withe the message of non identical parameters Var original and formal.

DrawPolygon function requires OleVariant absolutely.
0
 
LVL 27

Accepted Solution

by:
BigRat earned 500 total points
ID: 22668105
A variant array is not an Automation type, only safearrays may be used.
0
 

Author Comment

by:defluc
ID: 22670407
Have you an example ?
0
 

Author Comment

by:defluc
ID: 23243738
BigRat says «only safearrays may be used. » but don't answers to my demand to provide an example.

The subject stays then unresolved.
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
The viewer will learn how to use and create new code templates in NetBeans IDE 8.0 for Windows.

726 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question