Получить положение мыши в форме VB6

В программе, которую я пишу, мне нужно абсолютное положение мыши в левом верхнем углу формы. Я использую этот код:

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

    Debug.Print "x: " & X & " - y: " & Y

End Sub

Когда я использую этот код, левый верхний угол имеет координаты 0,0. Но проблема в том, что значения в 15 раз больше, когда я перемещаюсь внутри формы.

Вот почему я использовал:

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

    Debug.Print "x: " & X / 15 & " - y: " & Y / 15

End Sub

Это дает правильные координаты, но зачем мне делить это на 15? Я не уверен, что этот код будет совместим с другими системами.


person OsiriX    schedule 02.11.2012    source источник
comment
Для меня координаты — это количество пикселей от левого верхнего угла. Когда он дает мне, например, 15000, я знаю, что это неправильно, потому что должно быть 1000.   -  person OsiriX    schedule 02.11.2012


Ответы (2)


Просмотрите документацию для MouseMove. Возвращаемые значения X и Y соответствуют «свойствам ScaleHeight, ScaleWidth, ScaleLeft и ScaleTop объекта».

Поэтому просмотрите документацию для ScaleHeight, ScaleWidth и для ScaleLeft, ScaleTop , понятно, что вы можете диктовать, как определяются координаты X и Y. Вы не ограничены твипами или пикселями, но можете использовать любую систему нумерации, которую вы диктуете.

Вот цитата со страницы ScaleHeight, ScaleWidth:

Например, оператор ScaleHeight = 100 изменяет единицы измерения фактической внутренней высоты формы. Вместо n текущих единиц (твипов, пикселей и т. д.) высота будет равна 100 единицам, определяемым пользователем. Следовательно, расстояние в 50 единиц составляет половину высоты/ширины объекта, а расстояние в 101 единицу будет отклоняться от объекта на 1 единицу.

В связи с этим, чтобы убедиться, что ваши результаты соответствуют вашим ожиданиям, вы можете точно указать форме, сколько пользовательских единиц она содержит.

person Daniel    schedule 02.11.2012
comment
Спасибо, у меня все заработало, изменив масштаб на пиксели. - person OsiriX; 02.11.2012
comment
+1 Если результаты отличаются от ваших ожиданий, проверьте документацию, чтобы убедиться, что ваши ожидания неверны. - person MarkJ; 02.11.2012

Единицы указаны в Twips (коэффициент преобразования времени выполнения: screen.TwipsPerPixelX и Y). Вы также можете изменить формы ScaleMode, чтобы использовать Pixels.

person Alex K.    schedule 02.11.2012