作者:绿色风
分类:
时间:2022-08-17
浏览:150
楼主 amulee |
Q:如何转换磅、像素和缇? A:在VBA编程中经常牵涉以下几个长度单位:磅、像素和缇。在有些编程中需要将这几个长度单位进行转换。 一般来说,这几个长度单位之间的转换是固定的(其中1磅=20缇是永远固定的),在如图的设置中。
1像素=15缇 1像素=0.75磅
但是,当上图设置变化时,该转换就会发生变化。可以借助API的GetDeviceCaps函数完成转换。参考代码如下:- Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
- Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nindex As Long) As Long
- Private PixX2TwipX As Double '像素转换成缇
- Private PixX2TwipY As Double
- Private PixX2PointX As Double '像素转换成磅
- Private PixX2PointY As Double
- Private Const LOGPIXELSX = 88 '单位逻辑英寸像素
- Private Const LOGPIXELSY = 90
- Sub Test()
- PixX2TwipX = Application.InchesToPoints(1) * 20 / GetDeviceCaps(GetDC(0), LOGPIXELSX)
- PixX2TwipY = Application.InchesToPoints(1) * 20 / GetDeviceCaps(GetDC(0), LOGPIXELSY)
- PixX2PointX = Application.InchesToPoints(1) / GetDeviceCaps(GetDC(0), LOGPIXELSX)
- PixX2PointY = Application.InchesToPoints(1) / GetDeviceCaps(GetDC(0), LOGPIXELSY)
- MsgBox "水平方向:1像素等于" & PixX2TwipX & "缇" & vbCrLf & "垂直方向:1像素等于" & PixX2TwipY & "缇"
- MsgBox "水平方向:1像素等于" & PixX2PointX & "磅" & vbCrLf & "垂直方向:1像素等于" & PixX2PointY & "磅"
- End Sub
利用该转换结果,可以方便地进行像素和VBA默认的长度单位磅之间的转换。如在Image控件中导入一张图,可以轻松将该控件调整为图片大小。如本例中导入一张208*92的图 参考代码如下:- Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
- Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nindex As Long) As Long
- Private PixX2TwipX As Double '像素转换成缇
- Private PixX2TwipY As Double
- Private PixX2PointX As Double '像素转换成磅
- Private PixX2PointY As Double
- Private Const LOGPIXELSX = 88 '单位逻辑英寸像素
- Private Const LOGPIXELSY = 90
- Private Sub UserForm_Initialize()
- PixX2PointX = Application.InchesToPoints(1) / GetDeviceCaps(GetDC(0), LOGPIXELSX)
- PixX2PointY = Application.InchesToPoints(1) / GetDeviceCaps(GetDC(0), LOGPIXELSY)
- With Image1
- .Picture = LoadPicture(ThisWorkbook.Path & "\ET.jpg")
- .Height = 92 * PixX2PointY
- .Width = 208 * PixX2PointX
- End With
- End Sub
利用像素和缇的转换还可以兼容一些控件的使用。
长度单位.rar |
2楼 xyf2210 |
学习API |
3楼 chenlifeng |
感觉很神奇,但是有两个问题没有看得太懂: 1、如何得知当前屏幕的宽度? 2、这个宽度的单位,与我要设置的EXCEL工作表格中的列的宽度,单位之间是个什么关系? 我知道有些函数可得出某屏幕的宽度是1024*768等,但我发现每台电脑的屏幕明显不一样宽度,答案还是1024*768,故感觉这不是真正想要的数字。 即我如果知道了电脑屏幕的宽度,即与列宽的单位换算法,我想要如何处理某一列或几列的宽度,就不太难了。 |
4楼 amulee |
你思考问题太狭窄了。
你所要做的只是统一几个不同对象的单位而已。比如磅,你所要做的是将所有东西转换成磅,仅此而已。
屏幕得到的数字是像素,你转换成磅。 列宽中如果用ColumnWidth属性,表示能够容纳多少个字,而Width的单位则是磅。 |
5楼 chenlifeng |
谢谢不厌其烦及指教批评,受益ing! |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一