ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Converting MouseDown Coordinates to Chart Point Coordinates (https://www.excelbanter.com/excel-programming/283989-converting-mousedown-coordinates-chart-point-coordinates.html)

Steve[_50_]

Converting MouseDown Coordinates to Chart Point Coordinates
 
Hi,

I want to respond to a user drawn box on an Excel chart. I can get
the X & Y coordinates of the box using the MouseDown or MouseMove
event, but they are in something called ClientCoordinates. I can
develop a formula to convert from ClientCoordinates to those required
to add a Shape to the Chart, but if the zoom is changed this formula
does not hold. Does anyone know how to convert from ClientCoordinates
to points on a chart so that a shape can be drawn by mousing over the
chart, regardless of zoom?

Steve

Jon Peltier[_4_]

Converting MouseDown Coordinates to Chart Point Coordinates
 
Steve -

This Mouse_Move event gets client X,Y coordinates, finds what's under
that point, and if it's a shape, it puts the Left, Top, Width, and
Height in points into the worksheet.

Private Sub EmbChart_MouseMove _
(ByVal Button As Long, ByVal Shift As Long, _
ByVal X As Long, ByVal Y As Long)

Dim ElementID As Long, Arg1 As Long, Arg2 As Long
Dim myX As Double, myY As Double
Dim myName As String

With EmbChart
.GetChartElement X, Y, ElementID, Arg1, Arg2

If ElementID = xlShape Then
myName = ActiveChart.Shapes(Arg1).Name
ActiveSheet.Range("L2:L5") = WorksheetFunction.Transpose _
(Array(ElementID, Arg1, Arg2, myName))
ActiveSheet.Range("M2:M5") = WorksheetFunction.Transpose _
(Array( _
ActiveChart.Shapes(Arg1).Left, _
ActiveChart.Shapes(Arg1).Top, _
ActiveChart.Shapes(Arg1).Width, _
ActiveChart.Shapes(Arg1).Height))
End If
End With
End Sub

- Jon
-------
Jon Peltier, Microsoft Excel MVP
http://www.geocities.com/jonpeltier/Excel/index.html
_______


Steve wrote:

Hi,

I want to respond to a user drawn box on an Excel chart. I can get
the X & Y coordinates of the box using the MouseDown or MouseMove
event, but they are in something called ClientCoordinates. I can
develop a formula to convert from ClientCoordinates to those required
to add a Shape to the Chart, but if the zoom is changed this formula
does not hold. Does anyone know how to convert from ClientCoordinates
to points on a chart so that a shape can be drawn by mousing over the
chart, regardless of zoom?

Steve



steven ritter

Converting MouseDown Coordinates to Chart Point Coordinates
 

Thanks for the help. I can make use of that, but it's not quite what I
want to do -- I don't think I was real clear in my initial problem
statement. I want to respond to the user mouse clicks to automatically
build the shape, so that the x,y coordinates of the MouseDown Event set
the anchor for the shape, and the x,y coordinates passed back by the
MouseMove Event resize the shape. I've got it working except if the
Excel zoom factor changes. Then my transformation from mouse x,y to
shape X,Y seems to change in some unpredictable manner. I may be
hallucinating, but the behavior also seems different if not all of the
chart is visible in the window.

*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!

Jon Peltier[_4_]

Converting MouseDown Coordinates to Chart Point Coordinates
 
Steven -

Zoomfactor can mess up your best algorithms. Copy a chart on a 100%
zoomed page, change the zoom to 75%, and paste the chart: it's 75% as
large as the original!

In Excel 97, you get goofy results formatting the plot area size if the
entire chart isn't completely visible in the window. And this means it
can't butt against the top of row 1 or the left of column A. I used to
work around that by scrolling the sheet, nudging the chart slightly,
then unnudging the chart and scrolling back. With screenupdating =
false to reduce nausea.

I was doing a little thing using mouse events to draw a shape on a
chart, and I've crashed Excel twice. So I've got nothing intelligent to
add at this time.

- Jon
-------
Jon Peltier, Microsoft Excel MVP
http://www.geocities.com/jonpeltier/Excel/index.html
_______

steven ritter wrote:

Thanks for the help. I can make use of that, but it's not quite what I
want to do -- I don't think I was real clear in my initial problem
statement. I want to respond to the user mouse clicks to automatically
build the shape, so that the x,y coordinates of the MouseDown Event set
the anchor for the shape, and the x,y coordinates passed back by the
MouseMove Event resize the shape. I've got it working except if the
Excel zoom factor changes. Then my transformation from mouse x,y to
shape X,Y seems to change in some unpredictable manner. I may be
hallucinating, but the behavior also seems different if not all of the
chart is visible in the window.

*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!




All times are GMT +1. The time now is 04:46 AM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
ExcelBanter.com