Solved

Error with ActiveX

Posted on 2008-10-07
10
497 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
  • 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
 
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
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

Here is a helpful source code for C++ Builder programmers that allows you to manage and manipulate HTML content from C++ code, while also handling HTML events like onclick, onmouseover, ... Some objects defined and used in this source include: …
How to install Selenium IDE and loops for quick automated testing. Get Selenium IDE from http://seleniumhq.org Go to that link and select download selenium in the right hand columnThat will then direct you to their download page.From that page s…
The viewer will learn how to use NetBeans IDE 8.0 for Windows to connect to a MySQL database. Open Services Panel: Create a new connection using New Connection Wizard: Create a test database called eetutorial: Create a new test tabel called ee…
The viewer will learn how to use and create new code templates in NetBeans IDE 8.0 for Windows.

896 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

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now