注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

零售创新,创新那些事儿,SPSS,VBA

零售创新

 
 
 

日志

 
 
关于我

新浪微博,零售创新 研究经理,数据分析师 希望和市场研究和零售业的同事共同进步! 本博客发表的都是免费或试用的资料,如果有版权问题请发邮件wangli12a@163.com联系删除。 spss excel vba blog

网易考拉推荐

VBA里的尺寸单位  

2008-02-19 14:47:01|  分类: VB和VBA知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

VBA里的尺寸单位


VBA里的尺寸单位很多,如Twip,Point,Pixel,Inch,Character,Millimeter, Centimeter等。而不同的地方使用的单位有时不一样,例如Excel和Word里的长宽单位多用Point,Access里多用Twip,而 API里用的尺寸单位多为Pixel,这样单位转换时会觉得有点混乱。这主要介绍用得比较多的Twip,Point和Pixel之间的转换方法。

VBA里的尺寸单位很多,如Twip,Point,Pixel,Inch,Character,Millimeter,Centimeter等。而不同的地方使用的单位有时不一样,例如Excel和Word里的长宽单位多用Point,Access里多用Twip,而API里用的尺寸单位多为 Pixel,这样单位转换时会觉得有点混乱。这主要介绍用得比较多的Twip,Point和Pixel之间的转换方法。

Twip/Point是一个与屏幕无关的测量单位,这样在打印时不要考虑屏幕分辨率的问题。Pixel则是同像素有关的测量单位。屏幕上显示最小的一个点就是一个像素。

Twip,Point和Inch转换公式如下:
Twip=1/20*Point=1/1440*Inch
Point=20*Twip=1/72*Inch

而Twip/Point同Pixel之间则要依据设备环境参数做转换,下面是一些转换的函数。

Private Const HORZRES = 8
Private Const VERTRES = 10
Private Const LOGPIXELSX = 88
Private Const LOGPIXELSY = 90
Private Const TWIPSPERINCH = 1440

Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, _
   ByVal nIndex As Long) As Long
Public Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, _
   ByVal hDC As Long) As Long
Function getDPI(bX As Boolean) As Integer  '获取屏幕分辨率
    Dim hDC As Long, RetVal As Long
    hDC = GetDC(0)
    If bX = True Then
        getDPI = GetDeviceCaps(hDC, LOGPIXELSX)
    Else
        getDPI = GetDeviceCaps(hDC, LOGPIXELSY)
    End If
    RetVal = ReleaseDC(0, hDC)
End Function
Function Pixel2TwipX(x As Long) As Long   '水平方向Pixel转Twip
    Pixel2TwipX = (x / getDPI(True)) * TWIPSPERINCH
End Function
Function Pixel2TwipY(x As Long) As Long   '垂直方向Pixel转Twip
    Pixel2TwipY = (x / getDPI(False)) * TWIPSPERINCH
End Function
Function Pixel2PointX(x As Long) As Long  '水平方向Pixel转Point
    Pixel2PointX = Pixel2TwipX(x) / 20
End Function
Function Pixel2PointY(x As Long) As Long  '垂直方向Pixel转Point
    Pixel2PointY = Pixel2TwipY(x) / 20
End Function
Function Twip2PixelX(x As Long) As Long   '水平方向Twip转Pixel
    Twip2PixelX = x / TWIPSPERINCH * getDPI(True)
End Function
Function Twip2PixelY(x As Long) As Long   '垂直方向Twip转Pixel
    Twip2PixelY = x / TWIPSPERINCH * getDPI(False)
End Function
Function Point2PixelX(x As Long) As Long  '水平方向Point转Pixel
    Point2PixelX = Twip2PixelX(x * 20)
End Function
Function Point2PixelY(x As Long) As Long  '垂直方向Point转Pixel
    Point2PixelY = Twip2PixelY(x * 20)
End Function
Function getScreenX() As Long     '获取屏幕宽
    Dim hDC As Long, RetVal As Long
    hDC = GetDC(0)
    getScreenX = GetDeviceCaps(hDC, HORZRES)
    RetVal = ReleaseDC(0, hDC)
End Function
Function getScreenY() As Long     '获取屏幕高
    Dim hDC As Long, RetVal As Long
    hDC = GetDC(0)
    getScreenY = GetDeviceCaps(hDC, VERTRES)
    RetVal = ReleaseDC(0, hDC)
End Function

  评论这张
 
阅读(913)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017