这里我们来看一下ScaleLeft/Top/Height/Width ScaleX ScaleY TextHeight TextWidth的一些特性与关连
所谓的ScaleLeft ScaleTop ScaleTop ScaleWidth指的是Window中的Client Area即可以画图放元件的区域像Title区就不在Client Area的范围如果我们设定ScaleMode成不为的数值如设定ScaleMode = (VBPixels)那麽就代表这区域的度量是以Pixels为单位而ScaleTop =ScaleLeft = 即原点在左上角
VB提供了一个很好用的座标系统转换即ScaleMode ScaleLeft ScaleTop ScaleTopScaleWidth我个人不喜欢VB内定的ScaleMode = VbTwips我爱 ScaleMode=VBPixels原因是Window系统的度量单位是使用Pixels而不是Twips
如果我们想在一个画面上画上座标那麽如何才能不管Window的大小而只管我们所关注的座标呢?假设我们想做一个座标原点在Form的左下角()而右上角座标是() 那我们只要对Form如此设
ScaleTop =
ScaleWidth =
ScaleLeft =
ScaleHeight =
那就成了这时候如果我们去查一下Form的MouseDown的X Y值会发现它的值已变成落在之间了(此时的ScaleMode = 自动变Vbuser)更有趣的是用来计算字串高宽的TextHeight/TextWidth也变成以座标的方式来
表现了
例如说
CurrentX =
CurrentY =
FormPrint HaHa
这时会见到于Form左下方会出现HaHa它的位置便是于座标()之处所以了如果Form变大FormPrint HaHa所显示之位置也会自动更动不像其他的ScaleMode(如vbPixel)会在固定的绝对单位处显示HaHa然而有时候我们会想要以绝对单位来做一些事例如我们希望在左边算来第三个Pixels处来显示东西的确数学好的人可以自己转换而像我数学不好的人可以用ScaleX/ScaleY来做像方才的例子左边算来第三点(Pixels)相对应于新的座标的宽度便是FormScaleX(vbPixels vbUser)
再来一个有趣的问题如果有人见过一篇文章用API来任意角度旋转字型那篇文章中字型旋转之后印在Form上如果我们转度而且于()处印字会发现它是从()处往萤幕上方写出字如果我们想在座标()处当作字串的结束之地那该如何呢我会计算出该字串的长度(例如长度)而后在()处印字那困难点变成如何得知该字串长度第一个反应是TextWidth不过别忘了TextWidth它随着ScaleMode的更动而变宽度x者如果垂直Print而便假设其高度也是x是不对的(如ScaleTop = ScaleHeight = ScaleLeft = ScaleWidth
=而宽度=的字串垂直印的高度应是不会是若X Y轴单位不同时也不一定是(如果字大小不变的话)
那使用Pixels来做二者的转换Pixels一个点便是一个点所以XY轴的单位是相同的当然使用Twips也可以只是如果中间有用上API人家大多以Pixels为单位
With Form
OldScaleLeft = ScaleLeft
OldScaleTop = ScaleTop
OldScaleWidth = ScaleWidth
OldScaleHeight = ScaleHeight
OldScaleMode = ScaleMode
ScaleMode = vbPixels
txtLen = TextWidth(mystring) myString是待旋转的字串
if OldScaleMode <> vbUser then
ScaleMode = oldScaleMode
else
ScaleLeft = OldScaleLeft
ScaleTop = OldScaleTop
ScaleWidth = OldScaleWidth
ScaleHeight = OldScaleHeight
End If
txtHeight = ScaleY(txtLenvbPixels vbUser)
End With
如此txtHeight便是字串于旋转后的高度啦!