Чем заменить ScaleMode в VBA????

Программирование на Visual Basic for Applications
alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Чем заменить ScaleMode в VBA????

Сообщение alex-lev9 » 04.11.2005 (Пт) 11:57

Собсно вопрос сформирован.
Для чего это нужно. Хочу постоянно контролировать позицию курсора мыши и сравнивать ее с координатами определенного столбца данных таблицы Excel. А поскольку измерения того и другого производятся в разных единицах, возникает резонный вопрос, как привести все к общему знаменателю.
Определение позиции курсора провожу при помощи Application.OnTime.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.11.2005 (Пт) 12:06

Причём тут только scalemode?..
Проблема решена?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 04.11.2005 (Пт) 22:35

:shock: Ё-моё! Так ведь это же я!
А если серьезно, то проблема так и не решена.
Координаты курсора мыши определить труда не составляет:

z = GetCursorPos(MousePos) - в пикселах

Границы ячейки - тем более:

X_min = Worksheets("Лист1").Range("G1").Left;
X_max = X_min + Worksheets("Лист1").Range("G1").Width - в пойнтах, насколько я понимаю.

А вот как узнать, что X_min < MousePos.x < X_max. :?:

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 05.11.2005 (Сб) 22:39

Так все-таки, какие мысли бродят у смышленого народа по этому поводу?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.11.2005 (Пн) 9:15

Э... Это тонкий сарказм или я чего-то не понимаю?
If MousePos.x >= X_min And MousePos.x <= X_max Then ...
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.11.2005 (Пн) 12:11

alibek, переведи в экранные координаты columns(7).left :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.11.2005 (Пн) 12:14

А...
Ну так, максимизировать клиентское окно, скрыть заголовки строк и столбцов :)
Lasciate ogni speranza, voi ch'entrate.

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 07.11.2005 (Пн) 23:37

Итак, подведем промежуточные итоги.
1) Определяю координаты курсора в текущий момент времени:
z = GetCursorPos(MousePos)

2) Определяю пределы изменения позиции курсора мыши (для начала по оси X), ограниченные слева
X_min = Columns(7).Left,
справа
X_max = Columns(7).Left + Columns(7).Width.

3) Перевожу X_min и X_max в пикселы
или MousePos.x и MousePos.y в пойнты.

4) Проверяю выполнение условия
MousePos.x > X_min And MousePos.x < X_max.

Так вот - меня напрягает пункт №3. Как правильно и корректно перевести пикселы в пойнты или пойнты в пикселы?
Клиентское окно развернуто, названий строк и столбцов нет.

Что касается подозрения в сарказме, то уверяю, что никого обидеть и в мыслях не держал. :salut:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.11.2005 (Пн) 23:53

Подойдём к вопросу с другой стороны...

Код: Выделить всё
  Dim p As POINT, r As Object
 
  GetCursorPos p
 
  Set r = Windows(1).RangeFromPoint(p.x, p.y)
 
  If Not r Is Nothing Then
    If TypeOf r Is Excel.Range Then
      If r.Column = 7 Then
        '...
      End If
    End If
  End If
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 08.11.2005 (Вт) 23:13

Огромнейшее спасибо. Подошло как в лучших домах Парижа и Жмеринки. Прям то, что нужно. Еще раз БОЛЬШОЕ СПАСИБО :salut:


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 89

    TopList  
cron