Solved

Chart and Curve in VBA API

Posted on 2011-09-13
4
709 Views
Last Modified: 2012-06-21
Dear Expert,
I got one question on VBA,  I am learning how to plot curve in vba and
find some example  in goole seach and find following example and VBA code
But I am not familar with VBA userform1 usage , just want to know how to
let the form_paint() run to draw a curve. I try to run it in form_paint() but
it report "Me" word  is not using correctly.

So the question is
What is "Me" means in the code, how to use it ?
Where the curve should be displayed, is it on userform window or Excel window ? how to make
it happen,  Any good example for beginner ? Do I need to create userform1 first so then
call form_point() function, but how ? any simple code me to start ?

Pleae advise

Duncan
Private Type POINTAPI
        x As Long
        y As Long
End Type
Private Declare Function PolyBezier Lib "gdi32.dll" (ByVal hdc As Long, lppt As POINTAPI, ByVal cPoints As Long) As Long
Private Declare Function PolyBezierTo Lib "gdi32.dll" (ByVal hdc As Long, lppt As POINTAPI, ByVal cCount As Long) As Long
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As Any) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function PolyPolygon Lib "gdi32.dll" (ByVal hdc As Long, lpPoint As POINTAPI, lpPolyCounts As Long, ByVal nCount As Long) As Long

Private Sub Form_Paint()
    'KPD-Team 2000
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Dim pts(0 To 6) As POINTAPI
    Dim numpoints(0 To 1) As Long
    'set the co¿¿dinates
    pts(0).x = 0: pts(0).y = 100
    pts(1).x = 125: pts(1).y = 75
    pts(2).x = 255: pts(2).y = 148
    pts(3).x = 219: pts(3).y = 199
    pts(4).x = 315: pts(4).y = 203
    pts(5).x = 236: pts(5).y = 16
    pts(6).x = 122: pts(6).y = 123
    'set the forecolor to green
    Me.ForeColor = vbGreen
    'draw the b¿¿ier
    PolyBezier Me.hdc, pts(0), 7
    'set the forecolor to red
    Me.ForeColor = vbRed
    'move the 'active' point
    MoveToEx Me.hdc, 200, 25, ByVal 0&
    'set the co¿¿dinates
    pts(0).x = 125: pts(0).y = 50
    pts(1).x = 123: pts(1).y = 200
    pts(2).x = 102: pts(2).y = 100
    pts(3).x = 102: pts(3).y = 100
    pts(4).x = 312: pts(4).y = 75
    pts(5).x = 289: pts(5).y = 125
    'draw the b¿¿ier
    PolyBezierTo Me.hdc, pts(0), 6
    'set the forecolor to blue
    Me.ForeColor = vbBlue
    'set the points belonging to the rectangle
    pts(0).x = 20: pts(0).y = 10
    pts(1).x = 200: pts(1).y = 10
    pts(2).x = 200: pts(2).y = 190
    pts(3).x = 20: pts(3).y = 190
    numpoints(0) = 4
    'set the points belonging to the triangle
    pts(4).x = 100: pts(4).y = 0
    pts(5).x = 50: pts(5).y = 100
    pts(6).x = 150: pts(6).y = 100
    numpoints(1) = 3
    'draw the polygons
    PolyPolygon Me.hdc, pts(0), numpoints(0), 2
End Sub

Open in new window

0
Comment
Question by:duncanb7
[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
  • 2
  • 2
4 Comments
 
LVL 17

Expert Comment

by:andrewssd3
ID: 36528154
I think the code you have downloaded was probably created for VB6, and you'll find it difficult to get it working in Excel VBA.  This code is intended to draw the shapes on a userform, which is not easy in VBA. Are you trying to draw shapes onto an Excel worksheet?  If so there are various methods of the Shapes collection that you can look up online, for example AddPolyLine, AddCurve which allow you to do this without using Windows apis.
0
 
LVL 13

Author Comment

by:duncanb7
ID: 36528172
ANd now I create an userform1 and add one command button to call Form_Paint() and
I replace the name of Form_paint() by Commandbutton1_Click(), now it won't report "Me"
error, porbably, ME is refer to userform1. But now report error on Me.hdc  in which hdc is
not member. What is hdc, How can I find correct Me.hdc ?

Thanks

Duncan
0
 
LVL 17

Accepted Solution

by:
andrewssd3 earned 500 total points
ID: 36528217
That's why I suggested you do it another way.  It's complicated and not easy to maintain and won't be guaranteed to work in future Office versions.  But if you want to go down that route, take a look at this:  http://www.cpearson.com/excel/formcontrol.aspx
0
 
LVL 13

Author Closing Comment

by:duncanb7
ID: 36528412
If I set hdc instead me.hdc and put
hdc=Getforegroundwindow(), and it works better

Thanks for your reply

Duncan
0

Featured Post

Instantly Create Instructional Tutorials

Contextual Guidance at the moment of need helps your employees adopt to new software or processes instantly. Boost knowledge retention and employee engagement step-by-step with one easy solution.

Question has a verified solution.

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

This article describes some techniques which will make your VBA or Visual Basic Classic code easier to understand and maintain, whether by you, your replacement, or another Experts-Exchange expert.
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
This Micro Tutorial will demonstrate the scrolling table in Microsoft Excel using the INDEX function.
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

689 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