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


Форумы  :: FAQ FoxPro

Как перевести координату в пикселях (Pixcels) в твипы (Twips)
Дата: 22.01.06 19: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 3546 Владимир Максимов 01.03.05 20:55
  На машине клиента ActiveX требует лицензию 6174 Владимир Максимов 18.09.05 10:03
  Как перевести координату в пикселях (Pixcels) в твипы (Twips) 9436 Владимир Максимов 22.01.06 19:29


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

On-line: 44 and Guests: 44


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