Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
05.05.2016, 21:11
|
|||
---|---|---|---|
|
|||
Координаты курсора на элементе |
|||
#18+
Здравствуйте. На форме есть элемент рисунок в нём отсутствует картинка, вместо этого в свойствах тип фона указан обычный и задан цвет. В итоге получается квадрат. (можно конечно использовать элемент прямоугольник, но желательно всёже изображение). Суть в том что мне нужно увеличивать глобальную переменную на 1 когда курсор входит в область изображения и на 1 когда уходит. Пока курсор внутри рисунка переменная не меняется. Использую для этого событие "перемещение указателя" (MouseMove) элемента. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Но возникли проблемы/вопросы: 1) Размер квадрата 1x1см. Его Height и Width равны 567. Но координаты X и Y выводятся всегда кратными 5. Поэтому немогу прописать условие If (X = Me.Рисунок1.Width) Or (Y = Me.Рисунок1.Height) Or (X = 0) Or (Y = 0) Then Может есть возможность узнавать координаты более точно (именно в самой фигуре) 2) Хоть размер указан 567, но при выведении координат максимальный X (и Y) на котором выходит курсор (то есть последнее значение) является 555. Получается что фигура обрезана на 12. Если учесть то что шагом является 5 и координаты всегда кратны им то последнее значение должно быть 565, а не 555. Куда деваются эти (?пиксели?). 3) Иногда происходит ошибочное срабатывание, тогда count увеличивается на 3 или же вообще не срабатывает. В чём может быть причина ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.05.2016, 21:34
|
|||
---|---|---|---|
|
|||
Координаты курсора на элементе |
|||
#18+
А зачем знать размеры квадрата? Можно завести переменную, просто отслеживающую нахождение в квадрате и выход из него, а также добавить процедуру обработки перемещения указателя для области вокруг квадрата Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.05.2016, 22:23
|
|||
---|---|---|---|
|
|||
Координаты курсора на элементе |
|||
#18+
__Michelle, Найдете отличие в подходах? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.05.2016, 22:29
|
|||
---|---|---|---|
|
|||
Координаты курсора на элементе |
|||
#18+
Predeclared, Попробую минут через 30-40. Сейчас у меня компьютер забрали. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.05.2016, 23:31
|
|||
---|---|---|---|
|
|||
Координаты курсора на элементе |
|||
#18+
Predeclared, Вот только что удалось посмотреть. Кажется, поняла а) при вхождении в область квадрата – фиксируется факт входа, – отключается отслеживание движения мыши по этому квадрату. б) при выходе из квадрата – фиксируется факт выхода, – включается слежение за перемещением по квадрату, чтобы поймать следующее вхождение в квадрат ...................... и так по кругу. Да? Мне понравилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.05.2016, 23:49
|
|||
---|---|---|---|
|
|||
Координаты курсора на элементе |
|||
#18+
Да, в таком решении нет бесконечной обработки событий перемещения мышки. Это не VB-шный вариант, а чисто Access-VBA-шный. Но раз он таки имеется, то почему бы им не воспользоваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.05.2016, 12:44
|
|||
---|---|---|---|
|
|||
Координаты курсора на элементе |
|||
#18+
Ежик_из_тумана1) Размер квадрата 1x1см. Его Height и Width равны 567.Откуда берётся 567: 1 см = 1/2,54 дюйма, 1 дюйм (inch) = 72 пункта (point), 1 пункт = 20 твипов (twip) => 1 см = 72 * 20 / 2,54 = ~566,929 твипов. Округляем до целого (Integer), получаем 567 твипов.Ежик_из_туманаНо координаты X и Y выводятся всегда кратными 5.Не 5, а 15. И не всегда, кстати. Откуда берётся 15: существует такое понятие как логическое разрешение (растрового) устройства отображения по осям координат, выражается в DPI (точек растра (пикселей) на "логический" дюйм). Курсор мыши двигается по (растровому) устройству отображения - экрану с шагом 1 пиксель. Логическое разрешение экрана можно для пользователя узнать через панель управления, для программиста - функцией GetDeviceCaps с параметром LOGPIXELSX или LOGPIXELSY. Обычно (изредка попадаются другие значения, например, 120) это 96 DPI. Получается: 1 пиксель = 1 дюйм / DPI = 72 * 20 / 96 = 15 твипов.Ежик_из_туманаМожет есть возможность узнавать координаты более точно (именно в самой фигуре)Нет, если не лезть в дебри. И незачем.Ежик_из_тумана2) Хоть размер указан 567, но при выведении координат максимальный X (и Y) на котором выходит курсор (то есть последнее значение) является 555. Получается что фигура обрезана на 12. Если учесть то что шагом является 5 и координаты всегда кратны им то последнее значение должно быть 565, а не 555. Куда деваются эти (?пиксели?).По существу ответил выше. Практический же выход из положения - выравнивание положения (Left, Top) и размеров (Width, Height) элемента управления программно по границе экранных пикселей. См. AlignControlToPixelBound2 в 13530661 .Ежик_из_тумана3) Иногда происходит ошибочное срабатывание, тогда count увеличивается на 3 или же вообще не срабатывает. В чём может быть причина ?MouseMove не даёт полный контроль за выходом курсора за область. "По-взрослому " эта задача решается через subclassing, но обычно программист на VBA от этого слова шарахается. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=45&mobile=1&tid=1613601]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 130ms |
0 / 0 |