Отображение координат диаграммы в пользовательской форме с помощью мыши
Я пытаюсь сделать пользовательскую форму, которая может показывать координаты диаграммы, когда я наводю курсор мыши на диаграмму
Вот несколько объяснений:
-У меня есть пользовательская форма с именем "userform1", которая имеет изображение с именем "image1"
-EDIT: та же пользовательская форма имеет высоту (467,25), слева (0), сверху (0), ширине (876), startupposition = 1-CenterOwner
- то же изображение имеет высоту (426), слева (6), сверху (6), ширину (702)
- та же пользовательская форма имеет 2 метки с именами "label_x" и "label_y"
- изображение будет импортировать диаграмму со значением х (от 0 до 100) и значением у (от 100 до 200)
-приведенный ниже код показывает координаты изображения1, когда я наводю указатель мыши на
Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim coor As POINTAPI
GetCursorPos coor
UserForm1.Label_x.caption = " X : " & coor.X
UserForm1.Label_y.caption = " Y : " & coor.Y
End Sub
-для демонстрации текущего кода значения x и y, показанные неверно
я попытался выполнить ручную калибровку, попросив пользователя щелкнуть верхний правый и нижний левый угол диаграммы, чтобы правильно откалибровать координаты
Но я не думаю, что пользователю будет удобно делать это
Есть ли способ автоматической калибровки координат карты? Я думаю, что это связано с положением пользовательской формы, положением изображения и разрешением экрана, но я не знаю, как
Спасибо
1 ответ
Я думаю, что я должен понять, как это сделать, это все еще полуавтоматический метод, я надеюсь, что это может быть будущей ссылкой для других
Я все еще надеюсь на другой метод
вот как это делается
Во-первых, нам нужно получить разрешение экрана пользователя.
Declare PtrSafe Function GetSystemMetrics& Lib "User32" (ByVal nIndex&)
Sub ScreenResSize()
Dim res_x As Long, res_y As Long
res_x = GetSystemMetrics(0) ' width
res_y = GetSystemMetrics(1) ' height
End Sub
-в-вторых, нам нужно вручную получить 2 точки графика, я беру нижний левый и верхний правый график, затем использую этот расчет и приведенный ниже
Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'Semi automatic to show chart coordinate by : Efsion Andre
Dim coor As POINTAPI,xp1 As Double, xp2 As Double, yp1 As Double, yp2 As Double, xd1 As Double, xd2 As Double, yd1 As Double, yd2 As Double, xd As Double, yd As Double
GetCursorPos coor
xp1 = 280 'NEED MANUAL CALIBRATE BY PROGAMMER - BOTTOM LEFT OF CHART
xp2 = 1054 'NEED MANUAL CALIBRATE BY PROGAMMER - TOP RIGHT OF CHART
yp1 = 682 'NEED MANUAL CALIBRATE BY PROGAMMER - BOTTOM LEFT OF CHART
yp2 = 184 'NEED MANUAL CALIBRATE BY PROGAMMER - TOP RIGHT OF CHART
xp1 = (res_x - 1600) / 2 + xp1 'RECALCULATE BASED ON SCREEN RESOLUTION, MY SCREEN RESOLUTION IS 1600 X 900
xp2 = (res_x - 1600) / 2 + xp2 'RECALCULATE BASED ON SCREEN RESOLUTION, MY SCREEN RESOLUTION IS 1600 X 900
yp1 = (res_y - 900) / 2 + yp1 'RECALCULATE BASED ON SCREEN RESOLUTION, MY SCREEN RESOLUTION IS 1600 X 900
yp2 = (res_y - 900) / 2 + yp2 'RECALCULATE BASED ON SCREEN RESOLUTION, MY SCREEN RESOLUTION IS 1600 X 900
xd = (xd1 - xd2) / (xp1 - xp2) * (coor.X - xp2) + xd2 'CALIBRATION
yd = (yd1 - yd2) / (yp1 - yp2) * (coor.Y - yp2) + yd2 'CALIBRATION
userform1.Label_x.caption = " X : " & WorksheetFunction.RoundUp(xd, 2)
userform1.Label_y.caption = " Y : " & WorksheetFunction.RoundUp(yd, 2)
End Sub