Тема: Определение координаты курсора
Привет,
Нужно через определенные интервалы времени, определять координату положения курсора на экране (чертежа).
Из строки состояния, например, это можно вытащить?
Спасибо,
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Определение координаты курсора
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Привет,
Нужно через определенные интервалы времени, определять координату положения курсора на экране (чертежа).
Из строки состояния, например, это можно вытащить?
Спасибо,
Код разработан на основе алгоритма предложенного Александром Ривилисом:
Option Explicit Type POINTAPI X As Long Y As Long End Type Type rect Left As Long Top As Long Right As Long Bottom As Long End Type Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Public Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long Public Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As rect) As Long Sub CursorPos() Dim retValue As Long Dim CursorLoc As POINTAPI retValue = GetCursorPos(CursorLoc) Dim vHWND As Long If Documents.Count = 0 Then MsgBox "There are no open documents!" Exit Sub End If vHWND = ActiveDocument.hwnd Dim vRect As rect Dim SizeOfScreen As Variant SizeOfScreen = ThisDrawing.GetVariable("SCREENSIZE") vRect.Right = SizeOfScreen(0) vRect.Bottom = SizeOfScreen(1) retValue = ScreenToClient(ByVal vHWND, CursorLoc) Dim HeightScreen As Long HeightScreen = ThisDrawing.GetVariable("VIEWSIZE") Dim WidthScreen As Long WidthScreen = HeightScreen * vRect.Right / vRect.Bottom Dim ÑenterScreen As Variant ÑenterScreen = ThisDrawing.GetVariable("VIEWCTR") Dim X0 As Double Dim Y0 As Double X0 = ÑenterScreen(0) - WidthScreen / 2 Y0 = ÑenterScreen(1) - HeightScreen / 2 Dim K_Coord_ScreenToWCS As Single K_Coord_ScreenToWCS = HeightScreen / vRect.Bottom Dim X_CursorPos As Double Dim YCursorPos As Double X_CursorPos = X0 + K_Coord_ScreenToWCS * CursorLoc.X YCursorPos = Y0 + (HeightScreen - K_Coord_ScreenToWCS * CursorLoc.Y) MsgBox "X = " & X_CursorPos & vbCrLf & "Y = " & YCursorPos End Sub
> LeonidSN
Спасибо,
Я искал, честно слово.
Наблюдается расхождение, но менее 1 единицы чертежа.
> Vildar
Наблюдается расхождение...
Думаю, это может быть связано с недостаточной точностью вычислений. Оператор деления "/" в VB(VBA) работает ненадежно.
Мне в свое время для вычисления точного значения остатка от деления пришлось запускать собственный цикл, что-то в этом духе:
Do Ortho_Line = Ortho_Line - SpF4 * 100 D_SpF4 = Ortho_Line N_Rows = N_Rows + 1 Loop Until (D_SpF4 < SpF4 * 100)
Вариант номер два - использовать для вычислений специализированную библиотеку в виде MS Script Control'а (msscript.ocx), например:
Dim scr As New ScriptControl scr.Language = "VBScript" ------------------------- Result = scr.Eval(exp)
exp - вычисляемое выражение
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Определение координаты курсора
Форум работает на PunBB, при поддержке Informer Technologies, Inc