Продолжение борьбы с регионами формы

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

Продолжение борьбы с регионами формы

Сообщение alex-lev9 » 16.09.2005 (Пт) 23:27

Хочу создать регион по размеру находящегося на форме контрола, например Image1. Определил координаты узловых точек (x1, y1, x2, y2) контрола. Подставил в CreateRectRgn. При работе получаю участок формы, который должен быть ограничен этими точками. Однако, почему-то реальные координаты точек не совпадают с рассчетными. Кроме того, высота и ширина далеки от указанных в Image1.Properties. Что это за дела? Почему так происходит?

Shurrik
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 110
Зарегистрирован: 20.05.2004 (Чт) 5:35
Откуда: Керчь, Крым

Сообщение Shurrik » 17.09.2005 (Сб) 7:43

Клиентная область форма, где находятся контролы не совпадает с размером самой формы. Надо учитывать высоту заголовка и ширину рамки формы.
Колесо: Хочешь жить? Умей вертеться.

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

Сообщение alex-lev9 » 17.09.2005 (Сб) 8:21

Это я понимаю.
Но тогда почему при подборе начала региона (координат левой верхней точки X1 и Y1) я не могу получить координаты правой нижней простым прибавлением:

X2 = X1 + Control.Width
Y2 = Y1 + Control.Height

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 19.09.2005 (Пн) 11:24

Есть предположение, что используются разные единицы измерения: координаты контрола описаны в points, а регион в апи задается через pixels. Но это только на уровне догадок. Нет времени проверить.
Если все же идея верна, то следующие разделы справки VBA должны помочь: PointsToScreenPixelsX Method и PointsToScreenPixelsY Method.
Life is what happens to us when we are planning to do something else...

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

Сообщение alex-lev9 » 22.09.2005 (Чт) 12:56

:scratch: Не выходит каменный цветок, хоть ты тресни.
При использовании PointsToScreenPixelsX Method преобразование происходит даже очень близко к необходимой форме, но все равно не так, как нужно. А при использовании PointsToScreenPixelsY Method - еще хуже. Дело в том, что если взять отдельную точку и прооперировать ее PointsToScreenPixelsX Method и PointsToScreenPixelsY Method получаются совершенно разные значения. По моему это связано с текущим разрешением экрана.
Ну в общем этот метод - не фонтан.

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

Сообщение alibek » 22.09.2005 (Чт) 15:45

Lasciate ogni speranza, voi ch'entrate.

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 23.09.2005 (Пт) 0:23

alex-lev9 писал(а)::scratch: Дело в том, что если взять отдельную точку и прооперировать ее PointsToScreenPixelsX Method и PointsToScreenPixelsY Method получаются совершенно разные значения. По моему это связано с текущим разрешением экрана.

Понятное дело связан - при разных разрешениях экрана будут разные значения (для того и существуют эти методы, что у всех разрешение разное). А разные значения выдают потому, что PointsToScreenPixelsX используется для того, чтобы преобразовывать размеры по горизонтали, а PointsToScreenPixelsY - по вертикали. Тебе их обязательно ОБА надо использовать.
Только не забудь сделать поправки на заголовок и рамки формы, как написал Shurrik:
Клиентная область форма, где находятся контролы не совпадает с размером самой формы. Надо учитывать высоту заголовка и ширину рамки формы.
Life is what happens to us when we are planning to do something else...


Вернуться в VBA

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

Сейчас этот форум просматривают: Yandex-бот и гости: 90

    TopList