View Single Post
  #4   Report Post  
Posted to microsoft.public.excel.programming
Peter T Peter T is offline
external usenet poster
 
Posts: 5,600
Default Left of an object on a chart sheet

The chart area on a chart sheet is sized to the inside margins of the
sheet's page set-up. It's probably possible to calaculate your shape's
screen coordinates but quite a lot of work. Another way is to add and size
a chartobject over the shape. This has a 'window' so pretty straightforward
to get its window coordinates which should be within a pixel or two of the
shape (assuming it doesn't have a thick border). Something like this -

Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hwnd1 As Long, ByVal hwnd2 As Long, _
ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Private Declare Function GetWindowRect Lib "user32" _
(ByVal HWND As Long, lpRect As RECT) As Long

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Sub GetShapeScreenCoords()
Dim shp As Shape, chtObj As ChartObject
Dim hwnd1&, hwnd2&, hwnd3&
Dim shpRect As RECT

On Error Resume Next
Set shp = ActiveSheet.Shapes(1)
On Error GoTo 0

If shp Is Nothing Then
MsgBox "no shape on sheet"
Exit Sub
End If

hwnd1 = FindWindow("XLMAIN", Application.Caption)
hwnd2 = FindWindowEx(hwnd1, 0&, "XLDESK", vbNullString)

With shp
Set chtObj = ActiveSheet.ChartObjects.Add( _
.Left, .Top, .Width, .Height)
End With

chtObj.Activate

hwnd3 = FindWindowEx(hwnd2, 0&, "EXCELE", vbNullString)
Call GetWindowRect(hwnd3, shpRect)

chtObj.Delete

With shpRect
' the shape's pixel coordinates
Debug.Print "x1 " & .Left, "y1 " & .Top
Debug.Print "x2 " & .Right, "y2 " & .Bottom
End With

End Sub

Of course I'm assuming it's some shape's coordinates you're after as you
asked in your OP.

Regards,
Peter T


"MrT" wrote in message
...
What, exactly, is it that you are trying to do? Why do you need the

screencoordinates?

I know the mouse coordinates which are based on the screen, and want to

draw
a shaphe under the mouse cursor, not the chart position/coordinates. So I
need to know either the mouse position relative to the chartarea or to

know
the screen coordinates of the chartarea (or of anything on the chart).

Regards,

MrT