Снова про координаты

вадя
Дата: 11.09.2005 22:45:32
есть фарма с тип границы- отсутствует
т.е. только поля
ленточная
записей N (3-8)

событие перемещение мыши по полям отрабатывает (другие не катят -фома только из полеу, пустых мест формы нет)

хочется чтоб при перемещении мыши становилась "активной" запись под мышью
сделал :

Private Sub менеджер_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim df As Long
GetCursorPos CurPos
df = GetScreenY  - размер в твипах
df = CDec(((df * CurPos.y / 1024) - ee) / (Me!менеджер.Height))  - тут лезет лажа, не хочет правильно считать 
Me.Recordset.AbsolutePosition = df   
End Sub

ее - кординаты открытия окна формы
1024 это 1024*1280

чё я не так делаю????
Alexander G
Дата: 12.09.2005 02:26:07
Не вижу учета высоты вышележащих секций - меню и тулбаров.
вадя
Дата: 12.09.2005 07:17:17
автор
Не вижу учета высоты вышележащих секций - меню и тулбаров.


как это учесть? чёт я в ступоре.

ее - кординаты открытия окна формы - эта форма открывается в нужном месте , следовательно при ее открытии должно быть учтено всё.
расчет идет относительно координат откытия данного окна и позиции курсора

(позиция курсора - позиция открытия окна)/ высота поля= номер записи

или я неправильно мыслю?
Alexander G
Дата: 12.09.2005 08:44:34


Не то подумал.
Быстренько сделал так:
Private Sub менеджер_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Dim coord As POINT_TYPE ' координаты курсора
Dim retval As Long ' возвращаемое значение
Dim r As Rect ' размеры окна
retval = GetCursorPos(coord) ' считываем позицию курсора
retval = GetWindowRect(Me.hwnd, r) ' считываем размеры текущего окна

Me.Recordset.AbsolutePosition = Int((coord.Y - r.top) / (менеджер.Height /
1440 * 96)) + 1
End Sub

96 - пикселов на дюйм (у меня разрешение 1024*768)



Posted via ActualForum NNTP Server 1.3

вадя
Дата: 12.09.2005 11:38:36
может ли быть ошибка при таких использованиях?
и если да , то в чём она проявляется?

retval = GetCursorPos(coord) это как полагается...

GetCursorPos(coord) а это я использую



2Alexander G
а твой вариант мне больше нравится (если он у меня заработает)

retval = GetWindowRect(Me.hwnd, r) ' считываем размеры текущего окна

размеры рабочей зоны? или ?
верняя синяя полоса учитывается?
Alexander G
Дата: 13.09.2005 00:51:47
вадя

retval = GetWindowRect(Me.hwnd, r) ' считываем размеры текущего окна
размеры рабочей зоны? или ?
верняя синяя полоса учитывается?

Полный размер. Не учитывал - нужно учесть толщину границы и полоски оконного меню. Писал, извини, на скорую руку, вот базка.
вадя
Дата: 13.09.2005 07:34:19
спасибо!
подошло.
хотя непонятно , в чём я в своём варианте ошибался.
только у меня без +1. ну это мелочь
а учитывать границы у меня есть чем. это не проблема

при таком варианте получается интересный эффект
(но нада сделать так:
тип границы у формы -отсутствует
цвет области данных = цвету "родительской "формы
цвет поля - по желанию
тип фона - прозрачный
оформление - с тенью
...)

менюшка красивая получается

но, ежели открыть , к примеру, диспетчер задач с "поверх всех" и мышку навести на такое поле - проц грузится почти на 100%
Alexander G
Дата: 13.09.2005 07:46:46
Поерзал мышкой (WinXP,A2002) - больше 6% загрузки не получил.
вадя
Дата: 13.09.2005 08:11:36
странна, у меня с НТ оба показывали по 45-50%
у тебя диспетчер с отображением загрузки проца был?
а остальные как я описал?

я еще поэкперементирую, вечером, уточню, что так влияет.
Alexander G
Дата: 13.09.2005 08:21:12
Раскрашивать не раскрашивал, но диспетчер был в наличии поверх.