:: Главная :: Решения :: Статьи :: Проект "Русский help" :: Файловый архив :: Фотоальбом :: Ссылки ::
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  


Форумы  :: FAQ FoxPro

Как перевести координату в пикселях (Pixcels) в твипы (Twips)
Дата: 22.01.06 20:29:40 ОтветитьЦитировать

Проблема

Многие ActiveX компоненты требуют для указания в качестве параметров своих методов координаты в твипах (Twips), но FoxPro дает координаты в пикселах (Pixcels). Как перевести одно в другое?

Решение

Для того, чтобы каждый раз не пересчитывать коэффициенты заново, создайте свойства nTwipX и nTwipY для хранения переводных коэффициентов по X (по вертикали) и по Y (по горизонтали) соответствеенно.

Тогда следующий код следует выполнить в событии Init того объекта, где созданы эти свойтсва.

* Следующие API функции используются для расчета переводного коэффициента
DECLARE INTEGER GetActiveWindow IN WIN32API
DECLARE INTEGER GetDC IN WIN32API INTEGER iHDC
DECLARE INTEGER GetDeviceCaps IN WIN32API INTEGER iHDC, INTEGER iIndex
LOCAL liHDC
liHDC = GetDC(GetActiveWindow())
This.nTwipX = 1440/GetDeviceCaps(m.liHDC,88)
This.nTwipY = 1440/GetDeviceCaps(m.liHDC,90)
* Освобождение контекста устройства, для освобождения памяти
DECLARE INTEGER ReleaseDC IN WIN32API INTEGER, INTEGER
=ReleaseDC(GetActiveWindow(),m.liHDC)

Здесь This.nTwipX и This.nTwipY - это как раз те самые коэффициенты перевода из пикселей в твипы. В данном случае оформлены как дополнительные свойства объекта.

Координата_по_Х_в_твипах = This.nTwipX * координата_по_X_в_пикселях
Координата_по_Y_в_твипах = This.nTwipY * координата_по_Y_в_пикселях

В большинстве случаев, эти коэффициенты равны 15

Данный код несколько избыточный в части использования функции GetActiveWindow(). Дело в том, что эта функция возвращает, так называемое HWND-окна (некий числовой идентификатор окна).

Но все дело в том, что многие ActiveX имеют свойство, возвращающее значение их HWND, а, начиная с версии Visual FoxPro 7.0, такое свойство имеют и формы собственно FoxPro. Т.е. Вы можете вместо функции GetActiveWindow() напрямую использовать свойство HWND нужного объекта. Впрочем, и в таком виде данный код вполне работоспособен.
Ratings: 0 negative/0 positive


Тема Просмотров Написано Написано
  ActiveX 4013 Владимир Максимов 01.03.05 21:55
  На машине клиента ActiveX требует лицензию 7087 Владимир Максимов 18.09.05 11:03
  Как перевести координату в пикселях (Pixcels) в твипы (Twips) 10397 Владимир Максимов 22.01.06 20:29


Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

On-line: 1 (Гостей: 1)

© 2006 Fox Club 
Яндекс.Метрика